替换图像属性(data-src)也适用于后端

时间:2018-03-01 作者:nibor90

我想申请洛扎德。我的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\');

1 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

解决方案很简单,请检查is_admin() 在对内容进行任何修改或挂接之前返回falseadmin_init 添加挂钩。

我不这么认为the_content 在管理上下文中使用,但可能会使用缩略图生成。

要记住的另一件事是,在生成AJAX/REST响应时可能会触发这些挂钩(取决于它们的内容),在这种情况下,是否仍应使用延迟加载并不明显。

结束

相关推荐

Get images by category

我目前获取滑块图像的方法是使用以下工作正常的代码:$args = array( \'post_type\' => \'attachment\', \'sort_order\' => \'ASC\', \'sort_column\' => \'menu_order\', ); $attachments = get_posts($args); if ($attachments) { $