Проблема: нежелательная рассылка писем для неоплаченных заказов
В стандартной конфигурации WooCommerce отправляет уведомления клиентам и администраторам по различным событиям заказа, включая создание нового заказа. Однако, если заказ не оплачен, часто нет смысла отправлять уведомления, например, письма с подтверждением или напоминанием. Это может привести к путанице у клиентов и лишней нагрузке на почтовый сервер.
Диагностика проблемы
Чтобы определить, что WooCommerce отправляет письма по неоплаченным заказам, выполните следующие шаги:
- Создайте тестовый заказ с методом оплаты, который не подтверждается автоматически (например, "Оплата при доставке" или "Банковский перевод").
- Отслеживайте, приходят ли клиенту письма с подтверждением или напоминанием.
- Проверьте логи почты WordPress (можно использовать плагин WP Mail Logging), чтобы увидеть, какие письма отправляются и при каких статусах заказов.
Если вы видите отправку писем по заказам со статусом pending или on-hold, значит нужно внедрять фильтрацию.
Пошаговое решение: отключение писем по неоплаченным заказам через код
Оптимальный способ — использовать фильтр WooCommerce woocommerce_email_enabled_<email_id>, чтобы отключать отправку писем для заказов с неоплаченным статусом.
Рассмотрим пример для отключения писем, связанных с заказом, если статус заказа pending или failed (т.е. заказ создан, но оплата не прошла):
add_filter('woocommerce_email_enabled_customer_processing_order', 'disable_emails_for_unpaid_orders', 10, 2);
add_filter('woocommerce_email_enabled_customer_completed_order', 'disable_emails_for_unpaid_orders', 10, 2);
function disable_emails_for_unpaid_orders($enabled, $order) {
if (!is_a($order, 'WC_Order')) {
return $enabled;
}
$status = $order->get_status();
// Отключаем письма для заказов в статусах pending и failed
if (in_array($status, ['pending', 'failed'])) {
return false;
}
return $enabled;
}Здесь мы отключаем отправку писем "Обработка заказа" и "Завершенный заказ" для неоплаченных заказов. Аналогично можно добавить фильтры для других типов писем, если нужно.
Как найти ID письма (email_id) для фильтра
Типы писем в WooCommerce имеют ID, например:
customer_processing_order— отправляется, когда заказ переходит в статус "в обработке".customer_completed_order— при переходе в статус "завершен".new_order— уведомление администратору о новом заказе.
Для полного отключения писем на неоплаченные заказы добавьте фильтры для всех нужных email ID.
Проверка результата после внедрения
- Создайте новый заказ с неоплаченным статусом (например, "Ожидание оплаты").
- Убедитесь, что клиент не получает писем "Обработка заказа" или "Завершенный заказ".
- Измените статус заказа на "в обработке" или "завершен" (т.е. оплаченный заказ). Проверьте, что письма отправляются корректно.
- Используйте лог почты для контроля отправленных писем.
Частые ошибки и как их исправить
- Ошибка: Письма продолжают отправляться по неоплаченным заказам.
Причина: Фильтр применён не ко всем email ID, которые отвечают за отправку писем.
Решение: Добавьте аналогичные фильтры для всех типов писем, которые хотите отключить. - Ошибка: Письма не отправляются вообще.
Причина: Логика фильтра не учитывает правильные статусы или типы писем.
Решение: Проверьте, что проверка статуса заказов и email ID корректна, используйтеerror_log()для отладки. - Ошибка: Функция не вызывается.
Причина: Код добавлен не в правильное место или тема/плагин переопределяет поведение.
Решение: Добавьте код в файлfunctions.phpдочерней темы или в отдельный плагин, отключите кэширование.
Практические советы по безопасности и производительности
- Код для фильтра не должен выполнять тяжелые операции — только простую проверку статуса.
- Всегда тестируйте изменения на тестовом сайте, чтобы избежать сбоев в рассылке.
- Используйте кеширование и минимизируйте количество хуков, чтобы не замедлять сайт.
- Для масштабных проектов рассмотрите использование специализированных плагинов для контроля email-рассылок, например Clearfy Pro для оптимизации и управления уведомлениями.
Сравнение способов отключения писем по неоплаченным заказам
| Метод | Преимущества | Недостатки |
|---|---|---|
| Код на хуках (как в статье) | Легко кастомизировать, не требует сторонних плагинов, полный контроль | Необходим опыт, возможны ошибки при некорректном коде |
| Плагины управления email | Простота настройки, графический интерфейс, дополнительные функции | Зависимость от стороннего кода, возможные конфликты, нагрузка на сайт |
| Полное отключение email WooCommerce | Минимальная нагрузка, быстро | Потеря всех уведомлений, не подходит для большинства сайтов |