Отслеживать изменения в постах WordPress с помощью hooks и webhook

В процессе разработки и сопровождения сайтов на WordPress часто возникает необходимость отслеживать изменения в записях (постах): создание, обновление или удаление. Это особенно важно для сайтов с большим количеством авторов, мультисайтовых установок и проектов, где требуется синхронизация данных или интеграция с внешними сервисами.

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

WordPress предоставляет мощный набор хуков (actions и filters), которые позволяют реагировать на различные события в системе. Для отслеживания изменений в постах подходят такие хуки, как save_post, wp_insert_post, delete_post.

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

Рассмотрим пример функции для отслеживания и логирования изменений постов с префиксом wpsync_ в названии, чтобы избежать конфликтов:

function wpsync_track_post_changes($post_id, $post, $update) {
    // Игнорируем автосохранения и ревизии
    if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) {
        return;
    }

    $action = $update ? 'updated' : 'created';
    error_log("Post ID $post_id has been $action.");

    // Здесь можно добавить дополнительную логику, например, отправку webhook
}
add_action('save_post', 'wpsync_track_post_changes', 10, 3);

В этом коде при каждом сохранении поста в лог записывается информация о том, был ли пост создан или обновлен.

Отправка уведомлений через webhook при изменениях в постах

Часто необходимо не просто регистрировать изменения, но и уведомлять внешние сервисы, например, CRM, аналитические платформы или собственные серверы. Для этого удобно использовать вебхуки — HTTP-запросы, которые отправляются при наступлении события.

Для отправки webhook можно использовать стандартную функцию wp_remote_post(). Добавим в нашу функцию отправку данных о посте на внешний URL:

function wpsync_send_post_update_webhook($post_id, $post, $update) {
    if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) {
        return;
    }

    $url = 'https://example.com/webhook-url'; // Замените на ваш URL
    $payload = [
        'post_id' => $post_id,
        'post_title' => $post->post_title,
        'post_status' => $post->post_status,
        'action' => $update ? 'updated' : 'created',
        'post_author' => $post->post_author,
        'post_date' => $post->post_date,
    ];

    $args = [
        'body' => json_encode($payload),
        'headers' => [
            'Content-Type' => 'application/json',
        ],
        'timeout' => 5,
    ];

    $response = wp_remote_post($url, $args);
    if (is_wp_error($response)) {
        error_log('Webhook error: ' . $response->get_error_message());
    }
}
add_action('save_post', 'wpsync_send_post_update_webhook', 10, 3);

Этот код отправляет JSON с базовой информацией о посте на внешний сервер при каждом создании или обновлении записи.

Обработка удаления постов

Для отслеживания удаления постов можно использовать хук before_delete_post:

function wpsync_track_post_deletion($post_id) {
    error_log("Post ID $post_id will be deleted.");
    // Можно добавить отправку webhook, аналогично примеру выше
}
add_action('before_delete_post', 'wpsync_track_post_deletion');

Практические плагины для мониторинга изменений и интеграции webhook

Если вы не хотите писать код самостоятельно, существуют плагины, которые помогут отслеживать изменения и отправлять уведомления:

  • WP Webhooks — мощный плагин для создания и обработки вебхуков в WordPress, позволяет настраивать события для постов и отправлять данные на внешние сервисы.
  • Activity Log — плагин для ведения журнала активности пользователей, включая создание и редактирование постов.
  • Clearfy Pro — оптимизационный плагин, который среди прочего имеет функции для контроля и управления событиями в WordPress.

Для интеграции с WP Webhooks пример настройки:

  1. Установите и активируйте плагин WP Webhooks.
  2. В настройках плагина создайте событие на создание/обновление поста.
  3. Укажите URL внешнего сервиса, куда нужно отправлять данные.
  4. Настройте формат и фильтры данных по необходимости.

Советы и рекомендации по производительности и безопасности

При использовании хуков для отправки webhook важно учитывать производительность сайта. Если внешний сервер работает медленно или недоступен, функция wp_remote_post() может замедлить сохранение поста. Чтобы избежать этого, рекомендуем:

  • Использовать асинхронные запросы — например, запускать отправку webhook в фоновом режиме через WP-Cron или очередь задач.
  • Добавлять обработку ошибок и логирование, чтобы отслеживать сбои.
  • Ограничивать количество отправляемых данных, передавая только важную информацию.

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

Пример асинхронной отправки webhook с использованием WP-Cron

function wpsync_schedule_webhook_send($post_id, $post, $update) {
    if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) {
        return;
    }
    $args = [
        'post_id' => $post_id,
        'update' => $update,
    ];
    wp_schedule_single_event(time() + 10, 'wpsync_send_webhook_event', [$args]);
}
add_action('save_post', 'wpsync_schedule_webhook_send', 10, 3);

function wpsync_handle_webhook_event($args) {
    $post = get_post($args['post_id']);
    if (!$post) {
        return;
    }
    $url = 'https://example.com/webhook-url';
    $payload = [
        'post_id' => $post->ID,
        'post_title' => $post->post_title,
        'action' => $args['update'] ? 'updated' : 'created',
    ];
    wp_remote_post($url, [
        'body' => json_encode($payload),
        'headers' => ['Content-Type' => 'application/json'],
        'timeout' => 5,
    ]);
}
add_action('wpsync_send_webhook_event', 'wpsync_handle_webhook_event');

Этот код планирует отправку webhook через 10 секунд после сохранения поста, что разгружает основной поток.

Автоматическая синхронизация оценок и рецензий WooCommerce между сайтами
13.03.2026
Синхронизация пользовательских настроек WordPress в мультисайте
23.01.2026
Как создать собственный плагин для синхронизации данных WordPress
07.11.2025
Синхронизация и отслеживание изменений в постах WordPress с помощью hooks и webhook
13.01.2026
Как синхронизировать данные в WordPress при помощи WP-CLI
05.02.2026