我试图修改Wordpress站点上的图像输出,用它们的“数据”等价物替换src和srcset,同时添加一个额外的类。因此,我将DOMDocument和过滤器用于imgs。这是我的代码:
function image_manipulation( $content ) {
$content = mb_convert_encoding($content, \'HTML-ENTITIES\', "UTF-8");
$document = new DOMDocument();
libxml_use_internal_errors(true);
$document->loadHTML(utf8_decode($content));
$imgs = $document->getElementsByTagName(\'img\');
foreach ($imgs as $img) {
$orig_src = $img->getAttribute(\'src\');
$orig_srcset = $img->getAttribute(\'srcset\');
$existing_class = $img->getAttribute(\'class\');
$img->setAttribute(\'src\',\'\');
$img->setAttribute(\'srcset\',\'\');
$img->setAttribute(\'class\',$existing_class . \' js-lazy-image\');
$img->setAttribute(\'data-src\',$orig_src);
$img->setAttribute(\'data-srcset\',$orig_srcset);
}
$html = $document->saveHTML();
return $html;
}
add_filter (\'the_content\', \'image_manipulation\');
所有内容都可以在帖子上运行,但如果我打开任何一个页面,我会收到一个错误信息,即“
Warning: DOMDocument::loadHTML(): Empty string supplied as input in functions.php on line 73
“(第73行是
loadHTML
在其中)。
我被绊倒了。。。感谢您提前提供的任何好提示!
最合适的回答,由SO网友:inarilo 整理而成
如果出现错误的页面没有内容,可以通过在函数开头添加检查来处理:
function image_manipulation( $content ) {
if(empty($content)) return $content;
//rest of the code
}