Вебхуки (webhooks) — это мощный инструмент для автоматизации процессов в WordPress. Они позволяют вашему сайту реагировать на события и взаимодействовать с внешними сервисами в режиме реального времени. В этой статье мы подробно разберем, как использовать вебхуки в WordPress, приведем примеры готовых плагинов и покажем, как написать собственный обработчик вебхуков с примерами кода.
Что такое вебхуки и зачем они нужны в WordPress
Вебхуки — это HTTP-запросы, которые автоматически отправляются с вашего сайта при наступлении определенного события. Например, после публикации поста, регистрации пользователя или оформления заказа. Они позволяют интегрировать WordPress с внешними системами — CRM, почтовыми сервисами, мессенджерами, системами аналитики и др.
Использование вебхуков помогает автоматизировать рутинные задачи: отправка уведомлений, синхронизация данных, запуск триггерных действий без участия пользователя и без постоянных запросов к API.
В WordPress вебхуки можно реализовать разными способами: через готовые плагины, через REST API, или собственными обработчиками на хуках WordPress.
Примеры популярных плагинов для работы с вебхуками в WordPress
Для удобства работы с вебхуками существуют готовые плагины, которые значительно упрощают настройку и управление:
- WP Webhooks — один из самых популярных плагинов для создания и приема вебхуков в WordPress. Позволяет отправлять и принимать данные, запускать действия (создание постов, пользователей, обновления и др.).
- AutomatorWP — плагин для автоматизации, который поддерживает вебхуки как триггеры и действия. Идеален для построения сложных цепочек автоматизации.
- Clearfy Pro — расширение для оптимизации и безопасности, которое также поддерживает настройку вебхуков для различных событий, например, для уведомлений о безопасности.
Для примера рассмотрим, как подключить WP Webhooks и настроить простой отправитель вебхуков.
Настройка WP Webhooks для отправки вебхуков
1. Установите и активируйте плагин WP Webhooks.
2. Перейдите в раздел настроек плагина и найдите вкладку «Send Data».
3. Создайте новое событие, например, отправку данных при публикации поста.
4. Укажите URL вебхука — адрес внешнего сервиса, который будет принимать данные.
5. Настройте параметры, какие данные отправлять (например, заголовок и ссылка поста).
Теперь при каждом новом посте WP Webhooks будет автоматически отправлять HTTP POST запрос с нужными данными на указанный адрес.
Как создать собственный обработчик вебхуков в WordPress через код
Если нужен кастомный сценарий, можно написать обработчик вебхуков самостоятельно, используя встроенный REST API WordPress и хуки. Ниже пример, как создать endpoint для приема вебхуков и обработать их.
add_action('rest_api_init', 'wpcodex_register_webhook_endpoint');
function wpcodex_register_webhook_endpoint() {
register_rest_route('wpcodex/v1', '/webhook/', array(
'methods' => 'POST',
'callback' => 'wpcodex_handle_webhook',
'permission_callback' => '__return_true', // для публичного доступа
));
}
function wpcodex_handle_webhook(WP_REST_Request $request) {
$data = $request->get_json_params();
if (empty($data) || !isset($data['event'])) {
return new WP_REST_Response(array('error' => 'Invalid data'), 400);
}
// Обработка события
switch ($data['event']) {
case 'new_user':
// Пример: создать пользователя
if (!empty($data['email']) && !email_exists($data['email'])) {
$user_id = wp_create_user($data['email'], wp_generate_password(), $data['email']);
return new WP_REST_Response(array('success' => true, 'user_id' => $user_id), 200);
}
break;
case 'new_post':
// Создать пост
$post_id = wp_insert_post(array(
'post_title' => sanitize_text_field($data['title']),
'post_content' => sanitize_textarea_field($data['content']),
'post_status' => 'publish',
'post_author' => 1
));
return new WP_REST_Response(array('success' => true, 'post_id' => $post_id), 200);
}
return new WP_REST_Response(array('error' => 'Unknown event'), 400);
}Этот код регистрирует маршрут REST API /wp-json/wpcodex/v1/webhook/, который принимает POST-запросы с JSON и обрабатывает события. Можно расширить логику под свои задачи.
Как отправлять вебхуки из WordPress вручную через код
Иногда нужно самому отправить вебхук с сайта. Для этого можно использовать функцию wp_remote_post(). Вот пример отправки простого вебхука при публикации поста:
add_action('publish_post', 'wpcodex_send_webhook_on_publish', 10, 2);
function wpcodex_send_webhook_on_publish($ID, $post) {
$webhook_url = 'https://example.com/webhook-receiver';
$body = array(
'event' => 'post_published',
'post_id' => $ID,
'post_title' => $post->post_title,
'post_url' => get_permalink($ID),
);
$args = array(
'body' => json_encode($body),
'headers' => array('Content-Type' => 'application/json'),
'timeout' => 15
);
$response = wp_remote_post($webhook_url, $args);
if (is_wp_error($response)) {
error_log('Webhook error: ' . $response->get_error_message());
}
}Такой подход позволяет интегрировать WordPress с любыми внешними системами, которые поддерживают вебхуки.
Советы по безопасности при работе с вебхуками в WordPress
Вебхуки — это точки входа в ваш сайт, поэтому важно обезопасить их:
- Используйте секретные ключи или подписи в запросах и проверяйте их на сервере.
- Ограничивайте IP-адреса, с которых принимаются вебхуки.
- Проверяйте данные на валидность и экранируйте для предотвращения XSS и SQL-инъекций.
- Не открывайте публичный доступ к обработчикам без аутентификации, если это не критично.
Например, можно добавить проверку токена в заголовках:
function wpcodex_handle_webhook(WP_REST_Request $request) {
$token = $request->get_header('x-wpcodex-token');
if ($token !== 'ВАШ_СЕКРЕТНЫЙ_ТОКЕН') {
return new WP_REST_Response(array('error' => 'Unauthorized'), 401);
}
// Дальнейшая обработка
}Заключение
Использование вебхуков в WordPress открывает широкие возможности для автоматизации и интеграции с внешними сервисами. Вы можете использовать готовые плагины, такие как WP Webhooks, или создать собственные обработчики на базе REST API. Главное — помнить о безопасности и тщательно проверять входящие и исходящие данные.