В этой статье мы разберем, как с помощью хуков WordPress можно автоматически изменять заголовки постов без вмешательства в шаблоны и без создания дополнительных плагинов. Такой подход позволяет добавлять префиксы, суффиксы, заменять слова или даже полностью формировать заголовок программно в зависимости от условий.
Что такое хуки WordPress и зачем они нужны для изменения заголовков
Хуки в WordPress — это точки расширения, которые позволяют разработчикам вмешиваться в процесс вывода данных, не меняя исходный код ядра. Их два типа: actions (действия) и filters (фильтры). Для изменения заголовков нам понадобятся фильтры, которые могут перехватывать и изменять текст перед выводом.
Для заголовков постов существует фильтр the_title, который применяется перед выводом заголовка в шаблонах. Используя этот фильтр, мы можем динамически модифицировать заголовок.
Использование хуков — лучший способ, так как сохраняется совместимость с обновлениями, и изменения легко откатить.
Пример: добавление префикса к заголовку всех постов
Давайте рассмотрим простой пример. Нужно добавить слово «Новинка:» перед каждым заголовком поста, но только на главной странице блога.
function wp_pro_add_prefix_to_title($title, $id = null) {
if (is_home() && in_the_loop() && is_main_query()) {
$title = 'Новинка: ' . $title;
}
return $title;
}
add_filter('the_title', 'wp_pro_add_prefix_to_title', 10, 2);
Здесь мы проверяем, что вывод идет на главной странице блога (is_home()), внутри основного цикла (in_the_loop() и is_main_query()), чтобы не менять заголовки в админке или виджетах. Затем добавляем префикс к заголовку.
Динамическое изменение заголовка по дате публикации
Иногда нужно менять заголовок в зависимости от даты публикации поста. Например, добавить пометку «Архив» для записей старше года.
function wp_pro_modify_title_by_date($title, $id = null) {
if (get_post_type($id) === 'post' && in_the_loop() && is_main_query()) {
$post_date = get_the_date('Y-m-d', $id);
$one_year_ago = date('Y-m-d', strtotime('-1 year'));
if ($post_date < $one_year_ago) {
$title = 'Архив: ' . $title;
}
}
return $title;
}
add_filter('the_title', 'wp_pro_modify_title_by_date', 10, 2);
В этом коде мы получаем дату публикации поста, сравниваем с датой год назад и при необходимости добавляем префикс «Архив:».
Как исключить изменение заголовков в админке и RSS
При работе с фильтром the_title важно исключить админку и RSS ленты, чтобы не влиять на внутренние процессы и внешние подписки. Для этого добавим дополнительные проверки:
function wp_pro_safe_title_modification($title, $id = null) {
if (is_admin() || is_feed()) {
return $title;
}
// Ваша логика изменения заголовка
return $title;
}
add_filter('the_title', 'wp_pro_safe_title_modification', 10, 2);
Это стандартная практика для избежания неожиданных багов.
Использование плагина Clearfy Pro для управления фильтрами и оптимизации заголовков
Если вы не хотите писать код, можно использовать готовые решения, например, плагин Clearfy Pro. Он позволяет отключать ненужные фильтры и добавлять собственные правила для автоматической оптимизации заголовков и метаданных.
Плагин помогает управлять SEO-настройками заголовков и избегать дублирования контента, что особенно полезно на больших сайтах.
Пример сложного изменения заголовков с условием на пользовательские поля
Предположим, у вас есть произвольное поле highlight, и если оно установлено, нужно выделять заголовок специальным тегом <mark>.
function wp_pro_highlight_title($title, $id = null) {
if (in_the_loop() && is_main_query() && !is_admin()) {
$highlight = get_post_meta($id, 'highlight', true);
if ($highlight === 'yes') {
$title = '<mark>' . $title . '</mark>';
}
}
return $title;
}
add_filter('the_title', 'wp_pro_highlight_title', 10, 2);
Это простой и эффективный прием визуально выделить важные записи без изменения шаблонов.
Советы по отладке изменений заголовков через хуки
Чтобы убедиться, что ваши фильтры работают корректно, используйте error_log или функции для вывода отладочной информации, например:
function wp_pro_debug_title($title, $id = null) {
error_log('Изменяем заголовок для поста ID: ' . $id);
return $title;
}
add_filter('the_title', 'wp_pro_debug_title', 10, 2);
Также проверяйте, что фильтр применяется только там, где нужно, избегая изменений в админке или RSS. Для этого используйте условия is_admin(), is_feed(), in_the_loop().
Заключение по теме
Использование хуков WordPress для автоматического изменения заголовков постов — надежный и гибкий способ кастомизации сайта. Это позволяет улучшить UX, выделить важные записи и оптимизировать SEO без изменения файлов тем и плагинов.
Если вы хотите упростить работу, рассмотрите плагины типа Clearfy Pro, которые предоставляют готовые инструменты для управления фильтрами и оптимизации контента.