WooCommerce: настройка отложенного отправления писем

Диагностика проблемы с отправкой писем в WooCommerce

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

Как реализовать отложенную отправку писем в WooCommerce

Использование стандартных хуков для отложенного выполнения

WooCommerce использует класс WC_Email для отправки писем. Чтобы отложить отправку, можно перехватить событие и поставить отправку письма в очередь с помощью WP-Cron. Пример кода, который помещает письмо в очередь с задержкой 10 минут:

add_action('woocommerce_email', 'wpmanager_defer_woocommerce_email', 10, 3);
function wpmanager_defer_woocommerce_email($email_class, $email_id, $order) {
    if ( ! $order instanceof WC_Order ) {
        return;
    }

    // Отменяем стандартную отправку
    remove_action('woocommerce_order_status_pending_to_processing_notification', array($email_class->emails['WC_Email_Customer_Processing_Order'], 'trigger'), 10);

    // Запускаем отложенную отправку через WP-Cron
    wp_schedule_single_event(time() + 600, 'wpmanager_send_deferred_email', array($order->get_id(), $email_id));
}

add_action('wpmanager_send_deferred_email', 'wpmanager_process_deferred_email', 10, 2);
function wpmanager_process_deferred_email($order_id, $email_id) {
    $order = wc_get_order($order_id);
    if (!$order) return;

    $mailer = WC()->mailer();
    $emails = $mailer->get_emails();

    if (isset($emails[$email_id])) {
        $emails[$email_id]->trigger($order_id);
    }
}

Этот код отключает стандартное мгновенное уведомление о переходе заказа в статус «обработка» и ставит отправку письма в очередь с задержкой 10 минут.

Настройка WP-Cron для надежной работы

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

  • В wp-config.php добавить: define('DISABLE_WP_CRON', true);
  • В панели управления хостингом или через SSH добавить задание:
* * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Замена https://example.com на адрес вашего сайта.

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

  • Создайте тестовый заказ в WooCommerce и переведите его в нужный статус, например, «обработка».
  • Проверьте, что письмо не пришло мгновенно, а через 10 минут.
  • Для отладки можно добавить логирование, например, в файл wp-content/debug.log:
if (defined('WP_DEBUG') && WP_DEBUG) {
    error_log('Отложенное письмо отправлено для заказа ' . $order_id);
}

Частые ошибки при реализации отложенной отправки писем

  • WP-Cron не запускается: если на сайте мало трафика или отключён WP-Cron, запланированные задачи не выполняются. Решение — настроить системный cron.
  • Удаление событий WP-Cron: неаккуратная работа с хуками может привести к удалению или дублированию задач.
  • Неправильный вызов метода trigger: обязательно передайте ID заказа, иначе письмо не отправится.
  • Не учтены разные типы писем: код выше ориентирован на конкретный email, для отправки других писем нужно адаптировать логику.

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

  • Избегайте слишком большого количества отложенных задач — это может замедлить сайт.
  • Логируйте события отправки писем, чтобы отслеживать сбои.
  • Используйте SMTP-плагины (например, WP Mail SMTP) для улучшения доставки писем.
  • Ограничьте права на выполнение WP-Cron для безопасности.

Сравнение способов реализации отложенной отправки писем

МетодПлюсыМинусыРекомендации
Стандартный WP-CronПростота внедрения, без установки новых сервисовЗависимость от трафика, возможные задержкиПодходит для сайтов с хорошей посещаемостью
Системный cronНадёжность и своевременность выполнения задачТребуется доступ к серверу или хостинг с поддержкой cronЛучший выбор для высоконагруженных сайтов
Плагины отложенной отправки (например, WP Offload SES)Готовые решения с расширенными настройкамиДополнительная нагрузка и возможные расходыДля сложных проектов с большим объёмом писем

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WooCommerce: автоматическое изменение цен товаров с помощью хуков
31.05.2026
Как вывести способ доставки в корзине и на странице оформления заказа в WooCommerce
13.08.2026
Автоматическое управление файлом robots.txt в WordPress: настройка и примеры кода
04.03.2026
WooCommerce: автоматическое изменение ставок доставки по регионам
06.08.2026
Автоматическое изменение цен в WooCommerce по условиям: практическое руководство
20.04.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее