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

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

По умолчанию WooCommerce отправляет уведомления клиентам и администраторам о различных изменениях статусов заказа, включая статус "Отменён" (cancelled). В некоторых случаях это приводит к лишним письмам, которые могут путать клиентов или создавать ненужную нагрузку на почтовый сервер.

Для начала стоит проверить, действительно ли письма об отмене заказа идут автоматически. Сделать это можно так:

  • В админке WordPress зайдите в WooCommerce → Статусы заказов.
  • Просмотрите историю заказов, которые были отменены.
  • Проверьте почтовый лог, если установлен плагин для логирования почты (например, WP Mail Logging).

Если письма отправляются и это нежелательно, нужно отключить их программно, сохранив при этом остальные уведомления.

Пошаговое решение: отключаем письма при статусе "Отменён"

1. Отключаем письма на уровне хуков WooCommerce

WooCommerce использует классы писем, которые вы можете отключить через фильтры. В нашем случае отключим именно письма, связанные с отменённым заказом.

function disable_cancelled_order_email( $email_classes ) {
    if ( isset( $email_classes['WC_Email_Cancelled_Order'] ) ) {
        unset( $email_classes['WC_Email_Cancelled_Order'] );
    }
    return $email_classes;
}
add_filter( 'woocommerce_email_classes', 'disable_cancelled_order_email' );

2. Проверяем, что письма действительно не отправляются

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

  • Создайте заказ в WooCommerce.
  • Измените его статус на "Отменён".
  • Проверьте почту и логи — письмо не должно прийти.

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

Чтобы убедиться, что решение сработало, используйте следующий чек-лист:

  • Измените статус заказа на "Отменён" и убедитесь, что письмо не отправилось.
  • Измените статус заказа на другие (например, "Выполнен") — письма должны отправляться как обычно.
  • Проверьте почтовый лог, если используется — отсутствие записи о письме отмены.

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

  • Код добавлен в неправильный файл: убедитесь, что код находится в functions.php активной дочерней темы или в плагине, а не в файлах ядра WooCommerce.
  • Кэширование почты: на некоторых серверах или при использовании SMTP или плагинов кэширования почты письма могут уходить с задержкой или повторно. Отключите кэширование для проверки.
  • Конфликт с другими плагинами: другие плагины могут форсировать отправку писем. Для диагностики временно отключите сторонние плагины.
  • Неправильное имя класса письма: убедитесь, что используете правильный ключ класса — WC_Email_Cancelled_Order именно для писем отмены заказа в WooCommerce.

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

  • Всегда делайте резервную копию сайта перед внесением изменений в код.
  • Используйте дочернюю тему или собственный плагин для пользовательских функций, чтобы не потерять изменения при обновлении WooCommerce.
  • Проверьте работу email через SMTP плагин, чтобы точно знать, что письма отправляются корректно.
  • Для массовых изменений статусов используйте WP-CLI или кастомные скрипты, чтобы избежать лишних автоматических писем.

Альтернативные варианты и сравнение

МетодПлюсыМинусыПримечания
Отключение класса письма через фильтр woocommerce_email_classesПросто, не требует внешних плагиновОтключает все письма отмены, нельзя тонко настроитьРекомендуется для большинства случаев
Отключение через woocommerce_email_enabled_{$email_id} фильтрПозволяет отключать письма динамическиТребует более тонкой настройки, больше кодаПодходит для условий по пользователю, продукту и т.п.
Использование плагинов для управления email (например, WP Mail Control)Управление через интерфейс, без кодаМожет быть избыточным, требует установки плагинаУдобно для непрофессионалов

Пример кода для более гибкого отключения письма по условию

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

add_filter( 'woocommerce_email_enabled_cancelled_order', 'conditional_disable_cancelled_order_email', 10, 2 );
function conditional_disable_cancelled_order_email( $enabled, $order ) {
    if ( ! $order instanceof WC_Order ) {
        return $enabled;
    }

    // Отключаем письмо для пользователей с ролью 'customer'
    $user_id = $order->get_user_id();
    if ( $user_id ) {
        $user = get_userdata( $user_id );
        if ( in_array( 'customer', (array) $user->roles, true ) ) {
            return false;
        }
    }

    return $enabled;
}
WooCommerce: автоматическое создание категорий и товарных атрибутов из CSV файла
18.07.2026
WooCommerce: автоматическое отключение отправки писем после отмены заказа
14.07.2026
Как автоматизировать отправку отзывов после заказа WooCommerce
10.04.2026
Автоматическое создание задач и напоминаний в WordPress для управления заказами
15.03.2026
WooCommerce: как использовать хуки для добавления собственного контента в страницу заказа
25.04.2026