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

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

Этот хук срабатывает в WooCommerce при любом изменении статуса заказа, например, с "в обработке" на "выполнен" или с "ожидание" на "отменён". Его используют, чтобы автоматически запускать дополнительные процессы: отправку уведомлений, интеграцию с CRM, обновление данных в базе, изменение доступов и прочее.

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

Если вы добавили код на этот хук, но ожидаемые действия не происходят, проверьте:

  • Правильность подключения к хуку (синтаксис, приоритет, количество аргументов).
  • Использование правильных статусов заказа – WooCommerce использует статусы без префикса "wc-" в хуках.
  • Наличие ошибок PHP: смотрите логи сервера или включите WP_DEBUG.
  • Конфликты с другими плагинами, которые могут прерывать выполнение вашего кода.

Пошаговое решение: как правильно использовать woocommerce_order_status_changed

1. Добавьте функцию-обработчик в файл functions.php вашей активной темы или в свой плагин.

2. Подпишитесь на хук с правильными параметрами:

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

3. Реализуйте логику внутри функции, например, отправку письма при переходе в статус "completed":

function my_custom_order_status_change( $order_id, $old_status, $new_status, $order ) {
    if ( 'completed' === $new_status ) {
        // Получаем email клиента
        $to = $order->get_billing_email();
        $subject = 'Ваш заказ завершён';
        $message = 'Спасибо за покупку! Ваш заказ #' . $order_id . ' успешно выполнен.';
        wp_mail( $to, $subject, $message );
    }
}

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

Создайте тестовый заказ или измените статус существующего через админку WooCommerce. Убедитесь, что при смене статуса на "выполнен" приходит письмо на указанный email. Если письма нет, проверьте логи ошибок и настройки почты.

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

  • Ошибка: неправильное имя статуса – используйте без "wc-". Например, completed, а не wc-completed.
  • Ошибка: не указан параметр $order в функции – в хуке 4 параметра, не забудьте указать их в add_action.
  • Ошибка: функция не вызывается – убедитесь, что код находится в подключённом файле и не закомментирован.
  • Ошибка: почта не отправляется – проверьте настройки SMTP, используйте плагины для отладки почты.

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

  • Не выполняйте в обработчике ресурсоёмкие операции напрямую, лучше ставьте задачи в очередь или используйте WP-Cron.
  • Проверяйте права доступа пользователя, если код зависит от контекста.
  • Используйте кеширование, если нужно получить дополнительные данные из базы.
  • Для отправки почты используйте SMTP-сервер или специализированные сервисы, чтобы избежать попадания в спам.

Дополнительные примеры использования

Автоматическое обновление пользовательского мета при смене статуса:

function update_user_meta_on_order_status( $order_id, $old_status, $new_status, $order ) {
    if ( 'processing' === $new_status ) {
        $user_id = $order->get_user_id();
        if ( $user_id ) {
            update_user_meta( $user_id, 'last_order_processing', current_time( 'mysql' ) );
        }
    }
}
add_action( 'woocommerce_order_status_changed', 'update_user_meta_on_order_status', 10, 4 );

Интеграция с внешним API при отмене заказа:

function notify_api_on_order_cancelled( $order_id, $old_status, $new_status, $order ) {
    if ( 'cancelled' === $new_status ) {
        $response = wp_remote_post( 'https://example.com/api/order-cancel', [
            'body' => json_encode([ 'order_id' => $order_id ]),
            'headers' => [ 'Content-Type' => 'application/json' ]
        ]);
    }
}
add_action( 'woocommerce_order_status_changed', 'notify_api_on_order_cancelled', 10, 4 );

Чек-лист для отладки и успешного внедрения

  • Убедиться, что файл с кодом подключен к WordPress.
  • Проверить правильность имени и количества аргументов функции.
  • Проверить соответствие статусов (без "wc-").
  • Проверить работу почты через тестовые письма.
  • Проверить логи ошибок и включить WP_DEBUG при необходимости.
  • Проверить, нет ли конфликтов с другими плагинами.

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

МетодПлюсыМинусыПример
Хук woocommerce_order_status_changedПрямой контроль, гибкость, можно передать все статусыНужно контролировать производительность, может быть сложнее для новичковОтправка почты, обновление мета, интеграция API
Плагины автоматизации (например AutomateWoo)Простой интерфейс, много функций без кодаТребует установки дополнительного ПО, нагрузка на сайтАвтоматические письма, условия, триггеры
Использование WP-Cron с проверкой статусовОтложенное выполнение, уменьшение нагрузкиНе подходит для мгновенных действий, зависит от посещаемости сайтаПериодические проверки и действия
Как правильно настроить автообновление плагинов без ошибок
05.12.2025
Как отключить AJAX обновления в WooCommerce и решить проблемы с корзиной
20.04.2026
Как отменить заказ в WooCommerce после оплаты
17.04.2026
Как создать собственный шорткод в WordPress
27.11.2025
WooCommerce: как использовать REST API для обновления корзины без перезагрузки страницы
08.06.2026