Синхронизация и отслеживание изменений в постах 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 и типы событий через админку.

Как автоматизировать удалённый вывод данных WooCommerce через REST API
19.07.2026
Как синхронизировать виджеты WordPress между сайтами
09.01.2026
Как автоматизировать очистку базы данных WordPress для ускорения сайта
15.12.2025
Как удалить заблокированные аккаунты WordPress: практическое руководство
10.04.2026
Отслеживать изменения в постах WordPress с помощью hooks и webhook
02.01.2026