Как использовать WP-Cron для автоматического отправления электронных писем в WordPress

Что такое 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Надёжная доставка, обход спама, отчётыНеобходима настройка внешних сервисов, может быть платноРассылки, массовая отправка, бизнес-проекты
Как сделать автоматический sitemap в WordPress с помощью кода
08.02.2026
Как автоматически создавать миниатюры для картинок в WordPress
23.12.2025
Как удалить категорию в WordPress с помощью кода
17.12.2025
Как создать плагин для WordPress с нуля: практическое руководство
06.11.2025
Как изменить главный заголовок страницы в WordPress без плагинов
20.12.2025