В WordPress хуки (actions и filters) являются мощным инструментом для автоматизации различных процессов. В этой статье мы подробно разберём, как использовать хуки для автоматической модификации постов при их сохранении и обновлении. Такой подход позволяет повысить удобство управления контентом и избежать рутинных ручных правок.
Что такое хуки в WordPress и зачем они нужны для автоматизации
Хуки — это точки в коде WordPress, где можно «подцепить» собственные функции и изменить поведение системы без изменения исходных файлов ядра. Хуки бывают двух типов: actions — для выполнения действий, и filters — для изменения данных.
Используя хуки, можно автоматически добавлять или изменять данные постов при их сохранении, обновлять кастомные поля, менять заголовки, формировать метаописания и многое другое. Это экономит время и снижает риск ошибок при ручных изменениях.
Пример автоматизации — добавление префикса к заголовку поста при его публикации, или автоматическое наполнение кастомных полей на основе содержимого.
Использование action hook save_post для автоматической модификации постов
Хук save_post срабатывает всякий раз, когда пост сохраняется или обновляется. С его помощью можно программно менять параметры поста или сохранять дополнительные данные.
Рассмотрим практический пример: добавим к заголовку поста префикс «[Обновлён]» при каждом обновлении. Для этого создадим функцию wpshablon_modify_post_title_on_save и подключим её к хуку:
function wpshablon_modify_post_title_on_save($post_id) {
// Проверяем, чтобы это не был автосэйв
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
// Проверяем права пользователя
if (!current_user_can('edit_post', $post_id)) {
return;
}
// Получаем текущий пост
$post = get_post($post_id);
if ($post->post_type !== 'post') {
return; // Работаем только с постами
}
// Если заголовок уже содержит префикс, не меняем
if (strpos($post->post_title, '[Обновлён]') === 0) {
return;
}
// Обновляем заголовок
$new_title = '[Обновлён] ' . $post->post_title;
// Отключаем этот хук чтобы избежать бесконечного цикла
remove_action('save_post', 'wpshablon_modify_post_title_on_save');
wp_update_post(array(
'ID' => $post_id,
'post_title' => $new_title
));
// Вновь подключаем хук
add_action('save_post', 'wpshablon_modify_post_title_on_save');
}
add_action('save_post', 'wpshablon_modify_post_title_on_save');Подобный код позволит автоматически добавлять префикс к заголовку при каждом сохранении поста, что полезно для пометки обновлённого контента.
Особенности и рекомендации при работе с хуками save_post
Важно учитывать, что при обновлении поста функция save_post может вызываться несколько раз, а также срабатывает при автосохранении и ревизиях. Поэтому в коде обязательно нужно проверять, что изменения выполняются только для нужного типа записи и при наличии прав у пользователя.
Чтобы избежать бесконечной рекурсии, когда при вызове wp_update_post снова срабатывает save_post, мы временно отключаем хук внутри функции и подключаем обратно после обновления.
Пример: автоматическое заполнение кастомного поля при сохранении поста
Часто возникает задача автоматически добавлять или обновлять кастомные поля на основе содержимого поста или других данных. Рассмотрим пример, когда при сохранении поста в поле _wpshablon_word_count записывается количество слов в тексте поста.
function wpshablon_save_word_count_meta($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (!current_user_can('edit_post', $post_id)) {
return;
}
$post = get_post($post_id);
if ($post->post_type !== 'post') {
return;
}
$word_count = str_word_count(strip_tags($post->post_content));
update_post_meta($post_id, '_wpshablon_word_count', $word_count);
}
add_action('save_post', 'wpshablon_save_word_count_meta');Теперь в каждом посте будет автоматически сохраняться количество слов в отдельном метаполе. Это можно использовать для построения статистики, фильтров или других целей.
Использование фильтров для автоматической корректировки контента перед выводом
Фильтры в WordPress позволяют изменять данные на лету перед их выводом. Например, можно автоматически добавлять сноску, изменять форматирование или подставлять дополнительные элементы.
Рассмотрим пример, когда мы хотим добавить в конец каждого поста текст с призывом подписаться на рассылку:
function wpshablon_add_subscription_notice($content) {
if (is_single() && in_the_loop() && is_main_query()) {
$notice = '<p><em>Подпишитесь на нашу рассылку, чтобы не пропустить новые статьи!</em></p>';
return $content . $notice;
}
return $content;
}
add_filter('the_content', 'wpshablon_add_subscription_notice');Это простой и эффективный способ увеличить вовлечённость читателей без необходимости вручную редактировать каждый пост.
Общие рекомендации по использованию хуков для автоматизации
- Всегда проверяйте условия срабатывания хуков (тип записи, права пользователя, режим автосохранения).
- Избегайте бесконечных циклов, отключая и подключая хуки внутри функций при необходимости.
- Тестируйте код на тестовом сайте перед внедрением в продакшен.
- Используйте префиксы в названиях функций и метаданных, чтобы избежать конфликтов с другими плагинами и темами.
Полезные плагины для расширения возможностей хуков и автоматизации
Для удобного управления хуками и автоматизацией в WordPress можно использовать следующие плагины:
- Code Snippets — позволяет добавлять и управлять пользовательским PHP-кодом без правки файлов темы или плагинов.
- Clearfy Pro — оптимизирует сайт и предоставляет инструменты для управления хуками и отключения ненужных функций.
- Expert Review — автоматизирует вывод обзоров и рейтингов в постах, используя хуки для интеграции с контентом.
Если вы используете темы Reboot или Root, они уже содержат удобные хуки для расширения функционала в шаблонах.