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

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

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

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

Действие принимает 4 параметра:

  • $order_id (int) – ID заказа.
  • $old_status (string) – предыдущий статус заказа.
  • $new_status (string) – новый статус заказа.
  • $order (WC_Order) – объект заказа.

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

Если ваша логика не срабатывает при изменении статуса заказа, проверьте:

  • Правильность добавления обработчика (функция подключена и хук зарегистрирован).
  • Работает ли WooCommerce и доступны ли объекты заказа.
  • Вызывается ли изменение статуса через стандартные методы WooCommerce (изменение вручную или программно через $order->update_status()).
  • Отсутствие конфликтов с другими плагинами, которые могут перехватывать или переопределять статусы.

Пошаговое руководство по реализации автоматизации с помощью woocommerce_order_status_changed

1. Добавление обработчика в functions.php или в плагин

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

2. Варианты автоматизации

  • Отправка письма или SMS при смене статуса.
  • Обновление метаданных заказа ($order->update_meta_data()).
  • Синхронизация с CRM или ERP через внешние API.
  • Добавление заметок к заказу ($order->add_order_note()).

Как проверить, что обработчик сработал

  • Добавьте логирование в файл через error_log() или WP_DEBUG_LOG:
function my_custom_order_status_changed($order_id, $old_status, $new_status, $order) {
    error_log("Заказ #$order_id изменил статус с $old_status на $new_status");
    // дополнительная логика
}
  • Проверьте, появляется ли запись в wp-content/debug.log после смены статуса.
  • Используйте email уведомления или временно выводите данные на экран (только для разработки).
  • Проверьте изменения в базе данных (например, новые метаданные или заметки к заказу).

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

  • Ошибка: Хук не вызывается при смене статуса.
    Причина: Статус меняется напрямую в базе, минуя методы WooCommerce.
    Решение: Всегда менять статус через $order->update_status('new-status'), чтобы триггерить хуки.
  • Ошибка: Письма не отправляются.
    Причина: Некорректная работа wp_mail() или блокировка сервером.
    Решение: Проверьте почтовый сервер, используйте SMTP плагины для надежной отправки.
  • Ошибка: Функция вызывается много раз.
    Причина: Изменение статуса несколько раз подряд.
    Решение: Добавьте проверку старого и нового статуса, чтобы выполнять действия только при нужном переходе.

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

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

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

МетодПлюсыМинусыПример
Прямой хук woocommerce_order_status_changedЛегко реализовать, работает сразуНагрузка при сложной логике, риск повторовОтправка письма, добавление заметок
WP-Cron с отложенной обработкойСнижает нагрузку, надежнее для тяжелых задачЗадержка выполнения, сложнее в настройкеОтправка отчетов, интеграция с CRM
Сторонние плагины автоматизации (Zapier, Integromat)Без кода, интеграции с внешним миромЗависимость от сервисов, ограниченная кастомизацияАвтоматизация маркетинга, CRM
WooCommerce: автоматическое создание уникальных слагов товаров при импорте и массовом обновлении
03.07.2026
Как добавить автоматические редиректы после изменения слага записи в WordPress
17.04.2026
Как автоматически добавлять атрибуты alt к изображениям в WordPress
15.03.2026
Использование WP-Cron для автоматического очищения кеша и базы данных в WordPress
12.05.2026
Использование хука WooCommerce checkout_process для дополнительной проверки при оформлении заказа
04.06.2026