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

Диагностика проблемы: письма не отправляются при смене статуса заказа

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

Для диагностики проблемы выполните следующие шаги:

  • Проверьте, включены ли уведомления в WooCommerce: WooCommerce → Настройки → Электронные письма.
  • Убедитесь, что почтовая функция WordPress работает корректно, отправив тестовое письмо через плагин WP Mail SMTP или аналогичный.
  • Отключите сторонние плагины поочерёдно, чтобы исключить конфликт.
  • Посмотрите логи сервера на предмет ошибок при отправке почты.

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

Использование хука woocommerce_order_status_changed

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

Пример кода, который отправляет письмо клиенту при смене статуса на «completed» (завершён):

add_action('woocommerce_order_status_changed', 'custom_send_email_on_status_change', 10, 4);
function custom_send_email_on_status_change($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') {
        // Получаем объект почты WooCommerce
        $mailer = WC()->mailer();
        
        // Получаем письмо "Завершённый заказ"
        $email = $mailer->get_emails()['WC_Email_Customer_Completed_Order'];
        if ($email) {
            $email->trigger($order_id);
        }
    }
}

Где разместить код

Добавьте этот код в файл functions.php вашей дочерней темы или в кастомный плагин. Это позволит избежать потери изменений при обновлении темы.

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

Чтобы проверить, что код работает:

  1. Создайте тестовый заказ в WooCommerce или используйте существующий.
  2. В админке измените статус заказа на completed.
  3. Проверьте почтовый ящик, указанный в заказе — письмо с подтверждением должно прийти.
  4. Если письмо не пришло, проверьте логи ошибок, а также включена ли отправка почты на сервере.

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

  • Письма не отправляются вообще: проверьте работу функции wp_mail(), настройте SMTP через WP Mail SMTP или аналогичный плагин.
  • Код не запускается: убедитесь, что хук прописан правильно и код добавлен в правильное место.
  • Дублирование писем: если у вас есть другие плагины или кастомный код, который тоже отправляет письма по статусам, отключите их, чтобы избежать повторной отправки.
  • Неверный объект заказа: в хуке 4-й параметр — объект заказа, убедитесь, что используете именно его для передачи в триггер.

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

  • Не используйте отправку писем в хуках, которые вызываются очень часто без условий — это может замедлить сайт.
  • Кэшируйте результаты, если вам нужно получать дополнительные данные о заказе для письма.
  • Для сложных сценариев используйте очередь задач (например, с помощью Action Scheduler), чтобы не блокировать выполнение запроса.
  • Всегда тестируйте отправку почты на тестовом сервере перед размещением на продакшене.

Таблица сравнения методов отправки писем при смене статуса заказа

МетодОписаниеПлюсыМинусы
Стандартная отправка WooCommerceПисьма отправляются автоматически при смене статусаПростота, встроено в WooCommerceМожет не работать при конфликтах с плагинами или почтой
Использование хука woocommerce_order_status_changedРучной вызов отправки письма через кодГибкость, можно добавить кастомные условияТребует навыков программирования, возможны дубли
Плагины для управления письмамиПлагины с расширенными возможностями управления уведомлениямиУдобство, дополнительные функцииМогут замедлять сайт, возможны конфликты
WooCommerce: решение проблем с неотправкой писем подтверждения при изменении статуса заказа
21.05.2026
Как создать динамический виджет в WordPress
15.11.2025
Как отключить Emoji в WordPress: эффективные методы
22.12.2025
Как автоматизировать управление ролями и правами в WordPress с примерами кода
23.03.2026
WooCommerce: как удалить зависшие вариации товаров через базу данных и код
13.05.2026