Как использовать фильтры для изменения заголовков постов в WordPress

В WordPress часто возникает задача изменить заголовки постов динамически, не меняя при этом содержимое в базе данных. Для этого отлично подходят фильтры — один из мощнейших инструментов системы. В этой статье мы подробно разберем, как использовать фильтры WordPress для изменения заголовков постов, рассмотрим практические примеры с кодом и полезные советы по применению.

Что такое фильтры в WordPress и зачем менять заголовки постов

Фильтры — это специальные хуки, которые позволяют изменить данные до того, как они будут выведены на экран или сохранены. В случае с заголовками постов фильтр the_title позволяет перехватывать текст заголовка и изменять его по своему усмотрению.

Изменение заголовков на лету полезно в различных сценариях:

  • Добавление дополнительной информации к заголовку (например, метки «Новинка» или «Акция»)
  • Форматирование и стилизация заголовков в зависимости от условий
  • Динамическая замена текста для мультиязычных сайтов или SEO-оптимизации

Этот подход позволяет не менять контент в админке, а обрабатывать вывод в шаблонах или плагинах.

Использование фильтра the_title для изменения заголовков

Фильтр the_title передает заголовок поста и ID поста. Для создания своей функции с префиксом wpcom_ используем следующий пример:

function wpcom_modify_post_title($title, $post_id) {
    if (is_admin()) {
        return $title; // Не менять заголовки в админке
    }

    // Добавим метку "[СПЕЦПРЕДЛОЖЕНИЕ]" к заголовкам всех записей в категории с ID 10
    if (has_category(10, $post_id)) {
        $title = '[СПЕЦПРЕДЛОЖЕНИЕ] ' . $title;
    }

    return $title;
}
add_filter('the_title', 'wpcom_modify_post_title', 10, 2);

В этом коде мы проверяем, что изменение происходит только на публичной части сайта, не в админке. Далее — если пост принадлежит категории с ID 10, к заголовку добавляется префикс.

Обратите внимание, что функция принимает два аргумента: заголовок и ID поста. Для использования двух аргументов в add_filter нужно указать 4-й параметр — количество аргументов.

Работа с условиями и типами записей

Часто нужно менять заголовки только для определенных типов записей или на определённых страницах. Для этого используйте условия WordPress, например, is_singular() или get_post_type().

function wpcom_custom_title_by_post_type($title, $post_id) {
    if (is_admin()) {
        return $title;
    }

    $post_type = get_post_type($post_id);
    if ($post_type === 'product') { // Для товаров WooCommerce
        $title = 'Товар: ' . $title;
    }

    return $title;
}
add_filter('the_title', 'wpcom_custom_title_by_post_type', 10, 2);

Такой код добавит префикс «Товар:» к заголовкам товаров WooCommerce.

Практические примеры использования фильтров для заголовков

Добавление ценового диапазона к заголовкам товаров

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

function wpcom_add_price_range_to_title($title, $post_id) {
    if (is_admin()) {
        return $title;
    }

    if (get_post_type($post_id) !== 'product') {
        return $title;
    }

    $product = wc_get_product($post_id);
    if ($product && $product->is_type('variable')) {
        $prices = $product->get_variation_prices(true);
        $min_price = current($prices['price']);
        $max_price = end($prices['price']);
        $title .= ' (от ' . wc_price($min_price) . ' до ' . wc_price($max_price) . ')';
    }

    return $title;
}
add_filter('the_title', 'wpcom_add_price_range_to_title', 10, 2);

Этот код получает объект товара, проверяет, что это вариативный товар, и добавляет к заголовку диапазон цен, красиво отформатированный функцией wc_price().

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

Если вы хотите более гибко управлять заголовками и SEO, рекомендуем обратить внимание на Clearfy Pro. Этот плагин позволяет настраивать SEO-заголовки, отключать лишние метаданные и оптимизировать вывод заголовков без кода.

Советы и рекомендации при работе с фильтром the_title

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

  • Не изменяйте заголовки в админке. Это может путать редакторов и создавать проблемы с сохранением.
  • Используйте условия WordPress для контроля, где применяется фильтр.
  • Избегайте циклических вызовов. Если в вашей функции вызываются другие функции, которые сами выводят заголовки, может возникнуть рекурсия.
  • Кэшируйте результаты при сложных вычислениях. Чтобы не перегружать сервер.

Пример отключения фильтра для конкретного шаблона

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

function wpcom_conditional_title_filter() {
    if (is_front_page()) {
        remove_filter('the_title', 'wpcom_modify_post_title', 10);
    }
}
add_action('wp', 'wpcom_conditional_title_filter');

Здесь мы на хук wp проверяем условие и отключаем фильтр, если это главная страница.

Заключение

Фильтры — мощный инструмент для динамического изменения заголовков постов в WordPress. Они позволяют решать множество задач без изменения базы данных и шаблонов. В статье мы рассмотрели базовые и продвинутые примеры, включая работу с типами записей и WooCommerce. Также рассмотрели рекомендации по правильному использованию фильтров.

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

Сервис определения шаблона и плагинов на сайте