Диагностика проблемы: письма не отправляются при смене статуса заказа
Часто в 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 вашей дочерней темы или в кастомный плагин. Это позволит избежать потери изменений при обновлении темы.
Проверка результата после внедрения
Чтобы проверить, что код работает:
- Создайте тестовый заказ в WooCommerce или используйте существующий.
- В админке измените статус заказа на
completed. - Проверьте почтовый ящик, указанный в заказе — письмо с подтверждением должно прийти.
- Если письмо не пришло, проверьте логи ошибок, а также включена ли отправка почты на сервере.
Частые ошибки и как их исправить
- Письма не отправляются вообще: проверьте работу функции
wp_mail(), настройте SMTP через WP Mail SMTP или аналогичный плагин. - Код не запускается: убедитесь, что хук прописан правильно и код добавлен в правильное место.
- Дублирование писем: если у вас есть другие плагины или кастомный код, который тоже отправляет письма по статусам, отключите их, чтобы избежать повторной отправки.
- Неверный объект заказа: в хуке 4-й параметр — объект заказа, убедитесь, что используете именно его для передачи в триггер.
Практические советы по безопасности и производительности
- Не используйте отправку писем в хуках, которые вызываются очень часто без условий — это может замедлить сайт.
- Кэшируйте результаты, если вам нужно получать дополнительные данные о заказе для письма.
- Для сложных сценариев используйте очередь задач (например, с помощью Action Scheduler), чтобы не блокировать выполнение запроса.
- Всегда тестируйте отправку почты на тестовом сервере перед размещением на продакшене.
Таблица сравнения методов отправки писем при смене статуса заказа
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Стандартная отправка WooCommerce | Письма отправляются автоматически при смене статуса | Простота, встроено в WooCommerce | Может не работать при конфликтах с плагинами или почтой |
Использование хука woocommerce_order_status_changed | Ручной вызов отправки письма через код | Гибкость, можно добавить кастомные условия | Требует навыков программирования, возможны дубли |
| Плагины для управления письмами | Плагины с расширенными возможностями управления уведомлениями | Удобство, дополнительные функции | Могут замедлять сайт, возможны конфликты |