Что такое WP-Cron и почему он нужен для автоматической отправки писем
WP-Cron — это встроенный в WordPress механизм планировщика задач, который позволяет запускать определённые функции по расписанию. В отличие от системного cron, WP-Cron запускается при посещении сайта, что важно учитывать при настройке.
Автоматическая отправка писем — частая задача: уведомления, рассылки, напоминания. WP-Cron позволяет реализовать это без внешних плагинов и сложных сервисов.
Диагностика проблемы: почему письма не отправляются автоматически
Перед настройкой нужно понять, почему автоматическая отправка писем не работает:
- WP-Cron не запускается (низкая посещаемость сайта или отключён WP-Cron в wp-config.php).
- Ошибка в коде функции отправки письма.
- Почтовая функция WordPress wp_mail() не настроена или блокируется хостингом.
Проверить работу WP-Cron можно с помощью плагина WP Crontrol. Он позволяет увидеть запланированные задачи и запустить их вручную.
Пошаговое решение: как настроить автоматическую отправку писем через WP-Cron
1. Создаём функцию отправки письма
function send_scheduled_email() {
$to = 'user@example.com';
$subject = 'Автоматическое письмо от WordPress';
$message = 'Это письмо отправлено автоматически через WP-Cron.';
$headers = ['Content-Type: text/html; charset=UTF-8'];
wp_mail($to, $subject, $message, $headers);
}2. Регистрируем событие в WP-Cron
Добавим событие, если его ещё нет, и привяжем функцию к хуку:
function schedule_email_event() {
if (!wp_next_scheduled('send_email_event_hook')) {
wp_schedule_event(time(), 'hourly', 'send_email_event_hook');
}
}
add_action('wp', 'schedule_email_event');
add_action('send_email_event_hook', 'send_scheduled_email');Здесь задача будет запускаться каждый час. Можно использовать встроенные интервалы: 'hourly', 'twicedaily', 'daily'. Для кастомных интервалов нужно добавить фильтр cron_schedules.
3. Проверяем правильность отправки писем
Чтобы убедиться, что письмо отправляется, добавьте логирование:
function send_scheduled_email() {
$to = 'user@example.com';
$subject = 'Автоматическое письмо от WordPress';
$message = 'Это письмо отправлено автоматически через WP-Cron.';
$headers = ['Content-Type: text/html; charset=UTF-8'];
$sent = wp_mail($to, $subject, $message, $headers);
if ($sent) {
error_log('Письмо отправлено успешно: ' . date('Y-m-d H:i:s'));
} else {
error_log('Ошибка отправки письма: ' . date('Y-m-d H:i:s'));
}
}Как проверить, что задача WP-Cron сработала
- Убедитесь, что в логах сервера или в debug.log появились записи об успешной отправке.
- Проверьте папку «Исходящие» почтового клиента, куда отправляется письмо.
- Через плагин WP Crontrol запустите задачу вручную и посмотрите, выполняется ли она без ошибок.
Частые ошибки и как их исправить
- WP-Cron не запускается: Проверьте, что в файле
wp-config.phpне определена константаDISABLE_WP_CRONв true. Если сайт с низкой посещаемостью, лучше настроить системный cron на вызовwp-cron.php. - Письма не доходят: Хостинг блокирует функцию
wp_mail()или письма попадают в спам. Используйте SMTP-плагин (например, WP Mail SMTP) для корректной отправки. - Неправильное расписание: Убедитесь, что событие регистрируется один раз, например, на хук
wp, чтобы не создавать дубликаты задач.
Практические советы для надёжности и производительности
- Для крупных проектов и интенсивной отправки рассылок используйте сторонние сервисы (Mailgun, SendGrid) через SMTP или API.
- Добавляйте в WP-Cron только действительно необходимые задачи, чтобы не перегружать систему.
- Если нужно более точное расписание, настройте системный cron и отключите WP-Cron в WordPress (константа
DISABLE_WP_CRON). - Для отладки используйте плагин WP Crontrol и логи ошибок сервера.
Таблица сравнения способов отправки писем в WordPress
| Метод | Преимущества | Недостатки | Когда использовать |
|---|---|---|---|
| WP-Cron + wp_mail() | Встроено, не требует плагинов, простота | Зависит от посещаемости, возможны задержки | Небольшие задачи с низкой нагрузкой |
| Системный cron + wp_mail() | Точное расписание, не зависит от посещаемости | Требует доступа к серверу, настройка сложнее | Средние и крупные проекты с регулярными задачами |
| SMTP-плагины / Сервисы API | Надёжная доставка, обход спама, отчёты | Необходима настройка внешних сервисов, может быть платно | Рассылки, массовая отправка, бизнес-проекты |