Часто при создании новых записей в WordPress возникает задача автоматизировать процесс заполнения заголовков, особенно если контент импортируется из внешних систем или генерируется автоматически. В этой статье мы разберём, как изменить автозаголовок в WordPress при создании новых постов программно и с помощью плагинов.
Почему может понадобиться изменить автозаголовок в WordPress
По умолчанию WordPress предлагает пустое поле для заголовка, и пользователь вводит его вручную. Однако в ряде случаев нам нужно, чтобы заголовок формировался автоматически:
- Импорт большого количества записей с внешних источников с нужным форматированием заголовков.
- Автоматическое создание заголовков на основе определённых данных или метаполей.
- Упрощение работы для редакторов, когда заголовок генерируется из содержимого.
Без автоматизации приходится тратить много времени на ручной ввод.
Изменение автозаголовка при сохранении записи через хук wpabout_ru_modify_autotitle
Для автоматической генерации заголовка можно использовать хук save_post. Ниже пример функции, которая изменяет заголовок при сохранении нового поста, если он пустой.
function wpabout_ru_modify_autotitle($post_id) {
// Проверяем, не автосохранение ли это
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
$post = get_post($post_id);
if ($post->post_type != 'post') return; // только для постов
if (empty($post->post_title)) {
// Генерируем заголовок, например, из даты и ID
$new_title = 'Запись от '.date('d.m.Y', strtotime($post->post_date)).' №'.$post_id;
// Обновляем заголовок
remove_action('save_post', 'wpabout_ru_modify_autotitle'); // чтобы избежать рекурсии
wp_update_post(array(
'ID' => $post_id,
'post_title' => $new_title
));
add_action('save_post', 'wpabout_ru_modify_autotitle');
}
}
add_action('save_post', 'wpabout_ru_modify_autotitle');Этот код проверяет, если заголовок пустой, то подставляет дату и ID записи. Аналогично можно создавать более сложные шаблоны заголовков.
Автоматическое формирование заголовка из пользовательских полей
Часто заголовок должен зависеть от произвольных полей — например, имя автора, город, тема и т.д. Для этого можно получить метаданные поста и собрать заголовок на их основе.
function wpabout_ru_autotitle_from_meta($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
$post = get_post($post_id);
if ($post->post_type != 'post') return;
$author_name = get_post_meta($post_id, 'author_name', true);
$city = get_post_meta($post_id, 'city', true);
if (!empty($author_name) && !empty($city) && empty($post->post_title)) {
$new_title = "История автора $author_name из города $city";
remove_action('save_post', 'wpabout_ru_autotitle_from_meta');
wp_update_post(array(
'ID' => $post_id,
'post_title' => $new_title
));
add_action('save_post', 'wpabout_ru_autotitle_from_meta');
}
}
add_action('save_post', 'wpabout_ru_autotitle_from_meta');Так вы точно получите уникальные заголовки, привязанные к данным записи.
Использование плагина для автозаполнения заголовков
Если не хотите писать код самому, можно использовать готовые решения. Например, плагин Auto Post Title позволяет задать шаблоны заголовков, подставляя значения из пользовательских полей, даты и других параметров.
Плагин поддерживает:
- Шаблоны с переменными
- Форматирование дат
- Условные конструкции для сложных названий
Это удобный способ быстро внедрить автогенерацию заголовков без глубоких знаний PHP.
Как отключить автозаголовок для конкретных записей
Иногда нужно, чтобы автозаголовок не менялся, если редактор ввёл свой. Для этого в коде проверяем, что поле заголовка пустое, и только тогда подставляем новое значение. Если нужно отключить автозаполнение для конкретных категорий или типов записей, добавьте дополнительные проверки.
function wpabout_ru_conditional_autotitle($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
$post = get_post($post_id);
if ($post->post_type != 'post') return;
// Проверяем категорию
$categories = wp_get_post_categories($post_id);
$excluded_cat_id = 5; // ID категории, где автозаголовок не нужен
if (in_array($excluded_cat_id, $categories)) return;
if (empty($post->post_title)) {
$new_title = 'Автоматический заголовок';
remove_action('save_post', 'wpabout_ru_conditional_autotitle');
wp_update_post(array('ID' => $post_id, 'post_title' => $new_title));
add_action('save_post', 'wpabout_ru_conditional_autotitle');
}
}
add_action('save_post', 'wpabout_ru_conditional_autotitle');Советы по работе с автозаголовками в WordPress
Реализуя автозаголовки, учтите:
- Не вызывайте бесконечную рекурсию при обновлении записи — отключайте хук перед вызовом
wp_update_postи включайте после. - Всегда проверяйте тип записи, чтобы не менять заголовки у страниц или других типов.
- Используйте пользовательские поля для создания уникальных заголовков.
- Тестируйте на копиях сайта, чтобы не потерять важные данные.
Так вы сможете сделать заголовки информативнее и снизить нагрузку на редакторов.
Заключение
Изменение автозаголовка при создании новых постов — полезная задача, которая решается с помощью хуков WordPress и плагинов. Приведённые примеры помогут реализовать автоматизацию под конкретные задачи. Для тех, кто предпочитает готовые решения, рекомендую попробовать Auto Post Title.