Как добавить тег noscript ниже изображения в PHP? - PullRequest
0 голосов
/ 13 октября 2018

Я использую ленивую загрузку для своих изображений, и как Google указал , крайне важно добавить тег noscript под каждым изображением.

Я хочу добавить тег noscript под каждым изображениемв редакторе Wordpress , что-то вроде:

<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

1 Ответ

0 голосов
/ 13 октября 2018

Что следует заметить с циклами foreach, при обновлении существующего объекта (или массива), если он работает по ссылке

По умолчанию циклы foreach создают копию элементов и запускаются на них.чтобы работать с реальным объектом, вы должны добавить & before

. Я бы также заметил, что временные переменные используются для распределения реальных объектов: создаются временные переменные и используются их результаты для вставки в объект

.Но это должно работать

Я также получил 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;
});
...