wpcompany.ru wordpress WPCompany

Как отключить отправку писем о новом заказе в WooCommerce для отдельных статусов

В WooCommerce уведомления о заказе часто настраивают слишком грубо: либо письма уходят на каждый переход статуса, либо их отключают целиком. На практике чаще нужна точечная схема — например, не отправлять письмо менеджеру при статусе pending, но оставить уведомление для processing и completed. Это особенно полезно, если заказы приходят из нескольких каналов, есть ручная проверка оплаты или отдельная CRM уже дублирует часть сообщений.

Когда это реально нужно

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

Диагностика проблемы: какое письмо уходит и почему

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

Что проверить в админке

  • Откройте WooCommerce → Настройки → Письма.
  • Найдите уведомление Новый заказ и посмотрите, включено ли оно.
  • Проверьте, не дублирует ли отправку сторонний SMTP-плагин, CRM-интеграция или модуль уведомлений.
  • Посмотрите, какой статус получает заказ сразу после оформления: pending, on-hold, processing или другой.

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

Способы решения: плагин, код, компромисс

Для точечной настройки есть три рабочих подхода. Самый надежный — кодом через фильтр WooCommerce. Плагин подходит, если не хочется трогать тему или отдельный мини-плагин. Компромиссный вариант — отключить письмо целиком и заменить его внешней автоматизацией, но это уже зависит от вашей схемы обработки заказов.

ПодходКогда выбиратьМинус
Код через фильтрНужно отключить письма только для части статусовТребует аккуратного тестирования
Плагин для email-уведомленийНужен интерфейс без правки кодаМожет добавить лишнюю сложность
Отключить письмо полностьюУведомление не нужно вообщеПотеря полезных сигналов для команды

Пошаговое решение через код

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

Ниже пример, который отключает письмо администратору, если заказ находится в статусе pending или on-hold. Для остальных статусов уведомление остается активным.

<?php
add_filter( 'woocommerce_email_enabled_new_order', 'wpcompany_disable_new_order_email_for_selected_statuses', 10, 2 );

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

    $disabled_statuses = array( 'pending', 'on-hold' );

    if ( in_array( $order->get_status(), $disabled_statuses, true ) ) {
        return false;
    }

    return $enabled;
}

Этот код можно добавить в мини-плагин или в functions.php дочерней темы. Для боевого сайта мини-плагин безопаснее: при смене темы логика не потеряется.

Если нужно отключить письмо только для одного статуса

Иногда достаточно убрать уведомление только при одном переходе, например для pending. Тогда список можно сократить до одного значения. Логика останется той же, но тестировать будет проще.

<?php
add_filter( 'woocommerce_email_enabled_new_order', function( $enabled, $order ) {
    if ( ! $order instanceof WC_Order ) {
        return $enabled;
    }

    return $order->get_status() === 'pending' ? false : $enabled;
}, 10, 2 );

Как проверить, что решение сработало

Проверка нужна не только в админке, но и по факту отправки письма. Иначе можно увидеть, что статус заказа изменился, но не заметить, что письмо все равно ушло через другой механизм.

  1. Создайте тестовый заказ в магазине.
  2. Доведите его до статуса, который должен блокировать письмо.
  3. Проверьте почту администратора и лог SMTP, если он у вас включен.
  4. Смените статус на разрешенный и убедитесь, что письмо снова отправляется.
  5. Если используется кэш писем или внешняя интеграция, проверьте, не дублируется ли уведомление там.

Хороший признак — в логах WooCommerce или SMTP видно, что письмо не формируется именно для запрещенного статуса, а не «теряется» где-то по дороге.

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

Код добавили не туда

Если вставить код в активную тему, а потом сменить оформление, настройка пропадет. Для постоянной логики лучше использовать мини-плагин или mu-plugin.

Путают статус заказа и тип письма

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

Статус сравнивают с неправильным значением

В WooCommerce статус хранится без префикса wc- в методе get_status(). Если сравнивать с wc-pending, условие не сработает.

Отключили письмо, но оно все равно приходит

Частая причина — сторонний плагин, который отправляет свои уведомления отдельно от WooCommerce. В этом случае нужно искать дублирующую логику в SMTP-плагине, CRM-модуле или сервисе рассылок.

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

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

Если на сайте много заказов, не добавляйте тяжелую логику в фильтр отправки письма: без запросов к внешним API и без лишних обращений к базе. Этот хук вызывается в момент оформления заказа, и любая задержка здесь заметна пользователю.

Для магазинов с несколькими менеджерами полезно вести журнал отправки писем через SMTP-плагин или серверный лог. Так проще понять, где именно ломается цепочка: в WooCommerce, в почтовом сервисе или в интеграции.

Если нужен более гибкий сценарий

Иногда отключение письма по статусу — это только часть задачи. Например, менеджеру нужно получать уведомление только по заказам с определенным способом оплаты или суммой. Тогда лучше строить правило на основе объекта WC_Order: проверить метод оплаты, валюту, сумму и только потом решать, отправлять письмо или нет. В таких кейсах точечный фильтр надежнее, чем общая настройка в админке.

Если вы уже используете дополнительные блоки в карточке товара или на странице оформления, имеет смысл не плодить еще один плагин ради одной мелкой настройки. Но если на сайте много редакционных и маркетинговых правок, удобнее вынести общие технические функции в отдельный служебный плагин, чтобы не зависеть от темы.

×

Время действовать!

Суперцены на
WordPress!

-20%
на премиум темы

Не упусти шанс ⋙