WooCommerce: как автоматически отправлять кастомные сообщения при изменении статуса заказа

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

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

Если вы столкнулись с проблемой, что стандартные письма не покрывают все сценарии коммуникации, то автоматизация отправки кастомных email — оптимальное решение.

Пошаговое решение: автоматическая отправка кастомных писем при изменении статуса заказа

1. Используем хук woocommerce_order_status_changed

Этот хук срабатывает при смене статуса заказа. На его основе можно добавлять свою логику отправки писем.

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

add_action('woocommerce_order_status_changed', 'wpfront_custom_status_email', 10, 4);
function wpfront_custom_status_email($order_id, $old_status, $new_status, $order) {
    // Отправляем письмо только при смене статуса на "on-hold"
    if ($new_status === 'on-hold') {
        $to = $order->get_billing_email();
        $subject = 'Ваш заказ на ожидании оплаты';
        $headers = array('Content-Type: text/html; charset=UTF-8');

        $message = '<p>Здравствуйте, ' . esc_html($order->get_billing_first_name()) . '!</p>';
        $message .= '<p>Ваш заказ #' . $order_id . ' находится на ожидании оплаты.</p>';
        $message .= '<p>Пожалуйста, завершите оплату в ближайшее время.</p>';

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

3. Отправка уведомлений менеджеру

Для отправки уведомления на email менеджера добавим еще один вызов wp_mail:

add_action('woocommerce_order_status_changed', 'wpfront_notify_manager_on_status', 10, 4);
function wpfront_notify_manager_on_status($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') {
        $manager_email = 'manager@example.com';
        $subject = 'Заказ #' . $order_id . ' завершён';
        $message = 'Заказ #' . $order_id . ' был успешно завершён.';
        wp_mail($manager_email, $subject, $message);
    }
}

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

  • Создайте тестовый заказ в WooCommerce.
  • Измените статус заказа на целевой (например, "on-hold" или "completed") вручную в админке.
  • Проверьте входящие письма на почте клиента и менеджера.
  • Для отладки можно временно добавить error_log внутри функции, чтобы убедиться, что хук сработал.

Частые ошибки и как их исправить

  • Письмо не отправляется: проверьте настройки почты на сервере, возможно, wp_mail отключен или требует настройки SMTP.
  • Письмо приходит в спам: настройте SPF/DKIM записи и используйте SMTP-плагин для отправки писем от авторитетного сервера.
  • Хук не срабатывает: убедитесь, что функция подключена в functions.php или плагине, и что при смене статуса вызывается именно woocommerce_order_status_changed.
  • Переменные заказа не доступны: используйте объект $order и методы класса WC_Order, а не глобальные переменные.

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

  • Не отправляйте слишком много писем при массовом обновлении статусов, чтобы избежать блокировок почтового сервера.
  • Используйте очередь отправки писем через WP-Cron или внешние сервисы, если ожидается большой поток заказов.
  • Для кастомных писем оформляйте HTML-контент корректно и избегайте inline-стилей, чтобы письма корректно отображались у получателей.
  • Всегда проверяйте и экранируйте данные, используемые в письмах, чтобы предотвратить XSS и инъекции.
  • Для сложных сценариев рассмотрите использование фильтров WooCommerce Email Classes, чтобы расширять стандартные шаблоны писем.

Сравнение способов отправки кастомных уведомлений

МетодПлюсыМинусыПример
Хук woocommerce_order_status_changedПолный контроль, простота реализацииНужно писать код, требует базовых знаний PHPПример выше
Плагины уведомлений (например, WooCommerce Email Customizer)Удобный UI, шаблоны писемМожет быть ограничен в логике, нагрузка на сайтClearfy Pro - расширение
Внешние сервисы (SendGrid, Mailgun)Надёжная доставка, аналитикаДополнительная настройка, интеграцияSMTP через плагин WP Mail SMTP
Как избежать конфликтов между плагинами WordPress
17.01.2026
Как отключить способ оплаты в WooCommerce при минимальном остатке товара
09.08.2026
Как отключить XML-RPC в WordPress и не сломать удалённые подключения
13.08.2026
WooCommerce: как автоматически изменять ставку НДС при продаже товаров
04.08.2026
Автоматическое удаление неактивных пользователей WordPress
27.03.2026