В работе с большими сайтами на WordPress часто возникает необходимость массово менять заголовки постов по определённому шаблону. Например, добавлять префиксы, суффиксы, номер версии, дату или информацию из метаполей. Вручную это делать долго и неудобно, особенно если контент регулярно обновляется. В этой статье разберём, как автоматизировать процесс изменения заголовков постов WordPress с помощью простого плагина и примеров кода.
Почему стоит автоматизировать изменение заголовков постов WordPress
Заголовок — важный элемент, который влияет на восприятие контента пользователями и SEO. Иногда нужно быстро внедрить новый формат заголовков, например, добавить категорию, дату публикации или уникальный идентификатор. Автоматизация помогает:
- Экономить время и силы при редактировании большого объёма записей
- Обеспечивать единый стиль заголовков на сайте
- Избежать человеческих ошибок при ручном обновлении
- Динамически добавлять необходимую информацию из метаданных или таксономий
Для реализации нам понадобится сделать плагин, который будет автоматически менять заголовок записи при выводе.
Создаем базовый плагин для изменения заголовков WordPress
Для начала создадим простой плагин, который подключается к фильтру the_title — именно он отвечает за вывод заголовка поста в шаблонах.
Создайте файл wptool-change-title.php в папке wp-content/plugins/wptool-change-title со следующим содержимым:
<?php
/**
* Plugin Name: WPTool Change Post Titles
* Description: Автоматическое изменение заголовков постов по шаблону
* Version: 1.0
* Author: WPTool.ru
*/
function wptool_filter_post_title($title, $id = null) {
if (is_admin()) {
// Не меняем заголовки в админке
return $title;
}
// Проверяем, что это запись и основной запрос
if (get_post_type($id) === 'post' && in_the_loop() && is_main_query()) {
// Пример шаблона: [Категория] - Заголовок (Дата)
$categories = get_the_category($id);
$cat_name = !empty($categories) ? $categories[0]->name : 'Без категории';
$date = get_the_date('Y-m-d', $id);
$new_title = "[{$cat_name}] - {$title} ({$date})";
return $new_title;
}
return $title;
}
add_filter('the_title', 'wptool_filter_post_title', 10, 2);
Этот код добавляет к каждому заголовку поста название первой категории и дату публикации в формате «[Категория] - Заголовок (Дата)».
Расширяем функционал: использование кастомных полей в заголовках
Иногда полезно добавлять данные из метаполей записи — например, артикул, статус или рейтинг. Для этого расширим функцию:
function wptool_filter_post_title_with_meta($title, $id = null) {
if (is_admin()) {
return $title;
}
if (get_post_type($id) === 'post' && in_the_loop() && is_main_query()) {
$categories = get_the_category($id);
$cat_name = !empty($categories) ? $categories[0]->name : 'Без категории';
$date = get_the_date('Y-m-d', $id);
// Получаем кастомное поле 'wptool_article'
$article = get_post_meta($id, 'wptool_article', true);
$article_text = $article ? "Артикул: {$article}" : '';
$new_title = "[{$cat_name}] - {$title} ({$date})";
if ($article_text) {
$new_title .= " - {$article_text}";
}
return $new_title;
}
return $title;
}
remove_filter('the_title', 'wptool_filter_post_title', 10);
add_filter('the_title', 'wptool_filter_post_title_with_meta', 10, 2);
Теперь при добавлении к записи метаполя wptool_article в заголовок автоматически добавится «Артикул: значение».
Как массово обновить заголовки в базе, если нужно изменить их навсегда
Иногда требуется не динамически менять заголовки при выводе, а обновить их в базе данных, чтобы они изменились везде, включая административную часть, RSS и API. Для этого можно использовать WP-CLI или написать скрипт с использованием функции wp_update_post.
Пример простого скрипта для массового обновления заголовков с добавлением префикса «[Обновлено]»:
function wptool_bulk_update_post_titles() {
$args = [
'post_type' => 'post',
'posts_per_page' => -1,
'post_status' => 'publish',
'fields' => 'ids',
];
$posts = get_posts($args);
foreach ($posts as $post_id) {
$post = get_post($post_id);
$new_title = '[Обновлено] ' . $post->post_title;
// Обновляем пост с новым заголовком
wp_update_post([
'ID' => $post_id,
'post_title' => $new_title
]);
}
}
// Выполните один раз, например, через хук admin_init или WP-CLI
// wptool_bulk_update_post_titles();
Важно отключать или удалять вызов этой функции после выполнения, чтобы не обновлять заголовки постоянно.
Рекомендации по безопасности и производительности
При внедрении автоматического изменения заголовков важно помнить:
- Не менять заголовки в админке, чтобы не сбивать интерфейс редакторов
- Использовать проверку условий (например,
in_the_loop()иis_main_query()) для предотвращения неожиданных эффектов - Кэшировать результаты, если генерация заголовка становится сложной
- Тестировать на копии сайта, чтобы не потерять данные
Если нужно добавить более сложную логику, например, поддержку разных шаблонов для разных типов записей или категорий, лучше сделать административный интерфейс в плагине и хранить настройки в опциях.
Полезные плагины для работы с заголовками и метаданными
Если хочется расширить функционал без программирования, можно использовать плагины:
- Clearfy Pro — для оптимизации и управления метаданными, включая заголовки
- Expert Review — для добавления пользовательских оценок и данных к записям
Однако написание собственного решения даёт максимальную гибкость и контроль.