Иногда возникает задача убрать из заголовков записей WordPress определённые слова или фразы, например, чтобы сделать заголовок короче, убрать служебные слова или дублирующую информацию. В этой статье мы рассмотрим, как реализовать автоматическое удаление слов из заголовков постов на уровне вывода сайта, не затрагивая сами записи в базе данных.
Причины и сценарии удаления слов из заголовков
Причины, по которым может понадобиться удалять слова из заголовков:
- Избавиться от повторяющихся слов, например, «Обзор», «Отзывы» или «Тест» в начале заголовков;
- Сделать заголовки более лаконичными для отображения на страницах с архивами или в списках;
- Удалить брендовые названия или ключевые слова, которые не нужны в текущем контексте;
- Оптимизировать заголовки под разные языковые версии.
Принципиально важно, чтобы при этом в админке заголовки оставались без изменений — мы меняем только отображение.
Реализация удаления слов из заголовков через фильтр WordPress
WordPress позволяет менять заголовок записи перед выводом через фильтр the_title. Мы можем подключить свою функцию, которая будет удалять определённые слова.
Пример функции, которая убирает слова «Обзор», «Тест» и «Отзывы» из заголовков:
function cyrtolat_remove_words_from_title($title) {
// Массив слов для удаления
$words_to_remove = array('Обзор', 'Тест', 'Отзывы');
foreach ($words_to_remove as $word) {
// Удаляем слово, если оно встречается в заголовке (с учётом регистра)
$title = preg_replace('/\b' . preg_quote($word, '/') . '\b/ui', '', $title);
}
// Убираем лишние пробелы
$title = trim(preg_replace('/\s+/', ' ', $title));
return $title;
}
add_filter('the_title', 'cyrtolat_remove_words_from_title');Здесь мы используем регулярное выражение, чтобы удалить точные совпадения слов по границам слова (\b) и игнорируем регистр (u и i флаги).
Как тестировать и использовать этот код
Добавьте этот код в файл functions.php вашей дочерней темы или в отдельный плагин. После этого все заголовки, которые выводятся через стандартную функцию the_title(), будут автоматически очищаться от указанных слов.
Пример расширенного варианта с настройкой через админку
Чтобы сделать решение удобнее, можно добавить страницу настроек в админке, где пользователь сможет указать слова для удаления. Для этого понадобится:
- Создать страницу настроек через
add_options_page(); - Сохранить список слов в опциях;
- Подключить их в фильтр.
Пример добавления настроек:
function cyrtolat_register_settings() {
add_options_page('Удаление слов из заголовков', 'Удаление слов из заголовков', 'manage_options', 'cyrtolat-remove-words', 'cyrtolat_settings_page');
register_setting('cyrtolat_options_group', 'cyrtolat_words_to_remove');
}
add_action('admin_menu', 'cyrtolat_register_settings');
function cyrtolat_settings_page() {
?>
<div class="wrap">
<h1>Настройки удаления слов из заголовков</h1>
<form method="post" action="options.php">
<?php settings_fields('cyrtolat_options_group'); ?>
<?php do_settings_sections('cyrtolat_options_group'); ?>
<label>Введите слова для удаления через запятую:</label><br>
<input type="text" name="cyrtolat_words_to_remove" value="<?php echo esc_attr(get_option('cyrtolat_words_to_remove', 'Обзор,Тест,Отзывы')); ?>" style="width: 400px;">
<?php submit_button(); ?>
</form>
</div>
<?php
}
function cyrtolat_remove_words_from_title($title) {
$words_option = get_option('cyrtolat_words_to_remove', 'Обзор,Тест,Отзывы');
$words_to_remove = array_map('trim', explode(',', $words_option));
foreach ($words_to_remove as $word) {
if ($word === '') continue;
$title = preg_replace('/\b' . preg_quote($word, '/') . '\b/ui', '', $title);
}
$title = trim(preg_replace('/\s+/', ' ', $title));
return $title;
}
add_filter('the_title', 'cyrtolat_remove_words_from_title');Теперь можно спокойно менять список слов без правки кода.
Как решить проблему сохранения SEO и индексации
Удаление слов из заголовков на фронтенде — это хорошо для отображения, но поисковые системы видят исходные заголовки из базы. Если хотите, чтобы изменения также отражались на уровне SEO, можно сделать:
- Автоматическую фильтрацию заголовков в базе при сохранении записи (через хук
save_post), но это необратимо и может навредить; - Использовать мета-поля для хранения оригинального заголовка, а на фронтенде выводить модифицированный;
- Настроить SEO-плагины (Yoast, RankMath) на вывод кастомных заголовков с учётом фильтрации.
Например, для автоматической фильтрации при сохранении можно использовать следующий код:
function cyrtolat_filter_title_on_save($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (wp_is_post_revision($post_id)) return;
$post = get_post($post_id);
if ($post->post_type !== 'post') return;
$filtered_title = cyrtolat_remove_words_from_title($post->post_title);
if ($filtered_title !== $post->post_title) {
remove_action('save_post', 'cyrtolat_filter_title_on_save');
wp_update_post(array('ID' => $post_id, 'post_title' => $filtered_title));
add_action('save_post', 'cyrtolat_filter_title_on_save');
}
}
add_action('save_post', 'cyrtolat_filter_title_on_save');Но будьте осторожны: это навсегда изменит заголовки в базе.
Популярные плагины для управления заголовками и SEO
Если вы хотите более гибкого управления заголовками и SEO, обратите внимание на плагины:
- Clearfy Pro — расширяет возможности оптимизации и очистки заголовков;
- WPGPT — генерация оптимизированных заголовков с помощью ИИ;
- Yoast SEO, RankMath — стандартные SEO плагины с возможностью управлять шаблонами заголовков.
Эти инструменты помогут не только отфильтровать ненужные слова, но и улучшить общее качество заголовков для поисковых систем.
Выводы и рекомендации
Удаление слов из заголовков постов — полезная задача для кастомизации вывода и повышения удобства пользователей. Используйте фильтр the_title для безопасного изменения на фронтенде и рассмотрите вариант с настройками через админку для удобства.
При необходимости изменения в базе данных будьте аккуратны и делайте резервные копии перед применением кода. Для комплексной SEO-оптимизации применяйте специализированные плагины.