Хук WooCommerce 'woocommerce_order_status_changed': практическое применение для автоматизации

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

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

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

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

  • Правильно ли зарегистрирован обработчик (функция подключена через add_action).
  • Соответствует ли количество и порядок аргументов в функции обработчика.
  • Нет ли конфликтов с другими плагинами или темами, которые могут прерывать выполнение.
  • Логируются ли ошибки PHP, связанные с функцией.

Для проверки можно добавить временный лог внутри функции:

add_action('woocommerce_order_status_changed', 'my_log_order_status_change', 10, 4); 
function my_log_order_status_change($order_id, $old_status, $new_status, $order) {
    error_log("Order #$order_id changed from $old_status to $new_status");
}

Если в логах ничего нет, значит хук не вызывается или функция не подключена.

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

1. Подключение функции с нужным числом аргументов

Хук передает 4 аргумента: ID заказа, старый статус, новый статус и объект заказа. Подключаем функцию так:

add_action('woocommerce_order_status_changed', 'auto_process_order_status', 10, 4);
function auto_process_order_status($order_id, $old_status, $new_status, $order) {
    // ваш код
}

2. Пример: отправка кастомного уведомления при переходе заказа в статус "completed"

function auto_process_order_status($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') {
        $to = 'manager@example.com';
        $subject = "Заказ #$order_id завершен";
        $message = "Заказ $order_id изменил статус с $old_status на $new_status.";
        wp_mail($to, $subject, $message);
    }
}

3. Пример: автоматическое добавление пользовательской метки к заказу при переходе в "processing"

function auto_process_order_status($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'processing') {
        update_post_meta($order_id, '_custom_label', 'В обработке');
    }
}

Как проверить, что автоматизация работает

  • Сделайте тестовый заказ в магазине и измените статус вручную или дождитесь автоматического обновления.
  • Проверьте логи error_log или добавьте собственный лог-файл через file_put_contents, чтобы убедиться, что функция вызывается.
  • Проверьте почту, если отправляете уведомления.
  • Убедитесь, что метаданные заказа обновились в базе данных (через админку или SQL-запрос).

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

  • Неправильное количество аргументов: Если указать меньше или больше аргументов в add_action, функция не будет получать нужные параметры. Обязательно указывать 4 аргумента.
  • Ошибки в коде внутри функции: отсутствие проверок на null, некорректные вызовы методов объекта заказа $order могут приводить к фатальным ошибкам. Используйте is_a($order, 'WC_Order') для проверки.
  • Неправильное имя статуса: Статусы пишутся без приставки wc-, например, completed, processing. Ошибка в названии приводит к срабатыванию условия.
  • Конфликты с плагинами: Некоторые плагины могут отменять стандартные хуки или перехватывать их. Отключите подозрительные плагины для теста.

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

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

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

МетодПлюсыМинусыРекомендации
Хук woocommerce_order_status_changedУниверсальный, срабатывает на все статусы
Передает объект заказа
Нужно правильно обрабатывать аргументы
Не подходит для тяжелых задач напрямую
Использовать для легкой логики и триггеров
Специфичные хуки woocommerce_order_status_$statusПростота для конкретных статусовМного дублирующего кода при нескольких статусахИспользовать для простых триггеров на один статус
Плагины автоматизации (например, AutomateWoo)Готовые сценарии, визуальный редакторНагрузка, лицензии, ограниченные возможности кастомизацииДля сложных бизнес-процессов без кода
Как использовать автоматическое очищение кеша в WordPress без плагинов
21.02.2026
Как использовать WPRemark для автоматического управления отзывами в WordPress
10.02.2026
Автоматизация создания резервных копий WordPress без плагинов
06.12.2025
Custom User Roles WordPress: как создать и управлять ролями пользователей
18.01.2026
Автоматическое удаление старых записей WordPress через AJAX
22.01.2026