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

Что такое хук 'woocommerce_order_status_changed' и для чего он нужен

В WooCommerce хук woocommerce_order_status_changed срабатывает при изменении статуса заказа. Его можно использовать для запуска любых автоматизированных действий, например, отправки уведомлений, изменения метаданных заказа, интеграции с внешними сервисами.

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

Хук принимает следующие параметры:

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

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

Для тестирования можно добавить простой код, который логирует изменение статуса заказа в файл debug.log. Включите WP_DEBUG и WP_DEBUG_LOG в wp-config.php:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Добавьте следующий код в файл functions.php вашей темы или в кастомный плагин:

add_action('woocommerce_order_status_changed', 'wphost_log_order_status_change', 10, 4);
function wphost_log_order_status_change($order_id, $old_status, $new_status, $order) {
    error_log("Заказ #{$order_id}: статус изменился с '{$old_status}' на '{$new_status}'");
}

После изменения статуса заказа проверьте файл wp-content/debug.log. Если запись появилась — хук работает.

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

Задача: автоматически переводить заказ в статус processing после получения оплаты, если статус был on-hold.

Код для functions.php:

add_action('woocommerce_order_status_changed', 'wphost_auto_processing_on_payment', 10, 4);
function wphost_auto_processing_on_payment($order_id, $old_status, $new_status, $order) {
    if ($old_status === 'on-hold' && $new_status === 'completed') {
        $order->update_status('processing', 'Автоматический переход в processing после оплаты');
    }
}

Обратите внимание, что изменение статуса внутри хука не вызовет бесконечный цикл, потому что новый статус processing отличается от completed.

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

  • Создайте тестовый заказ с статусом on-hold.
  • Оплатите заказ или измените статус вручную на completed.
  • Проверьте, что заказ автоматически сменил статус на processing.
  • Если добавлен лог, смотрите debug.log для подтверждения вызова.

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

  • Ошибка: Хук не срабатывает.
    Причина: Код добавлен в неподходящее место, например, в файл темы, который не активен, или без правильного хука.
    Решение: Используйте кастомный плагин или активную тему, убедитесь, что WooCommerce активен.
  • Ошибка: Бесконечный цикл изменения статуса.
    Причина: Вызов update_status внутри хука без проверки текущего и нового статуса.
    Решение: Добавляйте условия, чтобы не обновлять статус на тот же.
  • Ошибка: Нет реакции на изменение статуса в админке.
    Причина: Иногда статус меняется через ajax или сторонние плагины, которые могут обходить стандартные хуки.
    Решение: Проверяйте совместимость плагинов, используйте альтернативные хуки, например, woocommerce_order_status_{status}.

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

  • Не выполняйте тяжелые операции или запросы к внешним API внутри хука напрямую. Используйте очередь задач или WP-Cron.
  • Минимизируйте количество вызовов update_status, чтобы не перегружать базу данных.
  • Используйте проверку nonce и прав пользователя, если автоматизация затрагивает пользовательский ввод.

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

МетодПлюсыМинусыПример использования
Хук woocommerce_order_status_changedПростота, доступ ко всем статусамВозможны циклы, требует проверкиАвтоматический переход on-holdprocessing
Хук woocommerce_order_status_completedТочная обработка конкретного статусаМенее универсальноДействия только при переходе в completed
Плагины автоматизацииГрафический интерфейс, простота настройкиДополнительные зависимости, нагрузкаAutomateWoo, WooCommerce Follow-ups

Вывод

Хук woocommerce_order_status_changed — мощный инструмент для автоматизации процессов в WooCommerce. Правильное использование с учетом условий и проверок позволяет избежать ошибок и повысить эффективность магазина без сторонних плагинов.

Как удалить страницу корзины WooCommerce через код без плагинов
04.07.2026
Как удалить сложный кеш WooCommerce без плагинов
06.06.2026
Как запретить индексацию страниц авторов и архивов в WordPress без плагинов
20.08.2026
Как разрешить загрузку больших файлов в WooCommerce: практическое руководство
11.05.2026
Как избежать проблемы с синхронизацией товаров WooCommerce при массовом импорте
05.08.2026