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

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

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

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

do_action( 'woocommerce_order_status_changed', int $order_id, string $old_status, string $new_status, WC_Order $order )

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

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

  • Подключен ли ваш обработчик к хуку именно woocommerce_order_status_changed.
  • Правильно ли используются параметры в функции обратного вызова.
  • Нет ли конфликтов с другими плагинами или темой.
  • Вызывается ли смена статуса через стандартные методы WooCommerce.

Для отладки добавьте логирование:

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

Если в логе нет записей, значит хук не срабатывает — возможно, статус меняется нестандартным способом.

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

1. Создание функции-обработчика

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

2. Привязка функции к хуку

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

3. Проверка работы

Перейдите в админку WooCommerce, измените статус заказа на completed. Если письмо не приходит, проверьте логи почты, конфигурацию SMTP и правильность email покупателя.

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

  • Измените статус заказа на «выполнен» в админке.
  • Проверьте, что email приходит на указанный в заказе адрес.
  • Просмотрите логи сервера на наличие ошибок, связанных с wp_mail().

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

  • Функция не вызывается: Проверьте, что функция подключена в файле темы (functions.php) или плагина и что хук используется с правильным названием и параметрами.
  • Письмо не отправляется: Убедитесь, что почтовая функция wp_mail работает на сервере. Для теста можно использовать плагин SMTP или написать тестовую отправку.
  • Параметры функции не совпадают: Всегда указывайте количество аргументов в add_action — 4 для этого хука.
  • Конфликты с другими плагинами: Отключите временно другие плагины и проверьте работу.

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

  • Не используйте тяжелые операции внутри хука напрямую — если нужно, запускайте задачи в фоне через WP-Cron или очереди.
  • Проверяйте права пользователя перед изменением статуса, чтобы исключить нежелательные действия.
  • Для логирования используйте условие defined('WP_DEBUG') && WP_DEBUG, чтобы не засорять логи на продакшене.
  • Используйте проверку if ( ! $order instanceof WC_Order ) внутри функции для избежания ошибок.

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

СпособОписаниеПлюсыМинусы
Хук woocommerce_order_status_changedОбработка любых смен статусов с доступом к объекту заказаГибкость, полный контроль, можно реагировать на любые статусыТребует навыков PHP, возможны ошибки в логике
Плагины автоматизацииГотовые решения для автоматизации почты и задачПростота настройки, нет кодаМогут быть тяжеловесными, ограничены функционалом
Вебхуки WooCommerceОтправка данных в сторонние сервисы при смене статусаИнтеграция с внешними системамиНе подходит для локальных задач, требует знания API
Как использовать хуки WooCommerce для добавления пользовательского функционала
26.12.2025
Как добавить авторизацию через Google в WordPress
14.03.2026
Как добавить настройку отключения редактора Gutenberg в WordPress для конкретных постов и ролей
24.03.2026
Как удалить ненужные шорткоды в WordPress без ошибок
31.01.2026
Автоматическое удаление старых ревизий постов в WordPress для оптимизации базы данных
06.12.2025

Ниже мы подобрали самые актуальные материалы по Вордпресс