Сценарий типичный: магазин на WooCommerce завален письмами о каждом новом заказе, а менеджеры всё равно работают в админке. В итоге почта перегружена, часть уведомлений теряется, а на сервере растёт лишняя нагрузка на отправку писем. Если задача не в том, чтобы полностью отключить коммуникацию, а в том, чтобы убрать именно ненужные email-уведомления о заказах, это лучше решать точечно: через настройки WooCommerce, фильтры и, при необходимости, небольшую доработку в коде.
Ниже разберём, как понять, какие письма реально уходят, как отключить только лишние уведомления, чем заменить их внутри админки и как проверить, что после изменений ничего не сломалось.
Когда это вообще нужно
Отключение писем о заказах полезно не в каждом магазине. Но есть несколько рабочих сценариев, где это оправдано:
- заказы обрабатываются только менеджером в админке, без внешней почтовой цепочки;
- уведомления дублируются через CRM, Telegram или другой канал;
- почтовый сервер часто уходит в спам или задерживает отправку;
- на тестовом стенде нужно имитировать оформление заказа без реальных писем;
- нужно оставить письма клиенту, но убрать внутренние уведомления на каждый статус.
Диагностика: какие письма WooCommerce отправляет сейчас
Прежде чем что-то отключать, посмотрите список email-уведомлений в WooCommerce. Откройте WooCommerce → Настройки → Email. Там обычно есть отдельные шаблоны для:
- нового заказа;
- обработки заказа;
- завершённого заказа;
- возврата средств;
- сброса пароля;
- новой учётной записи.
Частая ошибка — отключить не то письмо. Например, администратор хочет убрать уведомление о новом заказе, но потом случайно выключает письмо клиенту о смене статуса. Поэтому сначала проверьте, кто именно получает письмо: магазин, клиент или оба.
Если нужно быстро понять, какие письма уходят при конкретном статусе, удобно временно включить логирование почты через SMTP-плагин или посмотреть очередь отправки, если у вас стоит почтовый логгер. Но даже без этого обычно достаточно пройтись по настройкам WooCommerce и проверить шаблоны вручную.
Что лучше: настройки, код или плагин
| Подход | Когда подходит | Минус |
|---|---|---|
| Настройки WooCommerce | Нужно отключить стандартное письмо целиком | Не всегда хватает, если нужна тонкая логика по статусам |
| Код через фильтры | Нужно отключить письма только для части заказов или статусов | Требует аккуратного теста после обновлений |
| Плагин для уведомлений | Нужна маршрутизация в CRM, Telegram, Slack и т.п. | Добавляет зависимость и лишний слой логики |
Если задача простая, начинайте с настроек. Если нужно отключить письма только для части сценариев, надёжнее использовать код. Плагины уместны, когда вы хотите не просто убрать email, а перенести уведомления в другой канал.
Пошаговое решение: отключаем лишние письма о заказах
Шаг 1. Отключите стандартное письмо в настройках
В WooCommerce → Настройки → Email откройте нужный шаблон и снимите галочку включения. Это самый безопасный вариант, если письмо не должно уходить вообще никому.
Например, если менеджеры работают только в админке, можно отключить письмо New order для магазина. Но если клиенту всё ещё нужно подтверждение заказа, это письмо трогать нельзя — ищите отдельный шаблон для клиента.
Шаг 2. Если нужна тонкая логика, используйте фильтр
Иногда письмо нужно отключать не всегда, а только при определённых условиях. Например, для заказов с самовывозом, для тестовых заказов или для конкретного статуса. В таком случае можно использовать фильтр woocommerce_email_enabled_{$email_id}.
Ниже пример: отключаем письмо о новом заказе для магазина, если заказ создан с определённым способом доставки. Код лучше добавлять в мини-плагин или в functions.php дочерней темы, но для рабочих магазинов предпочтительнее отдельный плагин с одной задачей.
<?php
add_filter( 'woocommerce_email_enabled_new_order', function( $enabled, $email ) {
if ( ! $enabled ) {
return false;
}
$order = isset( $email->object ) ? $email->object : null;
if ( ! $order instanceof WC_Order ) {
return $enabled;
}
foreach ( $order->get_items( 'shipping' ) as $shipping_item ) {
$method_id = $shipping_item->get_method_id();
if ( 'local_pickup' === $method_id ) {
return false;
}
}
return $enabled;
}, 10, 2 );Здесь логика простая: если заказ оформлен с самовывозом, письмо о новом заказе не отправляется. Для других способов доставки письмо остаётся активным.
Шаг 3. Добавьте уведомление в админке вместо email
Если письма убираются, менеджеру всё равно нужен сигнал о новом заказе. Самый практичный вариант — показать уведомление в админке при входе в список заказов или на панели управления. Это не заменяет полноценную систему уведомлений, но закрывает базовую задачу без почты.
Пример ниже создаёт заметку в админке через стандартные уведомления WordPress, если появился новый заказ. Для реального магазина лучше привязать это к событию создания заказа и не показывать сообщение на каждом экране подряд.
<?php
add_action( 'woocommerce_new_order', function( $order_id ) {
if ( ! is_admin() ) {
return;
}
$order = wc_get_order( $order_id );
if ( ! $order ) {
return;
}
set_transient( 'wpbuy_new_order_notice_' . get_current_user_id(), array(
'order_id' => $order_id,
'total' => $order->get_formatted_order_total(),
), 60 );
} );
add_action( 'admin_notices', function() {
$notice = get_transient( 'wpbuy_new_order_notice_' . get_current_user_id() );
if ( ! $notice ) {
return;
}
delete_transient( 'wpbuy_new_order_notice_' . get_current_user_id() );
echo '<div class="notice notice-success is-dismissible"><p>';
echo 'Новый заказ #' . esc_html( $notice['order_id'] ) . ' на сумму ' . wp_kses_post( $notice['total'] ) . ' создан.';
echo '</p></div>';
} );Это не идеальная система оповещений, но для небольшого магазина она часто удобнее, чем десятки писем в день. Если нужен более надёжный канал, лучше отправлять событие в CRM или мессенджер через отдельную интеграцию.
Как проверить, что решение сработало
После внедрения не ограничивайтесь одним тестовым заказом. Проверьте несколько сценариев:
- заказ с обычной доставкой — письмо должно уйти или не уйти в зависимости от вашей логики;
- заказ с самовывозом — письмо должно вести себя так, как вы задали в фильтре;
- изменение статуса заказа в админке — не должно запускать лишние уведомления;
- уведомление в админке — должно появляться только у нужной роли пользователя;
- почтовый лог — должен показывать фактическое отсутствие отправки, а не только скрытие письма на экране.
Если у вас установлен SMTP-плагин с логированием, откройте журнал и убедитесь, что письмо действительно не формируется. Это важнее, чем просто отсутствие визуального уведомления.
Частые ошибки и как их исправить
Отключили не то письмо
В WooCommerce несколько шаблонов, и названия легко перепутать. Если после изменений клиент перестал получать подтверждение заказа, значит вы отключили не внутреннее письмо магазина, а клиентское уведомление. Верните шаблон и проверьте, какой email ID вы используете в фильтре.
Добавили код в активную тему
Если вставить код в functions.php родительской темы, при обновлении темы изменения могут пропасть. Для стабильной работы лучше использовать дочернюю тему или маленький собственный плагин.
Не учли сторонние плагины уведомлений
Иногда письма отправляет не только WooCommerce, но и плагин доставки, CRM или маркетинговая интеграция. В таком случае отключение стандартного email не решит проблему полностью. Нужно смотреть, кто именно вызывает отправку письма.
Показывают админ-уведомление всем подряд
Если уведомление о новом заказе видят все пользователи админки, это лишний шум и потенциальный риск. Ограничьте показ по роли или по capability, например только для manage_woocommerce.
Безопасность и производительность
Отключение лишних писем обычно полезно для производительности: меньше вызовов почтовой подсистемы, меньше очередей, меньше шансов на задержку отправки. Но не стоит превращать это в хаотичную правку кода по всему сайту.
- не правьте ядро WooCommerce;
- не храните логику отключения писем в случайных сниппетах без контроля версии;
- проверяйте, не завязан ли email на юридически важные уведомления;
- если нужен альтернативный канал, тестируйте его отдельно от боевого магазина;
- для админских уведомлений ограничивайте доступ по ролям.
Если на сайте уже много технических доработок, полезно держать такие правки в одном месте и документировать, какие письма отключены и почему. Это сильно упрощает поддержку после обновлений WooCommerce.
Когда лучше не отключать письма полностью
Есть случаи, когда email остаётся самым надёжным каналом. Например, если у менеджеров нет постоянного доступа к админке, если магазин работает в распределённой команде или если нужно хранить историю уведомлений в почтовом ящике. Тогда разумнее не отключать письма, а сократить их количество: оставить только ключевые статусы и убрать дубли.
Если же задача именно в том, чтобы убрать лишний шум, а не потерять контроль над заказами, то комбинация из настроек WooCommerce, точечного фильтра и уведомления в админке обычно закрывает сценарий без тяжёлых решений и без лишних плагинов.