В WordPress заголовки страниц (title) играют ключевую роль как для SEO, так и для удобства пользователей. Часто возникает необходимость менять заголовок динамически в зависимости от контекста — например, подставлять название категории, дату, имя автора или другие данные. В этой статье разберем, как с помощью хуков WordPress можно гибко управлять заголовками страниц, не меняя напрямую шаблоны темы.
Что такое хуки и зачем они нужны для изменения заголовков
Хуки — это специальные точки в коде WordPress, которые позволяют вмешиваться в логику работы без прямого редактирования ядра или темы. Есть два вида хуков: actions (действия) и filters (фильтры). Для изменения заголовков страниц нам нужны фильтры, которые позволяют перехватывать и менять выводимые данные.
Основной фильтр для изменения заголовка страницы — pre_get_document_title и wp_title (устаревший, но еще встречается). Также важно учитывать функции темы, которые выводят заголовок, например, wp_title() или использование SEO-плагинов.
Фильтр pre_get_document_title для современных тем
Начиная с WordPress 4.4, для изменения заголовка страницы рекомендуется использовать фильтр pre_get_document_title. Он позволяет перехватить заголовок до его вывода и подставить свой текст.
Рассмотрим пример функции, которая динамически меняет заголовок на странице архива категории, добавляя количество записей:
function wpdo_filter_dynamic_title($title) {
if (is_category()) {
$category = get_queried_object();
$count = $category->count;
$title = $category->name . ' — ' . $count . ' записей';
} elseif (is_home()) {
$title = 'Блог — последние новости и статьи';
}
return $title;
}
add_filter('pre_get_document_title', 'wpdo_filter_dynamic_title');В этом коде мы проверяем, если это страница категории, получаем её объект, название и количество записей, формируем новый заголовок. Для главной (блога) задаем свой фиксированный заголовок.
Поддержка SEO-плагинов
Если вы используете SEO-плагины, например Clearfy Pro, они могут управлять заголовками самостоятельно. В этом случае лучше использовать хуки, предоставляемые плагином, или отключить управление заголовками в настройках плагина.
Использование wp_title для старых тем
В старых темах, где заголовок формируется функцией wp_title(), можно использовать фильтр wp_title, чтобы изменить вывод. Пример:
function wpdo_filter_wp_title($title, $sep) {
if (is_single() && in_category('novosti')) {
$title = 'Новость: ' . get_the_title() . ' ' . $sep . ' ' . get_bloginfo('name');
}
return $title;
}
add_filter('wp_title', 'wpdo_filter_wp_title', 10, 2);Здесь мы проверяем, если это одиночная запись в категории «новости», добавляем префикс «Новость» к заголовку.
Динамические заголовки для пользовательских типов записей и таксономий
Для сайтов с кастомными типами записей и таксономиями часто нужно формировать уникальные заголовки. Используем пример для типа записи product и таксономии product_cat:
function wpdo_dynamic_title_custom_types($title) {
if (is_singular('product')) {
$title = get_the_title() . ' — купить в магазине';
} elseif (is_tax('product_cat')) {
$term = get_queried_object();
$title = 'Категория товаров: ' . $term->name;
}
return $title;
}
add_filter('pre_get_document_title', 'wpdo_dynamic_title_custom_types');Так вы можете подстроить заголовки под любые пользовательские объекты, улучшая SEO и удобство.
Обработка пагинации в заголовках
Если на странице есть пагинация (например, страница 2 категории), хорошо добавить номер страницы в заголовок. Это помогает поисковикам и пользователям ориентироваться.
function wpdo_add_pagination_to_title($title) {
if (is_paged()) {
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$title .= ' — Страница ' . $paged;
}
return $title;
}
add_filter('pre_get_document_title', 'wpdo_add_pagination_to_title');Советы по отладке и проверке заголовков
Когда вы меняете заголовки через хуки, важно проверить, что изменения применяются корректно:
- Очистите кеш браузера и кеш сайта (если используете кеширующие плагины).
- Проверьте исходный код страниц (Ctrl+U) и найдите тег
<title>. - Используйте инструменты разработчика браузера и SEO-плагины для проверки мета-тегов.
- Если изменения не видны, убедитесь, что другие плагины или тема не перекрывают ваши фильтры.
Заключение
Использование фильтров WordPress для динамического изменения заголовков страниц — мощный способ адаптировать сайт под задачи SEO и удобства пользователей без правки темы. С помощью фильтров pre_get_document_title и wp_title можно гибко менять заголовки для разных типов страниц, категорий, записей и кастомных типов.
Если хотите расширить возможности управления SEO, обратите внимание на плагины вроде Clearfy Pro, которые интегрируются с WordPress хуками и позволяют настроить заголовки без кода.