Как создать автоматическое отправление email в WordPress с помощью WP-Cron

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

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

WP-Cron – это встроенный планировщик задач WordPress, который имитирует системный cron, но работает только при посещении сайта. Он позволяет запускать запланированные функции в определённое время или с определённым интервалом. Использование WP-Cron для отправки email удобно, так как не требует доступа к серверным cron, подходит для большинства хостингов и легко настраивается через код.

Однако, у WP-Cron есть особенности: он срабатывает только при заходе пользователей на сайт, поэтому если посещаемость низкая, задачи могут запускаться с задержками. Для решения этой проблемы можно настроить системный cron для вызова wp-cron.php, но в простых случаях этого не требуется.

Создание функции отправки email в WordPress

Для начала необходимо написать функцию, которая будет отправлять письмо. В WordPress для этого используется функция wp_mail(). Она позволяет отправлять email с темой, содержимым и заголовками.

function wpteam_send_scheduled_email() {
    $to = 'user@example.com'; // адрес получателя
    $subject = 'Автоматическое уведомление с wpteam.ru';
    $message = 'Это письмо отправлено автоматически с использованием WP-Cron в WordPress.';
    $headers = array('Content-Type: text/html; charset=UTF-8');

    wp_mail($to, $subject, $message, $headers);
}

Эту функцию мы будем запускать автоматически по расписанию.

Регистрация и планирование задачи WP-Cron

Чтобы запускать функцию wpteam_send_scheduled_email автоматически, надо зарегистрировать событие в WP-Cron и задать интервал с помощью функции wp_schedule_event(). Рассмотрим пример, где письмо отправляется ежедневно в определённое время.

add_action('wpteam_daily_email_event', 'wpteam_send_scheduled_email');

function wpteam_activate_cron() {
    if (!wp_next_scheduled('wpteam_daily_email_event')) {
        wp_schedule_event(strtotime('08:00:00'), 'daily', 'wpteam_daily_email_event');
    }
}
add_action('wp', 'wpteam_activate_cron');

Объяснение:

  • wpteam_daily_email_event – уникальное название события.
  • wp_schedule_event – функция, которая планирует событие. В данном случае первый запуск запланирован на 8:00 утра, затем событие повторяется ежедневно.
  • add_action('wpteam_daily_email_event', 'wpteam_send_scheduled_email') – привязывает функцию отправки письма к событию.
  • add_action('wp', 'wpteam_activate_cron') – при каждом загрузке сайта проверяется, запланировано ли событие, и если нет – создаётся.

Добавление кастомного интервала для WP-Cron

WordPress по умолчанию поддерживает только стандартные интервалы: hourly, twicedaily и daily. Для более точного расписания можно добавить собственный интервал, например, раз в 15 минут или раз в 3 дня.

function wpteam_add_custom_cron_intervals($schedules) {
    $schedules['every_fifteen_minutes'] = array(
        'interval' => 900, // 900 секунд = 15 минут
        'display' => 'Каждые 15 минут'
    );
    return $schedules;
}
add_filter('cron_schedules', 'wpteam_add_custom_cron_intervals');

После этого можно использовать новый интервал при планировании события:

if (!wp_next_scheduled('wpteam_fifteen_min_event')) {
    wp_schedule_event(time(), 'every_fifteen_minutes', 'wpteam_fifteen_min_event');
}
add_action('wpteam_fifteen_min_event', 'wpteam_send_scheduled_email');

Практические советы и рекомендации

1. Очистка планировщика. Если при тестировании нужно удалить старые события, используйте wp_clear_scheduled_hook('wpteam_daily_email_event').

2. Отладка email. Для отладки отправки писем полезно использовать плагин WPCommunity или плагин WP Mail Logging, чтобы видеть, какие письма уходят.

3. Использование HTML в письмах. Чтобы отправлять красивое HTML-сообщение, укажите заголовок Content-Type, как в примере выше, и формируйте тело письма с HTML-тегами.

4. Интеграция с плагинами. Если вы используете плагин WPRemark для управления комментариями, можно отправлять уведомления о новых комментариях автоматом, связав их с WP-Cron.

Пример расширенного сценария: еженедельный отчет с данными из базы

Допустим, нужно раз в неделю отправлять отчет с количеством новых пользователей и публикаций. Можно написать функцию так:

function wpteam_send_weekly_report() {
    global $wpdb;

    $users_count = $wpdb->get_var("SELECT COUNT(ID) FROM {$wpdb->users} WHERE user_registered >= DATE_SUB(NOW(), INTERVAL 7 DAY)");
    $posts_count = $wpdb->get_var("SELECT COUNT(ID) FROM {$wpdb->posts} WHERE post_date >= DATE_SUB(NOW(), INTERVAL 7 DAY) AND post_status = 'publish'");

    $to = 'admin@wpteam.ru';
    $subject = 'Еженедельный отчет сайта wpteam.ru';
    $message = "<h2>Отчет за последнюю неделю</h2>";
    $message .= "<p>Новых пользователей: {$users_count}</p>";
    $message .= "<p>Новых публикаций: {$posts_count}</p>";
    $headers = array('Content-Type: text/html; charset=UTF-8');

    wp_mail($to, $subject, $message, $headers);
}

add_action('wpteam_weekly_report_event', 'wpteam_send_weekly_report');

function wpteam_schedule_weekly_report() {
    if (!wp_next_scheduled('wpteam_weekly_report_event')) {
        wp_schedule_event(strtotime('Monday 09:00:00'), 'weekly', 'wpteam_weekly_report_event');
    }
}
add_action('wp', 'wpteam_schedule_weekly_report');

Этот код отправит отчет каждое понедельник в 9 утра с актуальными данными сайта.

WooCommerce: как автоматически удалять товары из корзины по атрибутам после оплаты
17.05.2026
Запрет на автоматическую регистрацию пользователей в WordPress с подтверждением email
29.01.2026
Как автоматизировать удаление старых записей WordPress с помощью WP-Cron
15.01.2026
WooCommerce: как автоматически удалять товары из корзины по атрибутам
04.05.2026
Как создать автоматический импорт данных из Excel в WordPress
18.12.2025

Возникли задачи по WP? Вы можете задать свой вопрос на FAQwp.com Либо обратиться к специалистам поддержки.