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

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

Что такое hooks и webhook, и зачем их использовать для отслеживания изменений

Hooks (хуки) — это точки расширения в WordPress, которые позволяют запускать пользовательский код в ответ на определённые события. Например, при сохранении записи срабатывает хук save_post, а при её удалении — delete_post.

Webhook — это HTTP-запрос к внешнему URL при наступлении события, который позволяет автоматически уведомлять сторонние сервисы о произошедших изменениях.

Совмещение хуков и вебхуков позволяет не только отследить изменения на сайте, но и передать данные в реальном времени для дальнейшей обработки, что незаменимо в задачах синхронизации и интеграции.

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

Чтобы корректно отследить все изменения, нужно учитывать несколько ключевых хуков:

  • save_post — вызывается при создании и обновлении записи.
  • delete_post — срабатывает при удалении записи.
  • transition_post_status — отслеживает смену статуса записи (например, с черновика на опубликованную).

Каждый из них даёт определённый набор данных и позволяет выполнить нужные действия.

Обработка события сохранения записи

Хук save_post передаёт ID записи и позволяет получить все её данные. Пример функции, которая вызывается при сохранении:

function wpsync_save_post_webhook($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;
    }
    // Формируем данные для webhook
    $data = [
        'ID' => $post_id,
        'title' => $post->post_title,
        'content' => $post->post_content,
        'status' => $post->post_status,
        'date' => $post->post_date,
    ];
    // Отправляем webhook
    wpsync_send_webhook($data, 'post_updated');
}
add_action('save_post', 'wpsync_save_post_webhook');

В этой функции важно исключить автосохранение, проверить права и тип записи, чтобы не отправлять лишние запросы.

Отслеживание удаления записи

Для удаления используется хук delete_post:

function wpsync_delete_post_webhook($post_id) {
    $post = get_post($post_id);
    if (!$post || $post->post_type !== 'post') {
        return;
    }
    $data = [
        'ID' => $post_id,
        'title' => $post->post_title,
        'action' => 'delete',
    ];
    wpsync_send_webhook($data, 'post_deleted');
}
add_action('delete_post', 'wpsync_delete_post_webhook');

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

Реализация функции отправки webhook

Для отправки webhook удобно использовать функцию, которая принимает данные и тип события, формирует запрос и отправляет его на заранее заданный URL.

function wpsync_send_webhook($data, $event) {
    $webhook_url = 'https://example.com/webhook-receiver'; // Укажите адрес обработчика

    $payload = json_encode([
        'event' => $event,
        'data' => $data,
        'timestamp' => time(),
    ]);

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

    $response = wp_remote_post($webhook_url, $args);

    if (is_wp_error($response)) {
        error_log('WPSync webhook error: ' . $response->get_error_message());
    }
}

Обратите внимание на обработку ошибок — при неудачной отправке это поможет выявить проблемы.

Практические советы по организации синхронизации с помощью webhook

Настройка webhook — только первый шаг. Для надёжной синхронизации следует учесть:

  • Идентификаторы записей. Убедитесь, что на всех сайтах используются совпадающие ID или предусмотрена трансформация идентификаторов.
  • Паузы и повторные попытки. В случае недоступности внешнего сервера следует реализовать повторные отправки или очередь сообщений.
  • Безопасность. Ограничьте доступ к webhook URL, используйте подписи или токены для проверки источника запросов.
  • Логирование. Ведение журнала событий и ошибок помогает быстро реагировать на сбои.

Использование плагинов для расширенной работы с webhook

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

  • Clearfy Pro — оптимизирует работу сайта и поддерживает расширенные инструменты для интеграций.
  • WPCommunity — для проектов с сообществом, где синхронизация пользовательского контента особенно важна.

Отслеживание изменений по условию и фильтрация событий

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

Для этого можно использовать хук transition_post_status:

function wpsync_transition_post_status_webhook($new_status, $old_status, $post) {
    if ($post->post_type !== 'post') {
        return;
    }
    // Отправляем webhook только при публикации
    if ($old_status !== 'publish' && $new_status === 'publish') {
        $data = [
            'ID' => $post->ID,
            'title' => $post->post_title,
            'status' => $new_status,
        ];
        wpsync_send_webhook($data, 'post_published');
    }
}
add_action('transition_post_status', 'wpsync_transition_post_status_webhook', 10, 3);

Так вы сможете снизить нагрузку и отправлять уведомления только по важным событиям.

Выводы и рекомендации по интеграции webhook в проекты WordPress

Использование хуков вместе с webhook — мощный инструмент для синхронизации и интеграции WordPress с внешними системами. Не забывайте тщательно тестировать обработчики, использовать проверку прав и исключать автосохранения, чтобы избежать лишних вызовов. Логируйте ошибки и учитывайте особенности инфраструктуры для надёжной работы.

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

Как удалить неиспользуемые плагины в WordPress без риска для сайта
26.11.2025
Как синхронизировать виджеты WordPress между сайтами
09.01.2026
Как синхронизировать метаданные пользователей WordPress между сайтами
20.01.2026
Как сделать автоматические резервные копии WordPress с помощью плагинов
11.11.2025
Как запретить загрузку внешних iframe в WordPress для безопасности сайта
03.05.2026