Отслеживать изменения в постах 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 секунд после сохранения поста, что разгружает основной поток.

Как удалить заблокированные аккаунты WordPress без риска
20.05.2026
Как сделать автоматическую синхронизацию оповещений WordPress между сайтами
24.03.2026
Использование REST API для синхронизации пользователей и ролей WooCommerce между сайтами WordPress
23.05.2026
Как избавиться от проблем с переадресацией в WordPress при использовании WooCommerce
07.05.2026
Как синхронизировать WordPress между сайтами: пошаговое руководство
02.11.2025