Диагностика задачи: почему нужно менять заголовки страниц через фильтры
Иногда стандартный заголовок страницы в WordPress не соответствует требованиям SEO или дизайна. Например, тема выводит заголовок, который нужно дополнить, изменить или заменить динамически. Редактировать шаблоны темы неудобно или невозможно (например, при использовании дочерней темы или ограниченного доступа). В таких случаях эффективным решением является использование фильтров WordPress для изменения заголовков на лету.
Какие фильтры отвечают за заголовок страницы
Основной фильтр, управляющий заголовками в WordPress — это the_title. Он применяется при выводе заголовков записей и страниц. Для изменения заголовка в <title> тега (в шапке сайта) используют фильтр pre_get_document_title или wp_title для старых тем.
Отличия между the_title и pre_get_document_title
the_title— меняет заголовок записи или страницы в контенте (например, в <h1> или списках).pre_get_document_title— меняет заголовок в <title> теге браузера.
Пошаговое решение: изменить заголовок страницы на лету с помощью фильтра
Рассмотрим пример, как заменить заголовок записи с ID 42 на кастомный текст, добавив к нему текущую дату.
function custom_change_post_title($title, $id = null) {
if (is_admin()) {
return $title; // не изменяем в админке
}
if ($id === 42) {
$date = date('d.m.Y');
$title = 'Специальный заголовок от ' . $date;
}
return $title;
}
add_filter('the_title', 'custom_change_post_title', 10, 2);Обратите внимание, что фильтр the_title принимает 2 параметра: сам заголовок и ID записи. Важно указывать 2 параметра в add_filter, чтобы получить ID.
Изменение заголовка в теге <title>
function custom_document_title($title) {
if (is_singular('post') && get_the_ID() === 42) {
$title = 'Кастомный заголовок в <title> для поста 42';
}
return $title;
}
add_filter('pre_get_document_title', 'custom_document_title');Как проверить, что изменения применились
- Откройте страницу записи с ID 42 на сайте.
- Проверьте заголовок в контенте (обычно в <h1> или другом элементе) — он должен измениться на «Специальный заголовок от …».
- Посмотрите исходный код страницы, найдите тег <title> — там должен быть кастомный заголовок из фильтра
pre_get_document_title. - Убедитесь, что в админке заголовок не изменился (фильтр обрабатывает только фронтенд).
Частые ошибки и их исправление
- Не работает фильтр
the_title: проверьте, передаёте ли второй параметр в функцию и указали ли 2 параметра в add_filter. - Изменения влияют на админку: добавьте проверку
if (is_admin()) return $title;в начале функции. - Заголовок в <title> не меняется: проверьте, использует ли тема стандартную функцию
wp_head(). Если тема старая, возможно нужна заменаwp_title.
Практические советы по безопасности и производительности
- Избегайте тяжелых операций внутри фильтров, чтобы не замедлять загрузку страницы.
- Кешируйте результаты, если получаете данные из внешних источников.
- Используйте проверки контекста (
is_singular(),is_admin()) для ограничения области действия фильтров.
Сравнение способов изменения заголовков в WordPress
| Метод | Где меняет | Простота | Ограничения |
|---|---|---|---|
Фильтр the_title | Заголовок записи на странице | Высокая | Не меняет <title> браузера |
Фильтр pre_get_document_title | Тег <title> в шапке | Средняя | Не меняет заголовок в контенте |
| Редактирование шаблонов | Везде, где вызывается заголовок | Сложнее | Зависит от темы, требует поддержки |