Как использовать хук WooCommerce update_order_status для автоматизации

Что такое хук update_order_status в WooCommerce и зачем он нужен

Хук woocommerce_order_status_changed срабатывает при изменении статуса заказа в WooCommerce. Он позволяет запускать собственные функции, которые автоматизируют процессы, например, отправку уведомлений, обновление остатков, интеграцию с CRM и другое.

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

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

Этот хук передает четыре параметра:

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

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

Если вы добавили функцию на хук woocommerce_order_status_changed, но она не срабатывает, проверьте:

  • Правильно ли подключен код (например, в functions.php или отдельном плагине).
  • Используете ли верные имена параметров и нет ли синтаксических ошибок.
  • Не конфликтует ли ваш код с другими плагинами, особенно с теми, что тоже работают с заказами.
  • Корректно ли изменяется статус заказа (например, через админку или программно).

Пошаговое решение: пример автоматического уведомления при смене статуса на «выполнен»

Допустим, нужно отправить письмо менеджеру при смене статуса заказа на completed. Вот пример кода для functions.php вашей темы или плагина:

add_action('woocommerce_order_status_changed', 'notify_manager_on_completed', 10, 4);
function notify_manager_on_completed($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') {
        $to = 'manager@example.com';
        $subject = 'Заказ #' . $order_id . ' выполнен';
        $message = 'Заказ ' . $order_id . ' был отмечен как выполненный.';
        wp_mail($to, $subject, $message);
    }
}

Обратите внимание на приоритет и количество аргументов — они должны совпадать с объявлением хука.

Как проверить, что уведомление работает

  • Поменяйте статус любого тестового заказа на «выполнен» через панель WooCommerce.
  • Проверьте папку «Входящие» почты, указанной в коде.
  • Если письма не приходят, проверьте логи почтового сервера и настройки WP Mail.

Частые ошибки при работе с хуком woocommerce_order_status_changed

  • Неправильное количество аргументов в функции: хук передает 4 аргумента, но функция объявлена с меньшим числом, из-за чего они не передаются.
  • Использование устаревшего хука: иногда рекомендуют woocommerce_order_status_{$new_status}, но для универсальной логики лучше использовать woocommerce_order_status_changed.
  • Код размещен в неподходящем месте: например, в файле, который не загружается в админке или на фронтенде.
  • Конфликты с другими плагинами: если другой плагин меняет статус заказа программно и не триггерит хук, ваша функция не сработает.

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

  • Никогда не выполняйте тяжелые операции в хук синхронно — используйте WP-Cron или очереди.
  • Проверяйте права пользователя, если функция задействует административные действия.
  • Используйте фильтры и настройки, чтобы отключать автоматизацию в тестовом режиме.
  • Логируйте действия для отладки, например, через error_log() или специализированные плагины.

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

МетодПлюсыМинусы
Хук woocommerce_order_status_changedУниверсальность, доступ к объекту заказа, простота внедренияНужно контролировать правильный приоритет и аргументы
Хук woocommerce_order_status_{$new_status}Простота для конкретного статусаМеньшая универсальность, требует отдельной функции на каждый статус
Плагины автоматизации (например, AutomateWoo)Готовые сценарии, визуальный редакторЗависимость от стороннего кода, возможные накладные расходы

Чек-лист для внедрения автоматизации на смену статуса заказа

  • Подключите функцию с правильным хуком и аргументами
  • Проверьте логику внутри функции на соответствие нужному статусу
  • Тестируйте изменение статуса на тестовых заказах
  • Проверьте отправку почты или выполнение других действий
  • Логируйте ошибки и отлавливайте исключения
  • Обеспечьте отключение кода в тестовой среде

Наш каталог плагинов WordPress