Автоматизация отправки email-сообщений в WordPress — частая задача при создании рассылок, уведомлений или напоминаний. Самый надёжный и удобный способ реализации такой функциональности — использование WP-Cron, встроенной системы планировщика задач в WordPress. В этой статье рассмотрим, как создать собственную автоматическую отправку email с помощью WP-Cron, а также предложим варианты с популярными плагинами для упрощения процесса.
Что такое WP-Cron и как он работает
WP-Cron — это имитация системного cron, реализованная внутри WordPress. В отличие от системного cron, который запускается по расписанию сервером, WP-Cron запускается при посещении сайта, проверяя, не пора ли выполнить запланированные задачи. Это удобно, так как не требует доступа к серверу, но стоит помнить, что если у сайта мало посетителей, задачи будут запускаться с задержкой.
WP-Cron позволяет разработчикам регистрировать свои задачи и запускать их по расписанию, например, отправлять email ежечасно, ежедневно или с любым интервалом. Ниже мы рассмотрим пример создания задачи для автоматической отправки email.
Регистрация и создание задачи для отправки email с помощью WP-Cron
Для начала нам нужно зарегистрировать событие, которое будет запускать функцию отправки email. Сделаем это так:
function wplesson_schedule_email_event() {
if ( ! wp_next_scheduled( 'wplesson_send_scheduled_email' ) ) {
wp_schedule_event( time(), 'hourly', 'wplesson_send_scheduled_email' );
}
}
add_action( 'wp', 'wplesson_schedule_email_event' );
// Функция, которая будет выполняться по расписанию
function wplesson_send_email_function() {
$to = 'user@example.com';
$subject = 'Автоматическое письмо с сайта';
$message = 'Это письмо отправлено автоматически с помощью WP-Cron.';
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail( $to, $subject, $message, $headers );
}
add_action( 'wplesson_send_scheduled_email', 'wplesson_send_email_function' );В этом коде мы создаём событие wplesson_send_scheduled_email, которое будет запускаться ежечасно (параметр 'hourly'). При каждом запуске будет выполняться функция wplesson_send_email_function, которая с помощью wp_mail отправляет письмо.
Важно добавить проверку wp_next_scheduled, чтобы событие не регистрировалось повторно при каждом заходе на сайт.
Добавление собственного интервала для WP-Cron
Стандартные интервалы WP-Cron — hourly, twicedaily и daily. Если нужно отправлять письма, например, каждые 10 минут, придется добавить свой интервал:
function wplesson_custom_cron_intervals( $schedules ) {
if ( ! isset( $schedules['every_ten_minutes'] ) ) {
$schedules['every_ten_minutes'] = array(
'interval' => 600, // 600 секунд = 10 минут
'display' => 'Каждые 10 минут'
);
}
return $schedules;
}
add_filter( 'cron_schedules', 'wplesson_custom_cron_intervals' );После добавления этого интервала можно использовать его в wp_schedule_event вместо 'hourly':
wp_schedule_event( time(), 'every_ten_minutes', 'wplesson_send_scheduled_email' );Пример расширенной функции отправки email с динамическими данными
В реальном проекте стоит отправлять письма с полезной информацией, например, отчёты или уведомления о состоянии сайта. Пример функции, которая отправляет письмо с количеством новых комментариев за последний час:
function wplesson_send_report_email() {
$args = array(
'date_query' => array(
array(
'after' => '1 hour ago'
)
),
'status' => 'approve',
'count' => true
);
$comments_count = get_comments( $args );
$to = 'admin@example.com';
$subject = 'Отчёт: новые комментарии за последний час';
$message = 'Количество новых комментариев за последний час: ' . $comments_count;
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail( $to, $subject, $message, $headers );
}
add_action( 'wplesson_send_scheduled_email', 'wplesson_send_report_email' );Таким образом, можно легко адаптировать функцию под свои задачи.
Плагины для упрощения работы с WP-Cron и автоматической отправкой email
Если не хочется писать код с нуля, можно воспользоваться плагинами, которые облегчают управление задачами и рассылками:
- WP Crontrol — позволяет просматривать, редактировать и запускать WP-Cron задачи через админку WordPress. Очень удобно для отладки.
https://ru.wordpress.org/plugins/wp-crontrol/ - WP Mail SMTP — улучшает доставляемость писем, позволяя настроить SMTP для отправки email, что важно при автоматической рассылке.
https://ru.wordpress.org/plugins/wp-mail-smtp/ - WPNewsletter — плагин для создания и отправки рассылок с гибкими настройками расписания.
Также можно обратить внимание на плагин WPGPT для генерации контента и автоматизации email-сообщений с помощью искусственного интеллекта.
Как отлаживать WP-Cron задачи и проблемы с отправкой email
Иногда WP-Cron может не срабатывать из-за отсутствия посещений сайта или ограничений хостинга. Чтобы проверить и запустить задачи вручную, используйте плагин WP Crontrol.
Если письма не доходят, проверьте настройки SMTP и логи отправки. Встроенная функция wp_mail может не работать на некоторых хостингах без правильной настройки почтового сервера.
Для отладки можно добавить логирование в функцию отправки email:
function wplesson_send_email_function() {
$to = 'user@example.com';
$subject = 'Тестовое письмо';
$message = 'Письмо отправлено с WP-Cron.';
$headers = array('Content-Type: text/html; charset=UTF-8');
$sent = wp_mail( $to, $subject, $message, $headers );
if ( ! $sent ) {
error_log('WP-Cron: письмо не отправлено');
} else {
error_log('WP-Cron: письмо успешно отправлено');
}
}Выводы и рекомендации по автоматической отправке email в WordPress
Использование WP-Cron для автоматической отправки email — мощный и гибкий инструмент, позволяющий решать множество задач без привлечения сторонних сервисов. При этом важно учитывать особенности работы WP-Cron и обязательно тестировать корректность отправки.
Для упрощения управления задачами рекомендуем использовать плагин WP Crontrol, а для повышения надёжности отправки — WP Mail SMTP. Если нужна генерация контента для писем — обратите внимание на WPGPT.
Освоив этот подход, вы сможете автоматизировать рассылки, уведомления и отчёты на вашем сайте WordPress, существенно повысив его функциональность и удобство для пользователей и администраторов.