Автоматическое отправление email по расписанию в WordPress: пошаговое руководство

Часто владельцы сайтов на WordPress сталкиваются с задачей автоматической рассылки писем пользователям или администраторам по расписанию. Это может быть напоминание о событиях, рассылка новостей, уведомления о заказах или результаты опросов. В данной статье разберём, как добавить такую функциональность без использования громоздких плагинов, а также с примерами кода и рекомендациями по популярным плагинам.

Почему стандартные функции WordPress не подходят для точного расписания email

В WordPress есть встроенный механизм WP-Cron, который позволяет запускать задачи по расписанию. Однако WP-Cron запускается только при заходе посетителя на сайт, что не гарантирует точность выполнения задач, особенно для сайтов с низкой посещаемостью.

Чтобы выполнять задачи по расписанию с высокой точностью, рекомендуется настроить системный cron на сервере, который будет запускать wp-cron.php с нужной периодичностью. В противном случае ваши письма могут уходить не вовремя или с задержкой.

Кроме того, важно грамотно организовать логику отправки email внутри callback-функций, чтобы избежать дублирования и ошибок.

Пример добавления кастомного планировщика для отправки email

Для начала создадим функцию, которая будет отправлять письма, и зарегистрируем для неё расписание через WP-Cron.

function wpweb_send_scheduled_email() {
    $to = 'user@example.com';
    $subject = 'Автоматическое письмо от WPWeb';
    $message = 'Это тестовое письмо, отправленное по расписанию.';
    $headers = array('Content-Type: text/html; charset=UTF-8');

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

// Регистрация события
if (!wp_next_scheduled('wpweb_hourly_email_event')) {
    wp_schedule_event(time(), 'hourly', 'wpweb_hourly_email_event');
}

// Хук для выполнения функции
add_action('wpweb_hourly_email_event', 'wpweb_send_scheduled_email');

В этом коде мы создали задачу, которая будет запускаться ежечасно и отправлять письмо на указанный адрес. Обратите внимание, что для реального сайта адрес лучше брать из настроек или базы данных.

Как настроить системный cron для надежного запуска wp-cron.php

Чтобы cron запускался независимо от посещаемости сайта, нужно отключить WP-Cron от обычного запуска и добавить вызов wp-cron.php в системный cron.

# Отключаем WP-Cron в wp-config.php
define('DISABLE_WP_CRON', true);

Далее добавляем в crontab сервера:

*/15 * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Это запустит задачи WP-Cron каждые 15 минут. Можно настроить и чаще, если необходимо.

Использование плагинов для автоматической рассылки email по расписанию

Если хочется использовать готовые решения, обратите внимание на следующие плагины:

  • WP Crontrol – позволяет управлять и отслеживать задачи WP-Cron через админку.
  • WP Mail SMTP – гарантирует надежную отправку писем через SMTP-серверы.
  • Newsletter – полноценный плагин для email-рассылок с расписанием и сегментацией.

Для интеграции с WPShop можно рассмотреть плагин WPRemark, который позволяет автоматически модераировать и отправлять уведомления, что удобно для сайтов с комментариями и отзывами.

Практические советы по отправке email в WordPress по расписанию

Чтобы избежать проблем с отправкой:

  • Используйте надежный SMTP-сервер или сервисы типа SendGrid, Mailgun, чтобы письма не попадали в спам.
  • Добавьте логирование отправленных писем – это поможет отследить ошибки.
  • Используйте nonce и проверку прав в функциях, если планируете запускать отправку из фронтенда.
  • Оптимизируйте тело письма, чтобы оно было информативным и лаконичным.

Пример расширения функции отправки с логированием

function wpweb_send_scheduled_email_with_log() {
    $to = get_option('admin_email');
    $subject = 'Ежечасное уведомление WPWeb';
    $message = 'Привет! Это письмо отправлено автоматически по расписанию.';
    $headers = array('Content-Type: text/html; charset=UTF-8');

    $sent = wp_mail($to, $subject, $message, $headers);

    if ($sent) {
        error_log('WPWeb: Email успешно отправлен в ' . current_time('mysql'));
    } else {
        error_log('WPWeb: Ошибка при отправке email в ' . current_time('mysql'));
    }
}

add_action('wpweb_hourly_email_event', 'wpweb_send_scheduled_email_with_log');

Этот код отправляет письмо и записывает результат в лог ошибок PHP, что удобно для мониторинга.

Оптимизация базы данных WordPress под реальные нагрузки на сайте
17.11.2025
Как удалить или изменить метаданные продуктов WooCommerce без плагинов
02.06.2026
Как удалить пустые термины таксономии в WordPress для оптимизации базы данных
06.04.2026
Как отключить автоматическое отправление писем WooCommerce при создании заказа
24.05.2026
Как добавить автоматическое удаление старых комментариев в WordPress
09.04.2026