Функция wp_html_split()
разбирает HTML-код на отдельные части: HTML-теги, комментарии и текст. Она возвращает массив, где каждый элемент — это либо HTML-тег, либо текст между тегами. Эта функция полезна для ситуаций, когда требуется отдельно обрабатывать содержимое HTML-тегов и сам HTML-код.
Функция часто используется в WordPress для обработки шорткодов, в том числе при извлечении текста из HTML-атрибутов. Основой её работы является регулярное выражение, которое точно идентифицирует HTML-структуры.
wp_html_split( string $input ): string[]
Возвращаемое значение
string[]
Массив строк, где каждый элемент является HTML-тегом, текстом или комментарием.
Параметры
$input
(string)
Обязательный параметр. HTML-код, который необходимо разобрать на составляющие.
Пример 1: Разбор HTML-кода на теги и текст
В этом примере разберём HTML-код с использованием wp_html_split()
и посмотрим, как функция разделяет текст и теги.
$html = '<h2>Заголовок</h2>
<p>Абзац текста.</p>
<p class="note">Абзац с атрибутами.</p>
<div>Текст внутри div.</div>
<!-- Комментарий HTML -->
<span>Текст в span.</span>';
$splitted_html = wp_html_split($html);
print_r($splitted_html);
Результат:
Array
(
[0] =>
[1] => <h2>
[2] => Заголовок
[3] => </h2>
[4] =>
[5] => <p>
[6] => Абзац текста.
[7] => </p>
[8] =>
[9] => <p class="note">
[10] => Абзац с атрибутами.
[11] => </p>
[12] =>
[13] => <div>
[14] => Текст внутри div.
[15] => </div>
[16] =>
[17] => <!-- Комментарий HTML -->
[18] =>
[19] => <span>
[20] => Текст в span.
[21] => </span>
)
Пример 2: Извлечение всех <img>
тегов из HTML
С помощью wp_html_split()
можно легко выделить из HTML-кода все <img>
теги.
$content = 'Контент <img src="/image1.jpg" /> <p>текст</p> <img src="/image2.jpg" />';
$elements = wp_html_split($content);
$img_tags = [];
foreach ($elements as $element) {
// Пропускаем не HTML-теги
if (empty(trim($element)) || $element[0] !== '<') {
continue;
}
// Проверяем, является ли элемент тегом img
if (substr($element, 1, 3) === 'img') {
$img_tags[] = $element;
}
}
print_r($img_tags);
Результат:
Array
(
[0] => <img src="/image1.jpg" />
[1] => <img src="/image2.jpg" />
)
Пример 3: Обработка текста внутри HTML-тегов
Предположим, что нужно изменить текст в параграфах (<p>
), но оставить HTML-разметку без изменений. wp_html_split()
позволяет отделить текст от тегов для последующей обработки.
$html_content = '<p>Первый абзац.</p><p>Второй абзац.</p>';
$split_content = wp_html_split($html_content);
foreach ($split_content as &$element) {
// Изменяем текст только внутри тега <p>
if ($element === 'Первый абзац.') {
$element = 'Обновленный текст первого абзаца.';
}
}
echo implode('', $split_content);
Результат:
<p>Обновленный текст первого абзаца.</p><p>Второй абзац.</p>
Пример 4: Обработка комментариев
С помощью wp_html_split()
можно также выделить и обработать HTML-комментарии.
$html = '<p>Текст параграфа.</p><!-- Этот комментарий будет удален --><p>Еще один параграф.</p>';
$split_content = wp_html_split($html);
$filtered_content = [];
foreach ($split_content as $element) {
// Пропускаем комментарии
if (strpos($element, '<!--') === 0) {
continue;
}
$filtered_content[] = $element;
}
echo implode('', $filtered_content);
Результат:
<p>Текст параграфа.</p><p>Еще один параграф.</p>
Заключение
Функция wp_html_split()
— полезный инструмент для разбора HTML-контента на отдельные элементы. Она особенно удобна для случаев, когда необходимо обрабатывать текст внутри HTML-тегов или, наоборот, сам HTML-код, оставляя текст неизменным.