Когда дело доходит до работы с the_content, все просто.
- Настройте фильтр, подключенный к the_content,
- определить функцию, которая принимает входящий контент публикации,
- внести свои изменения,
- вернуть измененный контент.
И в большинстве случаев это все, что нужно. Но бывают моменты, когда вы можете захотеть сделать более продвинутые вещи.
Например, возможно, вы захотите включить содержимое из внешнего шаблона. Или, может быть, вы захотите добавить атрибуты к изображениям, которые вы найдете в публикации.
Это может быть сложно сделать с помощью регулярного выражения (поскольку HTML — нерегулярный язык), но с помощью PHP DOMDocument это не так уж плохо.
Идея этого кода, который я собираюсь показать, заключается в следующем:
- ищите теги img в посте,
- цикл через все, что найдено,
- добавить атрибуты,
- сохранить HTML,
- вернуть результат.
Обратите внимание, что вам может потребоваться настроить это в соответствии с вашими потребностями, но основной код , который вам понадобится :
<?php
private function addImageAttributes($content)
{
$content = mb_convert_encoding($content, 'HTML-ENTITIES', "UTF-8");
$document = new DOMDocument();
libxml_use_internal_errors(true);
$document->loadHTML(utf8_decode($content));
$images = $document->getElementsByTagName('img');
foreach ($images as $image) {
$image->setAttribute('data-example', 'true');
}
return $document->saveHTML();
}
Для тех, кто не знаком с DOMDocument и тем, что происходит в приведенном выше коде (например, почему определенные функции вызываются перед обработкой разметки), вот краткое изложение:
- mb_convert_encode . Это примет кодировку символов входящих данных и преобразует ее в UTF-8 (на основе приведенного выше кода, но это может быть что-то другое).
- libxml_use_internal_errors. Это отключит любые отчеты об ошибках, и все мы, как программисты, будем извлекать ошибки самостоятельно.
- utf8_decode. Это декодирует информацию в строке из UTF-8 в ISO-8859-1. Причина, по которой мы делаем это, заключается в том, что большинство страниц будут иметь набор символов, определенный как последний, и нам нужно, чтобы он был закодирован в первый для его обработки.
Тем не менее, я также рекомендую прочитать DOMDocument для получения дополнительной информации обо всем, что происходит выше.
Тем не менее, как только вы воспользуетесь функцией, как показано выше, у вас будет собственный атрибут data-example со значением true для изображений в вашем посте.