Как добавить тег noscript под изображением в PHP?

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

Я хочу добавить тег 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

0

Решение

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

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

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

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

Я также вывел 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;
});
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]