Диагностика проблемы с уведомлениями в WooCommerce после отмены заказа
В стандартной комплектации WooCommerce продолжает отправлять уведомления, связанные с заказом, даже если он был отменён. Это может приводить к путанице среди клиентов и менеджеров, а также создавать избыточный трафик email-сервера. Например, после отмены заказа могут отправляться уведомления о смене статуса заказа или о его обработке, что не соответствует логике работы магазина.
Чтобы убедиться, что это ваша проблема, проверьте следующие моменты:
- Отмена заказа происходит через стандартный интерфейс WooCommerce или программно?
- Какие письма приходят клиентам после отмены заказа (например, «Ваш заказ обновлен», «Заказ в обработке»)?
- Есть ли в логах плагинов или SMTP-сервера подтверждение отправки таких писем после отмены?
Пошаговое решение: как отключить автоматическую отправку писем после отмены заказа
Решение сводится к тому, чтобы перехватить процесс отправки писем WooCommerce и отключить их при статусе заказа cancelled. Для этого используем хук woocommerce_email_enabled_{$email_id}, который позволяет динамически включать или отключать отправку конкретных писем.
Ниже пример кода, который отключит основные типы писем для отменённых заказов:
add_filter('woocommerce_email_enabled_customer_processing_order', 'disable_emails_on_cancelled_orders', 10, 2);
add_filter('woocommerce_email_enabled_customer_completed_order', 'disable_emails_on_cancelled_orders', 10, 2);
add_filter('woocommerce_email_enabled_customer_on_hold_order', 'disable_emails_on_cancelled_orders', 10, 2);
function disable_emails_on_cancelled_orders($enabled, $order) {
if (! $order instanceof WC_Order) {
return $enabled;
}
if ($order->get_status() === 'cancelled') {
return false; // Отключаем отправку
}
return $enabled;
}Если у вас есть кастомные типы писем или дополнительные уведомления, добавьте соответствующие фильтры, заменив {$email_id} на ID вашего письма, например new_order, customer_invoice и т.д.
Альтернативный способ: отключение всех писем при отмене заказа
Если хотите отключить все письма при статусе cancelled, можно использовать фильтр woocommerce_email_enabled глобально:
add_filter('woocommerce_email_enabled', 'disable_all_emails_on_cancelled_orders', 10, 2);
function disable_all_emails_on_cancelled_orders($enabled, $email) {
$order = $email->object;
if ($order instanceof WC_Order && $order->get_status() === 'cancelled') {
return false;
}
return $enabled;
}Проверка результата после внедрения
Чтобы убедиться, что письма не отправляются после отмены заказа, выполните следующие шаги:
- Создайте тестовый заказ в WooCommerce.
- Отмените заказ через админ-панель.
- Проверьте почтовый ящик, связанный с клиентом и админом, на наличие писем о смене статуса или другие уведомления.
- Проверьте логи почтового сервера или плагина SMTP (если используется) на предмет отправленных сообщений.
Если письма не приходят, решение работает корректно.
Частые ошибки и как их исправить
- Ошибка: Письма продолжают приходить даже после внедрения кода.
Причина: Фильтр применён только к частям писем, а другие уведомления не отключены.
Решение: Добавьте фильтры для всех используемых ID писем или примените глобальный фильтрwoocommerce_email_enabled. - Ошибка: Код добавлен в файл темы, но не работает.
Причина: Код добавлен в неправильное место или тема кеширует файлы.
Решение: Добавьте код в файлfunctions.phpдочерней темы или в специально созданный плагин. Очистите кеш сайта и браузера. - Ошибка: Функция не получает объект заказа.
Причина: В некоторых случаях параметр может быть не объектом WC_Order.
Решение: Добавьте проверку черезinstanceof WC_Orderперед использованием методаget_status().
Практические советы по безопасности и производительности
- Не отключайте письма массово без понимания, какие именно уведомления важны для бизнеса.
- Тестируйте изменения на staging-сайте до внедрения на живом сайте.
- Используйте SMTP-плагины с логированием для удобства диагностики отправки писем.
- Если у вас много кастомных уведомлений, ведите список ID писем и управляйте ими централизованно через фильтры.
- Для оптимизации производительности не добавляйте лишних тяжелых операций в хук фильтра email.
Чек-лист для внедрения отключения писем после отмены заказа в WooCommerce
- Определите, какие письма отправляются после отмены заказа.
- Добавьте фильтры
woocommerce_email_enabled_{$email_id}для соответствующих писем. - Проверьте корректность работы кода, используя
instanceof WC_Order. - Очистите кеш сайта и SMTP-плагина.
- Проведите тестирование с реальным заказом и отменой.
- Оцените влияние на бизнес-процессы (не отключайте важные уведомления).