Хук post save в WordPress: практическое применение для дополнительной обработки данных

В WordPress часто требуется выполнять дополнительные действия сразу после сохранения записи. Для этого существует несколько хуков, которые позволяют вмешаться в процесс сохранения контента и выполнить собственные операции — например, отправить уведомление, изменить метаданные или интегрироваться с внешними сервисами. В этой статье мы подробно рассмотрим, как использовать хук save_post для дополнительной обработки после сохранения записи в WordPress.

Что такое хук save_post и когда он срабатывает

Хук save_post вызывается каждый раз, когда создаётся или обновляется запись (пост) в WordPress. Это универсальный action, который срабатывает после сохранения данных в базу, но до того, как страница редактирования вернётся пользователю.

Основные параметры хука:

  • $post_ID — ID сохранённой записи;
  • $post — объект записи с полной информацией;
  • $update — булево значение, указывающее, обновляется ли запись (true) или создаётся новая (false).

Эти параметры позволяют гибко управлять логикой, реагируя по-разному на создание и обновление записей.

Практическое применение хука save_post

Рассмотрим несколько примеров, как можно использовать save_post для решения реальных задач.

1. Автоматическое обновление метаполя после сохранения записи

Допустим, вам нужно автоматически обновлять метаполе _cyrtolat_processed, чтобы отметить, что запись была обработана вашим кодом.

function cyrtolat_save_post_update_meta($post_ID, $post, $update) {
    // Проверяем тип записи, чтобы не сработать на всех
    if ($post->post_type !== 'post') {
        return;
    }

    // Обновляем метаполе
    update_post_meta($post_ID, '_cyrtolat_processed', current_time('mysql'));
}
add_action('save_post', 'cyrtolat_save_post_update_meta', 10, 3);

Этот код будет автоматически записывать время последней обработки в метаполе при каждом сохранении записи типа post.

2. Отправка уведомления при публикации новой записи

Иногда нужно отправлять email администраторам или другим пользователям, когда создаётся новая публикация.

function cyrtolat_notify_on_new_post($post_ID, $post, $update) {
    // Действуем только при создании новой записи
    if ($update) {
        return;
    }

    if ($post->post_status !== 'publish') {
        return;
    }

    $to = get_option('admin_email');
    $subject = 'Новая публикация на сайте';
    $message = 'Опубликована новая запись: ' . get_the_title($post_ID) . "\n" . get_permalink($post_ID);

    wp_mail($to, $subject, $message);
}
add_action('save_post', 'cyrtolat_notify_on_new_post', 10, 3);

Этот код проверяет, что запись только что была опубликована, и отправляет письмо админу.

Важные нюансы при работе с save_post

При использовании хука save_post важно учитывать некоторые моменты, чтобы избежать ошибок и зацикливания:

  • Избегайте бесконечных циклов. Если внутри вашего обработчика вы вызываете функции обновления записи (например, wp_update_post или update_post_meta), это может повторно вызвать save_post и привести к бесконечному циклу. Чтобы этого избежать, используйте флаги или remove_action/add_action.
  • Проверяйте права пользователя. Если ваш код зависит от данных, введённых пользователем, убедитесь, что текущий пользователь имеет необходимые права.
  • Обрабатывайте только нужные типы записей. Чтобы не нагружать систему, фильтруйте запись по типу post_type.
  • Используйте правильный приоритет и количество аргументов. Для получения всех параметров укажите 3 аргумента и приоритет не выше 10.

Пример обработки с защитой от рекурсии

Приведём пример, который обновляет метаполе, но не вызывает повторное срабатывание хука.

function cyrtolat_save_post_no_recursion($post_ID, $post, $update) {
    static $running = false;
    if ($running) {
        return;
    }

    if ($post->post_type !== 'post') {
        return;
    }

    $running = true;

    update_post_meta($post_ID, '_cyrtolat_flag', 'yes');

    $running = false;
}
add_action('save_post', 'cyrtolat_save_post_no_recursion', 10, 3);

Использование статической переменной $running предотвращает повторное выполнение кода внутри одного процесса сохранения.

Интеграция с плагинами WPShop

Если вы используете на сайте плагины из WPShop, например Clearfy Pro или Expert Review, то можете расширить функционал, реагируя на сохранение записей с помощью save_post.

Например, с помощью Clearfy Pro можно автоматически очищать кеш или обновлять SEO-метаданные при изменении записей, вызывая эти функции внутри вашего обработчика.

Заключение по использованию save_post

Хук save_post — это мощный инструмент для расширения функционала WordPress путем выполнения произвольных действий сразу после сохранения записи. Правильное использование этого хука помогает автоматизировать рутинные процессы, интегрировать сайт с внешними сервисами и улучшать пользовательский опыт.

Обязательно учитывайте все особенности и ограничения, чтобы избежать ошибок и конфликтов с другими плагинами и темами.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать автоматическую транслитерацию заголовков в WordPress
25.01.2026
Как в WooCommerce автоматически исключить из каталога товары без остатка на складе
21.04.2026
WooCommerce: автоматическое отключение неактивных способов оплаты
04.06.2026
Как удалить лишние слова из заголовков постов WordPress автоматически
19.01.2026
WooCommerce: автоматическое изменение цены товара при обновлении заказа
25.05.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее