Как автоматически отслеживать изменения в WordPress с помощью Webhook'ов

В современных проектах на WordPress часто возникает необходимость автоматически отслеживать изменения контента, пользователей или других объектов и реагировать на них в реальном времени. Для этого отлично подходят webhook'и — механизмы, которые позволяют системе отправлять уведомления на сторонний сервер при наступлении определённых событий.

Что такое Webhook в контексте WordPress

Webhook — это HTTP-запрос, который WordPress отправляет на определённый URL при возникновении события. Например, можно настроить отправку webhook при публикации новой записи, обновлении профиля пользователя или изменении настроек.

Основное преимущество webhook — это возможность интеграции WordPress с внешними сервисами и автоматизация рабочих процессов без постоянного опроса сервера.

В WordPress нет встроенной поддержки webhook'ов в классическом понимании, но мы можем создать собственную систему на базе хуков и функций, которая будет отправлять HTTP-запросы при нужных событиях.

Настройка отправки webhook при изменении записи

Рассмотрим пример, как создать webhook, который будет срабатывать при публикации или обновлении записи. Для этого используем хук save_post, который вызывается при сохранении записи.

Добавим в файл functions.php вашей темы или в собственный плагин следующий код:

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

    // Формируем данные для отправки
    $data = array(
        'post_id' => $post_id,
        'post_title' => $post->post_title,
        'post_status' => $post->post_status,
        'updated' => $update,
        'timestamp' => current_time( 'mysql' ),
    );

    // URL для webhook
    $webhook_url = 'https://example.com/webhook-endpoint';

    // Отправка POST-запроса
    wp_remote_post( $webhook_url, array(
        'method' => 'POST',
        'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
        'body' => json_encode( $data ),
        'timeout' => 5,
    ) );
}
add_action( 'save_post', 'wptask_send_webhook_on_post_save', 10, 3 );

В этом коде мы отправляем JSON с информацией о записи на сторонний URL каждый раз, когда запись создаётся или обновляется. Вы можете заменить $webhook_url на адрес вашего сервера, который будет обрабатывать эти данные.

Настройка приема webhook и реакция на данные

Для полноты картины рассмотрим, как может выглядеть простой обработчик webhook на стороне сервера, который принимает уведомления из WordPress. Например, на PHP:

<?php
// webhook-endpoint.php

// Получаем данные из входящего запроса
$input = file_get_contents('php://input');
$data = json_decode($input, true);

if ($data) {
    // Логируем или обрабатываем данные
    file_put_contents('webhook_log.txt', print_r($data, true), FILE_APPEND);
    // Здесь можно запускать любые действия, например, обновлять базу данных, отправлять email и т.д.
}

http_response_code(200); // Отвечаем, что запрос обработан успешно
?>

Отслеживание изменений пользователей через Webhook

Аналогично можно настроить webhook на события, связанные с пользователями, например, при регистрации, обновлении профиля или удалении пользователя.

В WordPress есть хуки user_register, profile_update и delete_user. Используем их для отправки webhook'ов.

function wptask_send_webhook_on_user_change( $user_id ) {
    $user = get_userdata( $user_id );
    if ( ! $user ) {
        return;
    }

    $data = array(
        'user_id' => $user_id,
        'user_login' => $user->user_login,
        'user_email' => $user->user_email,
        'timestamp' => current_time( 'mysql' ),
    );

    $webhook_url = 'https://example.com/user-webhook-endpoint';

    wp_remote_post( $webhook_url, array(
        'method' => 'POST',
        'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
        'body' => json_encode( $data ),
        'timeout' => 5,
    ) );
}
add_action( 'user_register', 'wptask_send_webhook_on_user_change' );
add_action( 'profile_update', 'wptask_send_webhook_on_user_change' );
add_action( 'delete_user', 'wptask_send_webhook_on_user_change' );

Этот код будет отправлять webhook при регистрации нового пользователя, изменении профиля и удалении пользователя. Это удобно для синхронизации данных с CRM, email-сервисами или внешними системами.

Полезные плагины для работы с Webhook в WordPress

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

  • WP Webhooks — комплексный плагин для создания и приёма webhook, позволяет автоматизировать обмен данными между WordPress и внешними системами.
  • AutomatorWP — плагин автоматизации с поддержкой webhook'ов, позволяет строить сложные сценарии без кода.
  • Clearfy Pro — в пакете оптимизаций есть инструменты для управления REST API и webhook, повышающие безопасность и производительность.

Использование готовых плагинов ускорит разработку и упростит администрирование, особенно если вы не хотите погружаться в детали HTTP-запросов.

Практические советы по работе с Webhook

Обработка ошибок и повторные попытки

При отправке webhook важно учитывать ошибки сети или сбои сервера получателя. Рекомендуется логировать неудачные попытки и при необходимости реализовать механизм повторной отправки.

В базовом примере с wp_remote_post можно проверять результат и сохранять данные для повторных попыток, например, в отдельной таблице или опции WordPress.

Безопасность webhook

Webhook могут стать точкой входа для злоумышленников. Чтобы обезопасить систему, используйте:

  • Авторизацию на стороне получателя (например, секретные ключи в заголовках).
  • Проверку IP-адресов отправителей.
  • Шифрование данных при необходимости.

Оптимизация производительности

Отправка webhook может замедлить выполнение основного запроса WordPress. Чтобы избежать задержек, рекомендуется использовать асинхронные задачи, например, через WP-Cron или очереди задач.

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

Автоматическое удаление неоплаченных заказов в WooCommerce
13.05.2026
Добавление полей в профиль пользователя WordPress: подробное руководство
04.12.2025
Как удалить ненужные мета данные WordPress для ускорения сайта
19.12.2025
Автоматическое удаление неиспользуемых таксономий в WordPress
01.04.2026
Как удалить заголовок H1 в WordPress без плагинов
17.11.2025