wplangs.ru wordpress WP Langs

Как удалить заголовки H1, H2 и H3 из постов WordPress программно

В некоторых случаях возникает необходимость удалить из содержимого постов WordPress заголовки определённых уровней, например, H1, H2 или H3. Это может быть связано с требованиями дизайна, SEO, или особенностями темы. В этой статье мы подробно рассмотрим, как программно удалить эти заголовки из контента поста, не затрагивая остальной текст и структуру.

Почему может понадобиться удалять заголовки из постов WordPress

Удаление заголовков из постов — задача, которая не так часто обсуждается, но очень полезна в ряде случаев:

  • SEO оптимизация: иногда заголовки дублируются или мешают правильной иерархии на странице.
  • Дизайн и верстка: тема может выводить собственные заголовки, а из контента их нужно убрать, чтобы не было визуального дублирования.
  • Автоматическая обработка контента: при импортировании или миграции контента могут появляться лишние заголовки.

Важно, чтобы удаление было аккуратным и не ломало структуру HTML.

Как найти и удалить заголовки H1, H2, H3 из контента поста

Для удаления заголовков из постов WordPress нужно работать с содержимым, которое хранится в базе данных и выводится через функцию the_content(). Мы можем применить фильтр, который будет модифицировать контент перед выводом.

Рассмотрим пример функции, которая удаляет все заголовки H1, H2, H3 из контента.

function wplangs_remove_headings_from_content($content) {
    // Регулярное выражение для удаления тегов h1, h2, h3 с их содержимым
    $pattern = '/<h[1-3][^>]*>.*?<\/h[1-3]>/is';
    $content = preg_replace($pattern, '', $content);
    return $content;
}
add_filter('the_content', 'wplangs_remove_headings_from_content');

Этот код сработает для самых простых случаев, удаляя все заголовки H1, H2, H3 вместе с содержимым, находящимся между тегами. Однако, часто нужно сохранить текст внутри заголовков, удаляя только сами теги.

Удаление только тегов, сохраняя содержимое заголовков

Если необходимо убрать только теги, а текст оставить, лучше использовать DOMDocument для безопасного парсинга HTML.

function wplangs_strip_headings_tags($content) {
    libxml_use_internal_errors(true);
    $dom = new DOMDocument();
    $dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));

    for ($i = 1; $i <= 3; $i++) {
        $tags = $dom->getElementsByTagName('h' . $i);
        // Собираем в массив, т.к. NodeList динамический
        $toRemove = [];
        foreach ($tags as $tag) {
            $toRemove[] = $tag;
        }
        foreach ($toRemove as $tag) {
            // Вставляем дочерние узлы перед тегом
            while ($tag->firstChild) {
                $tag->parentNode->insertBefore($tag->firstChild, $tag);
            }
            // Удаляем сам тег
            $tag->parentNode->removeChild($tag);
        }
    }

    $body = $dom->getElementsByTagName('body')->item(0);
    $newContent = '';
    foreach ($body->childNodes as $child) {
        $newContent .= $dom->saveHTML($child);
    }
    return $newContent;
}
add_filter('the_content', 'wplangs_strip_headings_tags');

Такой подход позволяет сохранить текст внутри заголовков, просто убирая сами теги, что полезно для сохранения семантики и читаемости.

Удаление заголовков из пользовательских полей и виджетов

Иногда заголовки могут находиться не только в основном содержимом поста, но и в пользовательских полях, мета-данных или виджетах. В таких случаях аналогично можно применять фильтры или обрабатывать данные при выводе.

Например, если у вас есть мета-поле с контентом, его можно обработать так же:

function wplangs_filter_meta_content($meta_content) {
    return wplangs_strip_headings_tags($meta_content);
}

И вызывать эту функцию при выводе мета-поля в шаблонах.

Пример удаления заголовков из виджета текстового типа

Если в виджете используется пользовательский HTML с заголовками, можно использовать фильтр widget_text:

add_filter('widget_text', 'wplangs_strip_headings_tags');

Это автоматически удалит теги H1-H3 из содержимого текстового виджета.

Использование плагинов для удаления заголовков

Если вы предпочитаете не писать код, существуют плагины, позволяющие управлять выводом заголовков:

  • Remove HTML Tags — позволяет удалить определённые HTML-теги из контента.
  • Content Filter Manager — даёт возможность настраивать фильтры для контента, включая удаление тегов.

Однако, подобные плагины часто слишком универсальны и могут затрагивать другие участки сайта, поэтому программный подход зачастую более точен и безопасен.

Тестирование и отладка

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

Если используете DOMDocument, убедитесь, что сервер поддерживает эту библиотеку и что код корректно обрабатывает все варианты HTML.

Также полезно включить логирование ошибок PHP на время тестирования, чтобы быстро находить и исправлять проблемы.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше