WooCommerce: как автоматически отключить отправку писем по заказам без оплаты

Диагностика проблемы: почему 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, возможны ошибки при неправильном использовании
Как создать список задач с отметкой выполнено в WordPress с примером кода
04.04.2026
Как отладить проблемы со вставкой кода в WordPress
24.11.2025
Автоматическое удаление неоплаченных заказов WooCommerce старше 30 дней
07.07.2026
WooCommerce: как автоматически отключить отправку писем по заказам без оплаты
21.06.2026
WooCommerce: как автоматически изменить статус заказа после оплаты через платежные системы
24.04.2026