如何在 PHP 中的图像下方添加 noscript 标签?

Posted

技术标签:

【中文标题】如何在 PHP 中的图像下方添加 noscript 标签?【英文标题】:How add noscript tag below image in PHP? 【发布时间】:2019-03-18 12:37:35 【问题描述】:

我正在为我的图像使用延迟加载,作为Google pointed out,在每个 img 下方添加一个 noscript 标签至关重要。

我想在 Wordpress 编辑器中的每张图片下方添加一个 noscript 标签,类似于:

<figure>
   <img src="img.jpg">
   <nocript><img src="img.jp"></noscript>
   <figcaption> Caption</figcaption>
<figure>

但我不能:(

这是我在 php 中的函数。

add_filter('the_content', function ($content) 
    $dom = new DOMDocument();
    $dom->loadhtml($post->post_content);
    foreach($dom->getElementsByTagName( 'img' ) as $img) 
        if ( $img->hasAttribute( 'src' )) 
         $src_attr = $img->getAttribute( 'src' );
         $noscript      = $dom->createElement( 'noscript' );
         $noscript_node = $img->parentNode->insertBefore( $noscript, $img );
         $noscript_img  = $dom->createElement( 'IMG' );
         $new_img = $noscript_node->appendChild( $noscript_img );
         $new_img->setAttribute( 'src', $src_attr );
         $content = $dom->saveHTML();
      
    ;

    return $content;
);

请帮忙:D

【问题讨论】:

$content 返回什么? 它应该返回 noscript 标签,但 DOM 上没有返回任何内容 我明白了,我现在问, $content 包含什么?你 var_dump 了吗? 谢谢,我不知道var_dump(JS开发者)整个帖子被退回了 你让我想...我正在尝试使用 JS 自己编写类似版本的代码,你有没有 JS 中并行案例的简单示例? 【参考方案1】:

在更新现有对象(或数组)时,如果按引用工作,使用 foreach 循环需要注意的事项

默认情况下,foreach 循环会创建项目的副本并在其上运行。要使用实际对象,您应该在之前添加 &

我还会注意到在实际 dom 分配中使用临时变量: 创建临时变量并使用它们的结果插入到对象中

但它应该可以工作

我也将 saveHTML 排除在循环之外,因为不需要中间保存

希望对你有帮助

下面是 &$img

add_filter('the_content', function ($content) 
    $dom = new DOMDocument();
    $dom->loadHTML($post->post_content);
    foreach($dom->getElementsByTagName( 'img' ) as &$img) 
        if ( $img->hasAttribute( 'src' )) 
         $src_attr = $img->getAttribute( 'src' );
         $noscript      = $dom->createElement( 'noscript' );
         $noscript_node = $img->parentNode->insertBefore( $noscript, $img );
         $noscript_img  = $dom->createElement( 'IMG' );
         $new_img = $noscript_node->appendChild( $noscript_img );
         $new_img->setAttribute( 'src', $src_attr );
      
    ;
 $content = $dom->saveHTML();

    return $content;
);

【讨论】:

有一个错误,因为当我粘贴代码时,整个帖子没有显示,还有其他想法吗? @Alfrex92 将检查 l 我删除了 ;从 foreach 结束,我认为它不需要......也许它是。我修好了

以上是关于如何在 PHP 中的图像下方添加 noscript 标签?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 <noscript> 标记中使用 <style> 元素?

在ggplot2中的x轴标签下方添加图像

如何将图像添加到 PHP 中的图像上,如水印

如何在表格视图和单元格之间添加图像

在 PHP 中上传图像时在图像上添加文本

根据先前的图像/文本位置在另一个下方添加图像和文本