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

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

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

Типичные признаки проблемы:

  • Письма с информацией о новом заказе приходят сразу после оформления, даже если оплата не прошла.
  • Администратор получает уведомления о заказах в статусе «Ожидает оплаты».
  • Клиенты получают письма с подтверждением заказа, но затем не завершают оплату.

Пошаговое решение: отключение отправки писем для заказов со статусом «Ожидает оплаты»

1. Выявление хуков, отвечающих за отправку писем

WooCommerce отправляет письма через класс WC_Emails. Для каждого статуса заказа есть свои email уведомления, например, WC_Email_New_Order и WC_Email_Customer_Processing_Order.

Нужно перехватить отправку и отменить ее, если статус заказа - pending (ожидает оплаты).

2. Добавление фильтра в functions.php или в кастомный плагин

Пример кода для отключения отправки писем по неоплаченным заказам:

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

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

    // Статус 'pending' означает, что заказ создан, но оплата не прошла
    if ($order->get_status() === 'pending') {
        return false;
    }
    return $enabled;
}

Этот код отключит отправку двух основных писем — для администратора и для клиента — если заказ еще не оплачен.

3. Расширение решения для других email уведомлений

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

add_filter('woocommerce_email_enabled_customer_completed_order', 'disable_emails_for_unpaid_orders', 10, 2);
// и так далее, по аналогии

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

Для проверки:

  1. Создайте тестовый заказ через сайт, выбрав вариант оплаты, который не завершаете (например, банковский перевод без подтверждения).
  2. Проверьте, что письма о новом заказе и обработке не отправляются.
  3. Завершите оплату вручную, изменив статус заказа в админке на processing, и убедитесь, что письма теперь приходят.

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

  • Код не срабатывает для всех типов писем: Некоторые письма имеют другие фильтры, например woocommerce_email_enabled_customer_on_hold_order. Нужно убедиться, что добавлены все нужные фильтры.
  • Код помещен в неподходящее место: Размещайте код в functions.php дочерней темы или в пользовательском плагине, чтобы избежать потери при обновлениях.
  • Используются сторонние плагины для email: Они могут игнорировать стандартные фильтры WooCommerce. В таком случае нужно смотреть документацию плагина.

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

  • Отслеживайте логи почты, чтобы убедиться, что уведомления не пропадают для важных статусов.
  • Используйте отдельный SMTP-сервер или сервис для отправки писем, чтобы повысить надежность доставки.
  • Храните кастомный код в отдельном плагине, чтобы легче обновлять и контролировать изменения.

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

МетодПреимуществаНедостатки
Фильтры WooCommerce (как в статье)Простой, не требует сторонних плагинов, гибкийТребует базовых знаний PHP, нужно добавить для каждого email
Плагины для управления email (например, WP Mail SMTP)Интерфейс для настройки, логирование писемМогут не поддерживать фильтрацию по статусу заказа
Отключение email в настройках WooCommerceОчень просто, без кодаОтключает все письма, нет гибкости
Как установить лимит поисковых запросов в WordPress
04.03.2026
WooCommerce: отмена или возврат товара с помощью хуков и статусов заказов
18.04.2026
Как создать собственный тип записей (Custom Post Type) в WordPress
09.02.2026
Как создать и использовать AJAX в WordPress для динамического обновления контента
02.01.2026
WooCommerce: автоматическое удаление заказов по истечении срока
04.06.2026