Автоматическая подписка на новые посты — востребованный функционал, который позволяет мгновенно информировать подписчиков о выходе нового контента. В этой статье мы разберём, как настроить такую подписку на WordPress с помощью Webhook’ов, что особенно полезно для интеграции с внешними сервисами рассылки, мессенджерами или CRM. Такой подход даёт большую гибкость и избавляет от необходимости использовать тяжелые почтовые плагины.
Что такое Webhook и зачем он нужен для подписки на новые посты
Webhook — это простой механизм отправки уведомлений с вашего сайта на сторонний сервис по HTTP-запросу в момент наступления определённого события. В нашем случае событие — публикация новой записи (поста) в WordPress.
Использование Webhook’а позволяет:
- Мгновенно оповещать внешние системы о новых постах
- Гибко настраивать логику отправки и формат данных
- Обходить ограничения SMTP-серверов и почтовых сервисов
- Интегрировать WordPress с сервисами, которые поддерживают Webhook’и, например, Telegram-боты, CRM, рассылочные платформы
Ниже пошагово покажу, как реализовать отправку данных о новом посте через Webhook с использованием собственного кода.
Подключаем отправку Webhook при публикации нового поста в WordPress
Для начала нам нужно повесить обработчик на хук publish_post — он срабатывает при публикации записи.
Создадим функцию wpmail_send_new_post_webhook, которая будет собирать данные и отправлять их на внешний URL.
<?php
function wpmail_send_new_post_webhook($post_ID) {
$post = get_post($post_ID);
if (!$post || $post->post_status !== 'publish') {
return;
}
$webhook_url = 'https://example.com/webhook-receiver'; // Замените на нужный URL
$data = [
'id' => $post->ID,
'title' => $post->post_title,
'excerpt' => wp_trim_words($post->post_content, 30),
'url' => get_permalink($post_ID),
'date' => get_the_date('c', $post_ID),
];
$args = [
'body' => json_encode($data),
'headers' => [
'Content-Type' => 'application/json',
],
'timeout' => 5,
];
wp_remote_post($webhook_url, $args);
}
add_action('publish_post', 'wpmail_send_new_post_webhook');
?>В этом коде мы собираем базовую информацию о посте и отправляем её в JSON-формате на заданный URL Webhook’а. Это может быть сервис рассылки, мессенджер или CRM.
Примеры использования Webhook’ов с популярными сервисами
Отправка уведомления в Telegram-бот
Рассмотрим пример, когда нужно отправить сообщение в Telegram-чат через бота при публикации нового поста. Для этого можно использовать Telegram Bot API и отправлять запросы на https://api.telegram.org/bot{TOKEN}/sendMessage.
<?php
function wpmail_send_telegram_notification($post_ID) {
$post = get_post($post_ID);
if (!$post || $post->post_status !== 'publish') {
return;
}
$bot_token = 'ВАШ_TELEGRAM_BOT_TOKEN';
$chat_id = 'ВАШ_CHAT_ID';
$message = "Новая статья на сайте: " . $post->post_title . "\n" . get_permalink($post_ID);
$url = "https://api.telegram.org/bot" . $bot_token . "/sendMessage";
$args = [
'body' => [
'chat_id' => $chat_id,
'text' => $message,
],
];
wp_remote_post($url, $args);
}
add_action('publish_post', 'wpmail_send_telegram_notification');
?>Таким образом, при публикации поста в Telegram моментально отправится уведомление.
Интеграция с сервисом рассылок через Webhook
Если вы используете внешнюю рассылочную платформу, которая поддерживает Webhook, можно отправлять данные о новых подписчиках или новых постах именно таким образом. Например, сервис может принимать JSON и автоматически создавать кампании.
Для примера можно использовать популярный плагин Clearfy Pro, который умеет оптимизировать отправку писем и взаимодействовать с API.
Обработка ошибок и логирование Webhook-запросов
Очень важно отслеживать, успешно ли отправляются Webhook-запросы. Для этого можно добавить простой лог в файл или использовать функцию error_log.
<?php
function wpmail_send_new_post_webhook($post_ID) {
$post = get_post($post_ID);
if (!$post || $post->post_status !== 'publish') {
return;
}
$webhook_url = 'https://example.com/webhook-receiver';
$data = [
'id' => $post->ID,
'title' => $post->post_title,
'excerpt' => wp_trim_words($post->post_content, 30),
'url' => get_permalink($post_ID),
'date' => get_the_date('c', $post_ID),
];
$args = [
'body' => json_encode($data),
'headers' => [
'Content-Type' => 'application/json',
],
'timeout' => 5,
];
$response = wp_remote_post($webhook_url, $args);
if (is_wp_error($response)) {
error_log('Webhook error: ' . $response->get_error_message());
} else {
error_log('Webhook sent successfully. Response code: ' . wp_remote_retrieve_response_code($response));
}
}
add_action('publish_post', 'wpmail_send_new_post_webhook');
?>Так вы будете видеть в логах, если что-то пошло не так и сможете быстро исправить проблему.
Дополнительные советы по улучшению подписки на новые посты в WordPress
Кэширование и оптимизация
Если у вас много публикаций и высокая нагрузка, стоит предусмотреть кэширование или отложенную отправку Webhook, чтобы избежать задержек при публикации.
Можно использовать WP-Cron для отложенного выполнения или подключать очереди, например, через плагин WPRemark.
Использование пользовательских типов записей
Если вы публикуете не только стандартные посты, а, например, обзоры или новости, добавьте аналогичный обработчик на нужные типы записей, используя хук publish_{post_type}. Например:
add_action('publish_review', 'wpmail_send_new_post_webhook');Это расширит функционал подписки на все нужные вам разделы сайта.
Интеграция с плагинами подписки
Можно дополнительно использовать плагины для сбора адресов подписчиков (например, My Popup) и объединять их с автоматической рассылкой через Webhook.
Это позволит повысить конверсию и качество коммуникации с аудиторией.
Итог
Webhook — мощный и гибкий инструмент для автоматизации уведомлений о новых постах на WordPress. Используя собственный код, вы можете интегрировать сайт с любыми внешними сервисами, обеспечивая мгновенную рассылку и улучшая взаимодействие с аудиторией. Совмещайте это с полезными плагинами для максимальной эффективности.