WooCommerce: как настроить отправку писем при массовом изменении статуса заказов

|

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

В WooCommerce стандартная функциональность отправляет уведомления покупателям при изменении статуса заказа по одному. Однако при массовом изменении статусов через админку письма иногда не отправляются. Это связано с тем, что массовые операции используют другой механизм обновления статусов, который не всегда триггерит стандартные хуки для email-уведомлений.

Как проверить проблему:

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

При массовом обновлении WooCommerce использует метод bulk_edit_orders, который обновляет статусы заказов в базе, но не вызывает все хуки, связанные с отправкой писем. В частности, не срабатывает woocommerce_order_status_changed в полном объеме, что и приводит к отсутствию уведомлений.

Пошаговое решение: как заставить WooCommerce отправлять письма при массовом обновлении

1. Используем хук для отслеживания массового обновления

Добавьте в файл functions.php вашей темы или в кастомный плагин следующий код:

add_action('woocommerce_order_bulk_edit_actions', 'send_emails_on_bulk_status_change', 10, 2);

function send_emails_on_bulk_status_change($order_ids, $new_status) {
    if (empty($order_ids) || !$new_status) {
        return;
    }
    foreach ($order_ids as $order_id) {
        $order = wc_get_order($order_id);
        if (!$order) continue;

        $old_status = $order->get_status();
        // Обновляем статус вручную, чтобы сработали хуки
        if ($old_status !== $new_status) {
            $order->update_status($new_status, 'Статус изменен массово, отправка письма.');
        }
    }
}

Принцип: при массовом обновлении из админки мы вручную вызываем update_status для каждого заказа, что запускает все необходимые хуки и отправляет уведомления.

2. Добавление проверки для шаблонов email

Если вы хотите отправлять только определённые письма (например, только уведомления о выполнении заказа), можно дополнительно фильтровать статусы:

function send_emails_on_bulk_status_change($order_ids, $new_status) {
    $allowed_statuses = ['completed', 'processing'];
    if (empty($order_ids) || !in_array($new_status, $allowed_statuses)) {
        return;
    }
    foreach ($order_ids as $order_id) {
        $order = wc_get_order($order_id);
        if (!$order) continue;

        $old_status = $order->get_status();
        if ($old_status !== $new_status) {
            $order->update_status($new_status, 'Статус изменен массово, отправка письма.');
        }
    }
}

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

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

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

Сравнение вариантов решения проблемы

МетодПлюсыМинусыКомпромисс
Использовать стандартное массовое обновление WooCommerceПростота, встроенный функционалПисьма не отправляются автоматическиТребуется доработка кода
Добавить ручной вызов update_status для каждого заказаГарантированная отправка писемНагрузка на сервер при большом объемеДелать обновление пакетами
Использовать сторонние плагины массового управления заказами с поддержкой писемГотовое решениеМожет добавлять ненужный функционал, конфликтоватьТестировать совместимость
Как удалить скрипт из заголовка WordPress для ускорения сайта
29.12.2025
Как использовать внешние API в WordPress с помощью AJAX: практическое руководство
02.04.2026
Как создать главный вывод текстовой информации в WordPress без плагинов
22.01.2026
WooCommerce: установка ограничений на сроки доставки и способы оплаты для конкретных товаров
03.05.2026
Как автоматически удалять пустые термины в WordPress: практическое руководство
12.04.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше