Автоматическая отправка email-отчетов в WordPress через WP-Cron

Что такое WP-Cron и зачем он нужен для email-отчетов?

WP-Cron — встроенный планировщик задач в WordPress, который позволяет запускать определённые функции по расписанию. В отличие от системного cron, WP-Cron запускается при посещении сайта, что требует правильной настройки для надёжной работы. Автоматическая отправка email-отчетов — одна из типичных задач, которую можно реализовать через WP-Cron, например, для рассылки статистики, новостей или напоминаний.

Диагностика: почему автоматические email-отчеты не отправляются?

Если вы настроили WP-Cron для отправки писем, но письма не приходят, проверьте следующие моменты:

  • WP-Cron отключён через define('DISABLE_WP_CRON', true) в wp-config.php без запуска системного cron;
  • Отсутствие посещений сайта (WP-Cron срабатывает при заходе на сайт);
  • Ошибки в callback-функции, которая должна отправлять письмо;
  • Проблемы с почтовым сервером или функцией wp_mail();
  • Конфликты с другими плагинами или темой, которые влияют на отправку почты.

Пошаговое решение: как настроить WP-Cron для отправки email-отчетов

1. Создаём функцию отправки email

function wp3_send_email_report() {
    $to = 'admin@example.com';
    $subject = 'Еженедельный отчет сайта';
    $message = 'Это автоматический отчет за неделю.';
    $headers = array('Content-Type: text/html; charset=UTF-8');

    if ( wp_mail($to, $subject, $message, $headers) ) {
        error_log('Email report sent successfully.');
    } else {
        error_log('Failed to send email report.');
    }
}

2. Регистрируем кастомное событие WP-Cron

add_action('wp3_weekly_email_event', 'wp3_send_email_report');

3. Добавляем интервал для еженедельного запуска (если не нужен стандартный)

add_filter('cron_schedules', function($schedules) {
    if (!isset($schedules['weekly'])) {
        $schedules['weekly'] = [
            'interval' => 7 * 24 * 60 * 60, // 1 неделя в секундах
            'display' => 'Еженедельно'
        ];
    }
    return $schedules;
});

4. Запускаем событие при активации темы или плагина

if (! wp_next_scheduled('wp3_weekly_email_event')) {
    wp_schedule_event(time(), 'weekly', 'wp3_weekly_email_event');
}

5. Рекомендуется настроить системный cron для надёжности

Добавьте в системный cron на сервере вызов wp-cron.php каждые 15 минут, если в wp-config.php отключён WP-Cron:

wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
# или
curl https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Проверка результата после внедрения

  • Посмотрите логи ошибок сервера и error_log, чтобы убедиться, что функция wp3_send_email_report вызывается и письма отправляются;
  • Проверьте папку «Входящие» почтового ящика, указанный в переменной $to;
  • Запустите вручную событие для теста, выполнив в админке или через WP-CLI:
do_action('wp3_weekly_email_event');

Если письмо приходит после ручного запуска, но не приходит по расписанию — проблема с WP-Cron или системным cron.

Частые ошибки и способы их исправления

  • DISABLE_WP_CRON установлен, но системный cron не настроен.
    Решение: настроить cron на сервере или удалить define('DISABLE_WP_CRON', true) из wp-config.php.
  • Функция отправки письма содержит ошибки PHP.
    Решение: включить вывод ошибок или error_log для отладки.
  • Почтовый сервер блокирует письма.
    Решение: проверить настройки SMTP, использовать плагины SMTP (например, WP Mail SMTP) для надежной отправки.
  • Период запуска cron-события не подходит.
    Решение: проверить интервал и время запуска, можно временно заменить на 'hourly' для тестов.
  • Проблемы с кешированием страниц, которые блокируют WP-Cron.
    Решение: исключить wp-cron.php из кеширования на уровне сервера или плагина.

Практические советы по безопасности и производительности

  • Не отправляйте большие объемы данных в письмах — лучше использовать ссылки на отчет или сокращать контент.
  • Используйте nonce и проверки прав в функциях, если они вызываются не только из WP-Cron.
  • Для высокой нагрузки рекомендуем настроить системный cron вместо стандартного WP-Cron.
  • Логируйте успешные и проваленные попытки отправки, чтобы своевременно обнаруживать проблемы.

Сравнение вариантов реализации автоматических email-отчетов

МетодПлюсыМинусы
WP-Cron (встроенный)Прост в настройке, не требует доступа к серверуЗависит от посещаемости сайта, может быть ненадежен
Системный cron + wp-cron.phpНадежный запуск по расписанию, подходит для больших сайтовТребует доступа к серверу и базовых навыков Linux
Плагины SMTP + планировщик задач в админкеУпрощают настройку почты, имеют удобный интерфейсЗависимость от сторонних решений, возможны конфликты
Как автоматизировать удаление старых чрезвычайных постов в WordPress
06.04.2026
Как отменить отправку писем с WordPress: практическое руководство
12.01.2026
Как удалить или скрыть URL страниц в WordPress: практические решения
26.03.2026
Как создать автоматические подписки на новости в WordPress
04.02.2026
Как правильно отключить AJAX в WooCommerce без потери функциональности
29.06.2026