Автоматическое отправление 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 с поддержкой мультиязычности
13.11.2025
Как отключить автоматическое отправление писем WooCommerce при создании заказа
24.05.2026
Как отключить Emoji в WordPress для оптимизации сайта
17.01.2026
Как удалить или изменить метаданные продуктов WooCommerce без плагинов
10.07.2026
Как создать свой плагин для WordPress с нуля: пошаговое руководство
04.11.2025