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

Диагностика проблемы: зачем отключать email для отдельных заказов

WooCommerce по умолчанию отправляет уведомления при изменении статуса любого заказа. Однако в ряде случаев требуется отключить автоматическую отправку email для определённых типов или статусов заказов, например, для тестовых заказов, внутренних заказов или заказов с определённым метаполем. Стандартные настройки WooCommerce этого не предусматривают, поэтому приходится искать кастомные решения.

Пошаговое решение: отключение email по условию

1. Определение типа заказа или условия отключения

Сначала нужно понять, по какому признаку отключать email: по статусу заказа, по кастомному метаполю или по продуктам в заказе. Например, отключим уведомления для заказов, в которых есть продукт с ID 123 (тестовый товар).

2. Использование фильтра woocommerce_email_enabled_<email_id>

WooCommerce позволяет контролировать отправку email через фильтры вида woocommerce_email_enabled_customer_processing_order, woocommerce_email_enabled_new_order и т.д. Нужно добавить фильтр, который проверит заказ и вернёт false для отключения отправки.

3. Пример кода в functions.php темы или в кастомном плагине

add_filter('woocommerce_email_enabled_customer_processing_order', 'disable_email_for_specific_products', 10, 2);
add_filter('woocommerce_email_enabled_customer_completed_order', 'disable_email_for_specific_products', 10, 2);

function disable_email_for_specific_products($enabled, $order) {
    // Проверяем, что передан объект WC_Order
    if (!is_a($order, 'WC_Order')) {
        return $enabled;
    }

    // Получаем все товары из заказа
    foreach ($order->get_items() as $item) {
        $product_id = $item->get_product_id();
        // Если в заказе есть продукт с ID 123, отключаем email
        if ($product_id === 123) {
            return false;
        }
    }

    return $enabled;
}

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

  • Создайте тестовый заказ с продуктом ID 123 и измените его статус на "Обработка" или "Завершён".
  • Проверьте, что клиент не получил уведомление по email.
  • Создайте заказ без продукта 123, убедитесь, что уведомления отправляются как обычно.

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

  • Неправильный ID продукта: Проверьте, что используете правильный ID товара. В админке WooCommerce можно посмотреть ID в списке продуктов.
  • Фильтр применён не к тому email: Для разных email-уведомлений есть свои фильтры. Убедитесь, что вы фильтруете именно нужные, например, woocommerce_email_enabled_customer_processing_order для уведомлений о статусе "Обработка".
  • Код добавлен не в правильное место: Рекомендуется добавлять код в functions.php дочерней темы или в отдельный плагин, чтобы не потерять изменения при обновлении.
  • Объект $order не передаётся: Убедитесь, что в хук передается объект WC_Order. В старых версиях WooCommerce могут быть отличия.

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

  • Не отключайте уведомления полностью без веской причины — это может привести к пропущенным важным сообщениям.
  • Для сложных условий фильтрации используйте метаполя заказов, а не жестко прописанные ID товаров.
  • Кэширование email-уведомлений может влиять на работу фильтров — тестируйте на чистой среде.
  • Логируйте отключение уведомлений, чтобы видеть, когда и почему email не отправляется, например, через error_log или WPCheck.

Сравнение вариантов реализации

МетодПлюсыМинусыПример
Фильтр woocommerce_email_enabled_<email_id> Гибкий, работает на уровне WooCommerce, не отключает все email сразу Нужно знать ID email, для каждого email фильтр добавлять отдельно Пример в статье
Отключение email через плагин (например, Disable Emails) Простая настройка, быстро Отключает все email, не подходит для выборочного отключения Плагин Disable Emails
Переопределение класса WC_Email Максимальный контроль Сложно в поддержке, требует глубоких знаний Кастомный плагин

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как настроить проверку активности плагинов WordPress с кодом
02.01.2026
Как удалить неиспользуемые виджеты в WordPress: практическое руководство
10.01.2026
Как использовать функцию wp_unique_slug для решения проблем с URL в WordPress
16.05.2026
Как использовать WP Cron для надёжного запуска запланированных задач в WordPress
08.02.2026
Диагностика и решение проблем с нерабочими webhook в WooCommerce
11.06.2026
×
-15%
на премиум плагин
Clearfy

Защитите сайт!

Включить Clearfy »