Диагностика проблемы: почему WooCommerce отправляет письма по неоплаченным заказам
По умолчанию WooCommerce отправляет уведомления на все изменения статуса заказа, включая создание новых заказов со статусом pending или on-hold. Это может привести к рассылке писем клиентам, которые еще не оплатили заказ, что вызывает путаницу и лишнюю нагрузку на службу поддержки.
Для диагностики проблемы проверьте следующие моменты:
- В разделе WooCommerce → Настройки → Email активированы ли уведомления для статусов, связанных с неоплаченными заказами (например, Новый заказ, Ожидает оплаты).
- Посмотрите логи отправленных писем в плагинах для SMTP или почтовых сервисах, чтобы увидеть, какие уведомления уходят клиентам.
- Проверьте, не добавлены ли кастомные хуки или плагины, которые дублируют отправку писем.
Пошаговое решение: отключение отправки писем для неоплаченных заказов
1. Отключение уведомлений WooCommerce через фильтры
Самый надежный способ — использовать фильтр woocommerce_email_enabled_{email_id}, чтобы отключить отправку определенных писем, если статус заказа — неоплачен.
Добавьте следующий код в functions.php вашей темы или в плагин для кастомных функций:
add_filter('woocommerce_email_enabled_new_order', 'disable_new_order_email_for_unpaid_orders', 10, 2);
function disable_new_order_email_for_unpaid_orders($enabled, $order) {
if (! $order instanceof WC_Order) {
return $enabled;
}
// Проверяем статус заказа
if (in_array($order->get_status(), array('pending', 'failed', 'on-hold'))) {
return false; // Отключаем отправку
}
return $enabled;
}Этот код отключит отправку письма "Новый заказ" для заказов в статусах pending, failed и on-hold.
2. Отключение других писем для неоплаченных заказов
Аналогично можно отключить и другие типы писем, например, уведомления клиентам:
add_filter('woocommerce_email_enabled_customer_on_hold_order', 'disable_customer_on_hold_email_for_unpaid_orders', 10, 2);
function disable_customer_on_hold_email_for_unpaid_orders($enabled, $order) {
if (! $order instanceof WC_Order) {
return $enabled;
}
if (in_array($order->get_status(), array('pending', 'failed'))) {
return false;
}
return $enabled;
}Обратите внимание, что customer_on_hold_order — это письмо клиенту о статусе on-hold. Вы можете адаптировать фильтр под свои потребности.
Проверка результата после внедрения
Чтобы убедиться, что письма не отправляются:
- Создайте тестовый заказ в статусе
pending(ожидает оплаты) через фронтенд магазина. - Проверьте почту, указанную в заказе, и логи SMTP (если настроены) — письмо о новом заказе и уведомления клиенту не должны прийти.
- Измените статус заказа на
processingилиcompletedи проверьте, что письма для этих статусов отправляются корректно.
Частые ошибки и как их исправить
- Письма продолжают приходить после добавления фильтра.
Причина: возможно, код добавлен не в правильное место или кеш не обновлен. Проверьте, что код выполняется, например, добавивerror_log(). Также очистите кеш сайта и браузера. - Использование неправильных ID писем.
Проверьте, что в фильтрах используется точный идентификатор email из WooCommerce (woocommerce_email_enabled_{email_id}). Список доступных email ID можно найти в классеWC_Emailили в настройках WooCommerce. - Проблемы с типом объекта
$order.
Убедитесь, что проверяете, что$order— экземплярWC_Order, иначе фильтр может вызвать ошибки.
Практические советы по безопасности и производительности
- Не используйте отключение писем через отключение всей email-системы — это может повлиять на другие уведомления.
- Добавляйте кастомный код в дочернюю тему или плагин, чтобы не потерять изменения при обновлении.
- Для больших магазинов с высоким трафиком используйте SMTP-плагины с логированием для контроля отправки писем и отладки.
- Регулярно тестируйте автоматические уведомления после обновления WooCommerce, так как структура хуков и email ID может измениться.
Сравнение подходов: отключение писем через настройки, плагины и код
| Метод | Плюсы | Минусы |
|---|---|---|
| Отключение через настройки WooCommerce Email | Простота, не требует кода | Отключает все письма для статуса, нет гибкости |
| Плагины для управления письмами (например, Email Customizer) | Удобный интерфейс, гибкие настройки | Может влиять на производительность, требует поддержки |
| Кастомный код через фильтры | Максимальная гибкость, точечное управление | Требует знаний PHP, возможны ошибки при неправильном использовании |