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

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

В WooCommerce часто требуется выполнять дополнительные действия при смене статуса заказа. Например, отправить нестандартное уведомление, интегрировать с CRM, обновить складские остатки или запускать кастомные процессы. Без правильного использования хука изменения статуса заказов автоматизация становится сложной и неэффективной.

Пошаговое решение: как применить 'woocommerce_order_status_changed'

1. Подключение хука в functions.php

Хук woocommerce_order_status_changed передает 4 параметра: ID заказа, старый статус, новый статус и объект заказа. Для подключения создайте функцию и добавьте её к хуку:

add_action('woocommerce_order_status_changed', 'my_custom_order_status_change', 10, 4);
function my_custom_order_status_change($order_id, $old_status, $new_status, $order) {
    // Проверяем переход от 'pending' к 'processing'
    if($old_status === 'pending' && $new_status === 'processing') {
        // Ваш код автоматизации
    }
}

2. Пример: отправка кастомного письма при смене статуса

Добавим отправку уведомления администратору, когда заказ перейдет в статус 'completed':

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

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

Чтобы убедиться, что хук работает корректно, выполните следующие шаги:

  • Создайте тестовый заказ с оплатой «наложенным платежом» или другим способом, чтобы статус изначально был pending.
  • В админке WooCommerce смените статус заказа вручную на processing или completed в зависимости от вашего сценария.
  • Проверьте логи почты (если отправляете уведомления) или результаты интеграции (например, записи в базе или вызовы API).
  • Для отладки можно добавить error_log() с сообщением внутри функции, чтобы увидеть вызов в логах PHP.

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

  • Ошибка: не срабатывает хук. Проверьте, что функция подключена правильно и файл с кодом загружается. Хук должен быть добавлен до запуска событий WooCommerce.
  • Ошибка: неправильные параметры в функции. Убедитесь, что указано 4 параметра в add_action (четвёртый параметр - количество аргументов).
  • Ошибка: отправка почты не происходит. Проверьте настройки почтового сервера WordPress, используйте плагины для логирования почты или wp_mail_debug.
  • Ошибка: слишком тяжелые операции внутри хука. Для длительных задач используйте WP Cron или асинхронные задачи, чтобы не замедлять работу сайта.

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

  • Всегда проверяйте права пользователя, если функция изменяет данные.
  • Избегайте тяжелых запросов и блокирующих операций внутри хука — лучше делегировать их WP Cron или внешним сервисам.
  • Используйте nonce и проверяйте входные данные, если функция обрабатывает пользовательский ввод.
  • Логируйте ключевые события для упрощения отладки и мониторинга.

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

МетодПлюсыМинусыПример использования
Хук 'woocommerce_order_status_changed'Нативный, точечный, легко интегрироватьНужно писать код, возможны ошибки при сложной логикеОтправка кастомных уведомлений
Плагины автоматизации (например, AutomateWoo)Готовые сценарии, визуальный интерфейсПлатные, ограничены по кастомизацииАвтоматические email и SMS
WP Cron с кастомными задачамиОтложенное выполнение тяжелых задачЗависит от посещаемости сайтаОбработка интеграций с внешними API
Как запретить отображение изображений в WordPress для защиты от копирования
13.03.2026
Как создать динамический шорткод в WordPress с примерами кода
20.11.2025
Как удалить или скрыть стартовую страницу WordPress без плагинов
09.03.2026
Как автоматизировать очистку кеша в WordPress
16.03.2026
Автоматическое обновление данных в реальном времени в WordPress
01.12.2025