Использование хука WooCommerce 'woocommerce_order_status_changed' для автоматизации

Что такое хук 'woocommerce_order_status_changed' и зачем он нужен

Хук woocommerce_order_status_changed срабатывает при изменении статуса заказа в WooCommerce. Его часто применяют для автоматизации бизнес-процессов: отправка уведомлений, интеграция с CRM, изменение метаданных заказа, логирование и т.д.

Сигнатура хука:

do_action( 'woocommerce_order_status_changed', $order_id, $old_status, $new_status, $order );

Параметры:

  • $order_id — ID заказа;
  • $old_status — предыдущий статус заказа (например, 'pending');
  • $new_status — новый статус заказа (например, 'completed');
  • $order — объект WC_Order.

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

Если ваш код на woocommerce_order_status_changed не выполняется, проверьте:

  • Правильное подключение функции к хуку (корректный приоритет и количество аргументов);
  • Использование актуальных версий WooCommerce и WordPress;
  • Отсутствие конфликтов с другими плагинами или темой;
  • Корректное изменение статуса заказа — хук не срабатывает при обновлении без смены статуса;
  • Правильное получение объекта WC_Order и его методов.

Пошаговое решение: пример автоматической отправки письма при смене статуса на "completed"

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

add_action('woocommerce_order_status_changed', 'custom_notify_order_completed', 10, 4);

2. Реализуйте функцию:

function custom_notify_order_completed($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') {
        $to = $order->get_billing_email();
        $subject = 'Ваш заказ №' . $order_id . ' выполнен';
        $message = 'Здравствуйте! Ваш заказ успешно выполнен. Спасибо за покупку.';
        wp_mail($to, $subject, $message);
    }
}

3. Сохраните изменения и протестируйте.

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

Чтобы убедиться, что функция работает:

  • Создайте тестовый заказ в WooCommerce;
  • Измените его статус вручную на "completed" в админке;
  • Проверьте, пришло ли письмо на указанный email;
  • Включите логирование почты (например, с помощью плагина Clearfy или WP Mail Logging) для отладки.

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

  • Ошибка: функция не вызывается
    Причина: неправильно указано число аргументов в add_action. Решение: укажите 4 аргумента, иначе объект $order не передастся.
    add_action('woocommerce_order_status_changed', 'custom_function', 10, 4);
  • Ошибка: $order возвращает null
    Причина: WooCommerce изменил API или версия плагина устарела.
    Решение: убедитесь, что используете актуальную версию WooCommerce; можно получить объект через wc_get_order($order_id) внутри функции.
  • Ошибка: email не отправляется
    Причина: проблемы с почтовым сервером или неверный email.
    Решение: проверьте настройки SMTP, используйте плагины для логирования почты и убедитесь, что email валиден.

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

  • Минимизируйте обработку внутри хука, особенно если выполняете внешние запросы — используйте очереди или CRON для тяжелых задач.
  • Проверяйте права пользователя и статус заказа, чтобы избежать нежелательных запусков кода.
  • Используйте wp_mail с правильными заголовками и фильтрами для безопасности SMTP.
  • Для интеграций с CRM или сторонними сервисами добавляйте обработку ошибок и логирование для диагностики.

Сравнение способов реализации автоматизации на смену статуса заказа

СпособПреимуществаНедостатки
Использование хука woocommerce_order_status_changedПростота, встроенный API, гибкостьВыполнение в реальном времени может замедлить страницу
CRON-задачи для отложенной обработкиНе блокирует страницу, надежность при большом объеме задачСложнее реализовать, задержка в выполнении
Плагины автоматизации (например, AutomateWoo)Готовые решения, удобный интерфейсДополнительные расходы, ограниченная кастомизация
WooCommerce: как удалить варианты товара без прямого вмешательства в базу данных
04.06.2026
Как добавить поддержку новых типов файлов в WordPress без плагинов
28.12.2025
WooCommerce: автоматическое удаление неактивных вариаций товаров
07.06.2026
Как создать динамическую фильтрацию товаров WooCommerce без плагинов
09.01.2026
WooCommerce: как правильно удалить товар с вариациями из базы данных
31.05.2026

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