Я создал Wordpress фильтр, используя метод API DOM, который был предложен здесь https://wordpress.stackexchange.com/a/61036/103233 изменить некоторые атрибуты моих изображений:PHP DOM добавить HTML в Wordpress фильтр
function add_lazyload($content) {
$content = mb_convert_encoding($content, 'HTML-ENTITIES', "UTF-8");
$dom = new DOMDocument();
@$dom->loadHTML($content);
foreach ($dom->getElementsByTagName('img') as $node) {
$oldsrc = $node->getAttribute('src');
$node->setAttribute('data-src', $oldsrc);
$newsrc = get_template_directory_uri() . '/images/placeholder.gif';
$node->setAttribute('src', $newsrc);
}
$newHtml = preg_replace('/^<!DOCTYPE.+?>/', '', str_replace(array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $dom->saveHTML()));
return $newHtml;
}
add_filter('the_content', 'add_lazyload');
add_filter('post_thumbnail_html', 'add_lazyload');
Как я могу добавить HTML-элемент в foreach
цикл?
Я попытался добавить новый DOMDocument
и его отображение в цикле:
$test = new DOMDocument();
$test->loadHTML('<a>Hello</a>');
$test->saveHTML();
Но это первый печатают все новые $test
элементов (один для каждого цикла), а затем мой изменен $newHTML
печатаются. Я хочу добавить новый элемент $test
к каждому img
цикла foreach
. Я никогда не использовал DOM раньше ... каких-либо предложений? appendChild
? Но как?
Вы хотите добавить узел '$ test' внутри' img'? Или вы хотите добавить его после/раньше? –