Как использовать хуки для автоматизации изменений постов в WordPress

В 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, они уже содержат удобные хуки для расширения функционала в шаблонах.

WooCommerce: как исключить товар из распродажи без плагинов
28.09.2026
WooCommerce: как автоматически удалять неактивные заказы
02.10.2026
Как удалить неиспользуемые стили в WordPress для ускорения сайта
30.09.2026
Как отключить XML-RPC в WordPress без поломки интеграций
23.08.2026
Как изменить название автора в WordPress без плагинов
29.09.2026