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
20.12.2025
Как отключить автоматические обновления в WordPress
13.04.2026
Как автоматически отключить кнопку «Добавить в корзину» в WooCommerce при отсутствии товара
24.04.2026
WooCommerce: как автоматически изменять цену товара при изменении количества
19.06.2026
Автоматическое отключение внешних embed-контентов в WordPress для ускорения сайта
19.03.2026