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

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

По умолчанию WooCommerce отправляет уведомления клиентам и администратору о различных изменениях статуса заказа, в том числе при создании нового заказа. Если заказ создан, но не оплачен, например, при выборе способа оплаты с отложенной оплатой или при ошибках в платежных системах, клиент получает письма, которые могут вводить в заблуждение.

Это приводит к повышенной нагрузке на службу поддержки и ухудшению пользовательского опыта. Поэтому задача — отключить автоматическую отправку писем по заказам, которые так и не были оплачены.

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

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

Основные письма WooCommerce, связанные с заказом:

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

Нам нужно отключить отправку писем customer_processing_order и customer_on_hold_order для неоплаченных заказов.

2. Реализуем фильтр для отключения писем по статусам неоплаченных заказов

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

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);

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

    // Проверяем статус оплаты
    if ('pending' === $order->get_status() || 'failed' === $order->get_status()) {
        // Отключаем отправку письма
        return false;
    }

    return $enabled;
}

Этот код отключает отправку писем, если статус заказа pending (ожидание оплаты) или failed (отказ).

3. Дополнительно: отключение письма new_order администратору для неоплаченных заказов

Если нужно, чтобы админ не получал уведомления о неоплаченных заказах, добавьте:

add_filter('woocommerce_email_enabled_new_order', 'disable_admin_email_for_unpaid_orders', 10, 2);

function disable_admin_email_for_unpaid_orders($enabled, $order) {
    if (!$order instanceof WC_Order) {
        return $enabled;
    }

    if ('pending' === $order->get_status() || 'failed' === $order->get_status()) {
        return false;
    }

    return $enabled;
}

Проверка результата после внедрения

  • Создайте тестовый заказ со статусом pending (например, выбрав оплату при получении без фактической оплаты).
  • Проверьте, что письма customer_processing_order и customer_on_hold_order не отправляются на почту клиента.
  • Если применяли отключение для new_order, убедитесь, что администратор тоже не получает письмо.
  • Для проверки можно включить режим отладки WooCommerce и просмотреть логи отправки писем (WooCommerce > Статус > Логи).

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

  1. Письма всё равно отправляются. Возможно, код добавлен в неподходящее место или тема/плагин переопределяет фильтры. Убедитесь, что код выполняется (например, добавьте error_log внутри функции).
  2. Неверный статус заказа. Статусы могут отличаться, если есть кастомные платежные шлюзы. Проверьте текущий статус заказа через $order->get_status().
  3. Конфликты с плагинами для рассылок. Если используются сторонние SMTP или сервисы рассылок, они могут игнорировать стандартные фильтры WooCommerce. В этом случае настройте фильтрацию на уровне плагина.
  4. Функция не получает объект WC_Order. Проверьте, что в фильтр передаётся правильный объект, иначе добавьте проверку и возвращайте исходное значение.

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

  • Добавляйте код через дочернюю тему или собственный плагин, чтобы избежать потери при обновлении.
  • Используйте кэширование и минимизируйте вызовы функций внутри фильтров для ускорения обработки.
  • Тестируйте изменения на staging-сайте перед применением на продакшене.
  • Для расширенной настройки уведомлений используйте плагин Clearfy Pro, позволяющий гибко управлять уведомлениями и оптимизировать сайт.

Сравнение вариантов отключения писем WooCommerce

МетодПлюсыМинусы
Фильтры хуков (как в статье)Просто, быстро, не требует сторонних плагиновОграничено стандартными статусами, требует знаний PHP
Отключение писем через настройки WooCommerceПростота настройки без кодаНе позволяет селективно отключать письма по статусу
Плагины управления email (например, Clearfy Pro)Гибкая настройка, удобный интерфейс, дополнительные функцииПлатные решения, дополнительная нагрузка
Как создать автоматическую резервную копию в WordPress без подключения плагинов
25.02.2026
WooCommerce: автоматическое отключение отправки писем по заказам без оплаты
01.05.2026
Автоматическое удаление старых шаблонов в WordPress
11.04.2026
Как избежать проблем с подключением стилей и скриптов в WordPress
27.01.2026
Как успешно оптимизировать WordPress для поисковых систем: практические советы
14.11.2025