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

Проблема: нежелательные уведомления по неоплаченным заказам

В стандартной работе WooCommerce отправляет уведомления клиентам и администратору о статусах заказов, в том числе и по заказам с неоплаченным статусом (например, "ожидает оплаты" или "в обработке"). Это может привести к путанице, когда клиент получает письмо о заказе, который еще не оплачен, или администратор получает лишние уведомления.

Как диагностировать проблему

  • Проверьте список отправленных писем в WooCommerce (WooCommerce > Статус > Журнал почты).
  • Убедитесь, что письма о новых заказах приходят даже для заказов со статусом, который подразумевает неоплату.
  • Проверьте, какие хуки вызывают отправку уведомлений по умолчанию, например, woocommerce_order_status_processing_notification и woocommerce_order_status_on-hold_notification.

Пошаговое решение: отключение уведомлений для неоплаченных заказов

Для решения задачи необходимо перехватить стандартную логику отправки писем и отключить их для заказов со статусом, который указывает на неоплату (например, "on-hold", "pending").

1. Определяем статусы, при которых нужно отключать письма

Чаще всего это pending и on-hold. Можно расширять список при необходимости.

2. Отключаем отправку писем через фильтр

WooCommerce позволяет отключать определённые письма с помощью фильтра woocommerce_email_enabled_{email_id}.

function disable_emails_for_unpaid_orders( $enabled, $order ) {
    if ( ! is_a( $order, 'WC_Order' ) ) {
        return $enabled;
    }

    $unpaid_statuses = array( 'pending', 'on-hold' );
    if ( in_array( $order->get_status(), $unpaid_statuses, true ) ) {
        return false; // Отключаем email
    }

    return $enabled;
}
add_filter( 'woocommerce_email_enabled_new_order', 'disable_emails_for_unpaid_orders', 10, 2 );
add_filter( 'woocommerce_email_enabled_customer_processing_order', 'disable_emails_for_unpaid_orders', 10, 2 );
add_filter( 'woocommerce_email_enabled_customer_on_hold_order', 'disable_emails_for_unpaid_orders', 10, 2 );

В этом примере отключаются следующие письма:

  • новый заказ (администратору) — new_order
  • обработка заказа (клиенту) — customer_processing_order
  • ожидает оплаты (клиенту) — customer_on_hold_order

3. Размещение кода

Добавьте код в файл functions.php вашей дочерней темы или в отдельный плагин для кастомных функций.

Проверка результата

  1. Создайте заказ в WooCommerce со статусом pending или on-hold.
  2. Проверьте журнал почты WooCommerce (WooCommerce > Статус > Журнал почты) — письма с указанными статусами не должны отправляться.
  3. Измените статус заказа на processing или completed — письма должны отправляться как обычно.

Частые ошибки и как их исправить

  • Письма все еще отправляются: Возможно, код добавлен в неподходящее место или кэш сайта мешает обновлению. Очистите кэш и убедитесь, что код активен.
  • Функция не получает объект заказа: Проверьте тип параметра $order в фильтре, иногда приходит ID заказа или другой объект.
  • Неправильные ID писем: Используйте правильные email ID из WooCommerce. Чтобы их найти, можно посмотреть исходники плагина в папке woocommerce/includes/emails/.

Практические советы по безопасности и производительности

  • Не используйте отключение писем для заказов со статусами, которые требуют подтверждения — это может привести к потере важных уведомлений.
  • Перед внесением изменений сделайте резервную копию functions.php или используйте дочернюю тему.
  • Тестируйте изменения в тестовой среде, чтобы не нарушить бизнес-процессы.

Сравнение способов отключения уведомлений

МетодПлюсыМинусыПример использования
Фильтры woocommerce_email_enabled_{email_id}Простой, гибкий, не требует отключения всего письмаНужно знать email ID, ограничен стандартными письмамиПриведён в статье код
Отключение писем в настройках WooCommerceПростота настройки без кодаОтключает письма полностью для всех заказовНастройки WooCommerce - Emails
Переопределение классов писемМаксимальная гибкостьСложнее в реализации, требует PHP навыковСоздание собственного класса письма
WooCommerce: автоматическое отключение отправки писем по заказам без оплаты
30.05.2026
WooCommerce: массовое обновление цен товаров через код
24.06.2026
Как создать динамическую таблицу в WordPress с AJAX и методами оптимизации
23.12.2025
Как отключить AJAX в WordPress для решения проблем с конфликтами плагинов
21.03.2026
Как отследить посещаемость сайта на WordPress: лучшие методы и плагины
01.12.2025