WooCommerce: автоматическое отправление писем о статусах заказов

Диагностика задачи: зачем и когда нужно автоматизировать уведомления

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

Основные вопросы:

  • Отправляются ли письма при всех изменениях статусов?
  • Как добавить отправку письма по кастомному статусу?
  • Как изменить содержимое писем или добавить новые шаблоны?

Как проверить текущую отправку писем в WooCommerce

Для начала убедитесь, что стандартные уведомления работают:

  1. Перейдите в WooCommerce > Настройки > Email.
  2. Проверьте, что нужные уведомления включены (например, «Новый заказ», «Заказ выполнен» и т.д.).
  3. Для теста измените статус заказа вручную в админке и посмотрите, придёт ли письмо.

Если письма не отправляются, возможно, проблема в настройках SMTP, конфликте плагинов или теме.

Пошаговое решение: добавляем автоматическую отправку письма при смене статуса заказа

Рассмотрим пример, как отправлять кастомное письмо покупателю при переходе заказа в статус processing (обработка) с использованием стандартных возможностей WooCommerce и собственного кода.

1. Создаём хук для отправки письма при смене статуса

add_action('woocommerce_order_status_changed', 'send_custom_email_on_status_change', 10, 4);
function send_custom_email_on_status_change($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'processing') {
        // Получаем объект WC_Emails
        $mailer = WC()->mailer();
        // Загружаем шаблон письма
        $mails = $mailer->get_emails();
        if (!empty($mails['WC_Email_Customer_Processing_Order'])) {
            $mails['WC_Email_Customer_Processing_Order']->trigger($order_id);
        }
    }
}

Этот код добавляем в functions.php вашей темы или в кастомный плагин.

2. Как создать своё письмо для кастомного статуса

Если у вас есть собственный статус, например awaiting_payment, и вы хотите отправить письмо, нужно зарегистрировать новый класс письма и добавить его в систему WooCommerce.

Минимальный пример регистрации письма:

add_filter('woocommerce_email_classes', 'add_custom_awaiting_payment_email');
function add_custom_awaiting_payment_email($emails) {
    require_once 'class-wc-email-awaiting-payment.php'; // Ваш класс письма
    $emails['WC_Email_Awaiting_Payment'] = new WC_Email_Awaiting_Payment();
    return $emails;
}

add_action('woocommerce_order_status_awaiting_payment', 'trigger_awaiting_payment_email');
function trigger_awaiting_payment_email($order_id) {
    $mailer = WC()->mailer();
    $emails = $mailer->get_emails();
    if (!empty($emails['WC_Email_Awaiting_Payment'])) {
        $emails['WC_Email_Awaiting_Payment']->trigger($order_id);
    }
}

Для полноценного класса письма нужно унаследовать WC_Email и определить шаблоны, темы, заголовки и тело письма. Документация WooCommerce содержит подробности по этому вопросу.

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

Чтобы убедиться, что письма отправляются корректно:

  • Создайте тестовый заказ в WooCommerce.
  • Измените статус заказа вручную или программно на нужный (например, processing).
  • Проверьте, что письмо пришло на email покупателя.
  • Если письма не приходят, включите логирование почты с помощью плагина WP Mail Logging или аналогичного.

Частые ошибки при автоматической отправке писем

  • Письма не отправляются вовсе: Причина часто в неправильных настройках SMTP сервера, конфликте плагинов или проблемах с хостингом. Проверяйте логи почты и используйте SMTP-плагин (например, WP Mail SMTP).
  • Письмо отправляется несколько раз: Возможно, хук срабатывает несколько раз из-за неправильного приоритетa или вызова trigger в цикле.
  • Письмо приходит, но пустое или с ошибками шаблона: Проверьте правильность путей к шаблонам и корректность данных в объекте $order.
  • Кастомный статус не отправляет письмо: Убедитесь, что статус зарегистрирован корректно и добавлен в список email-классов WooCommerce.

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

  • Не отправляйте письма напрямую в хуках с высокой нагрузкой; используйте очередь или отложенный запуск через WP-Cron.
  • Избегайте отправки писем при каждом обновлении, если статус не изменился — проверяйте старый и новый статус.
  • При кастомизации писем используйте переводы и шаблоны, чтобы не ломать совместимость при обновлениях WooCommerce.
  • Регулярно очищайте логи отправленных писем и следите за нагрузкой на SMTP-сервер.

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

ВариантПлюсыМинусыКогда использовать
Стандартные уведомления WooCommerceПростота, стабильность, нет кодаМало гибкости, ограниченное число статусовЕсли хватает базового функционала
Добавление хуков в functions.phpГибкость, быстрое внедрениеТребуется знание PHP, возможность конфликтовДля точечных кастомизаций
Создание собственного класса письмаМаксимальная кастомизацияСложность, поддержка, требует знанийЕсли нужен уникальный email под нестандартные статусы
Плагины для расширения emailУдобство, готовые решенияЗависимость от стороннего кода, возможные конфликтыДля быстрого внедрения без кода
Автоматическое удаление неактивных пользователей WordPress
25.01.2026
Как работать с transient API в WordPress для эффективного кэширования
03.01.2026
WooCommerce: автоматическое сохранение и удаление заказов через WP-Cron
09.06.2026
WooCommerce: автоматическое удаление заказов при отсутствии оплаты спустя 48 часов
20.06.2026
Как сделать автоматический редирект в WordPress по условиям
04.03.2026