使用DOMDocument时,$Content为空

时间:2017-08-22 作者:Dennis

我试图修改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 在其中)。

我被绊倒了。。。感谢您提前提供的任何好提示!

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

如果出现错误的页面没有内容,可以通过在函数开头添加检查来处理:

function image_manipulation( $content ) {
  if(empty($content)) return $content;
  //rest of the code
}

结束

相关推荐

Apply_Filters(‘the_content’,$Content)与DO_ShortCode($Content)

假设我有一个主题选项或自定义的postmeta文本区域。现在我想执行多个短代码、一般文本、图像等。最佳实践是什么?为什么?选项1:$content = //my text area data; echo apply_filters(\'the_content\', $content); 选项2:$content = //my text area data; echo do_shortcode($content); 请告诉我哪一个是最佳实践,以及为什么。EDIT让我详细描