我想申请洛扎德。我的wordpress/woocommerce前端的js脚本。为此,我必须创建一个新属性,即data src和place“load”。正常src属性中的gif。代码工作正常,但它也适用于后端,但我没有加载lozad。后端的js脚本,因此不会显示“我的产品列表”视图中的图像,而是显示加载。gif。我怎样才能只针对产品页面和博客页面(首页)?我尝试了函数is\\u admin(),但运气不好。这是我正在使用的代码:
function add_lazyload($content) {
$content = mb_convert_encoding($content, \'HTML-ENTITIES\', "UTF-8");
$dom = new DOMDocument();
@$dom->loadHTML($content);
// Convert Images
$images = [];
foreach ($dom->getElementsByTagName(\'img\') as $node) {
$images[] = $node;
}
foreach ($images as $node) {
$fallback = $node->cloneNode(true);
$oldsrc = $node->getAttribute(\'src\');
$node->setAttribute(\'data-src\', $oldsrc );
$newsrc = \'https://d1zczzapudl1mr.cloudfront.net/preloader/loader_150x150.gif\';
$node->setAttribute(\'src\', $newsrc);
$oldsrcset = $node->getAttribute(\'srcset\');
$node->setAttribute(\'data-srcset\', $oldsrcset );
$newsrcset = \'\';
$node->setAttribute(\'srcset\', $newsrcset);
$classes = $node->getAttribute(\'class\');
$newclasses = $classes . \' lozad\';
$node->setAttribute(\'class\', $newclasses);
$noscript = $dom->createElement(\'noscript\', \'\');
$node->parentNode->insertBefore($noscript, $node);
$noscript->appendChild($fallback);
}
$newHtml = preg_replace(\'/^<!DOCTYPE.+?>/\', \'\', str_replace( array(\'<html>\', \'</html>\', \'<body>\', \'</body>\'), array(\'\', \'\', \'\', \'\'),
$dom->saveHTML()));
return $newHtml;
}
add_filter(\'the_content\', \'add_lazyload\');
add_filter(\'post_thumbnail_html\', \'add_lazyload\');
最合适的回答,由SO网友:Mark Kaplun 整理而成
解决方案很简单,请检查is_admin()
在对内容进行任何修改或挂接之前返回falseadmin_init
添加挂钩。
我不这么认为the_content
在管理上下文中使用,但可能会使用缩略图生成。
要记住的另一件事是,在生成AJAX/REST响应时可能会触发这些挂钩(取决于它们的内容),在这种情况下,是否仍应使用延迟加载并不明显。