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

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

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

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

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

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);

После смены статуса заказа проверьте файл debug.log в папке wp-content (если включен WP_DEBUG_LOG) — должна появиться соответствующая запись.

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

Допустим, нам нужно автоматически добавить в заказ заметку, когда он переходит в статус completed. Такое часто нужно для внутренней отчетности или интеграции с логистикой.

add_action('woocommerce_order_status_changed', 'wppr_add_note_on_completed', 10, 4);
function wppr_add_note_on_completed($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') {
        $order->add_order_note('Заказ автоматически помечен как выполненный и готов к отправке.');
    }
}

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

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

  • Измените статус одного из заказов в админке WooCommerce на completed.
  • Перейдите в детали заказа и откройте вкладку с заметками — должна появиться новая заметка с текстом из кода.
  • Если заметка не появилась, проверьте логи ошибок и правильность подключения функции.

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

  • Хук не срабатывает: проверьте, что функция подключена с правильным приоритетом и количеством аргументов (4).
  • Ошибка доступа к объекту $order: убедитесь, что функция получает объект WC_Order в четвертом параметре, а не просто ID.
  • Добавление заметки не отображается: проверьте, что в WooCommerce нет ограничений на отображение кастомных заметок, и что заказ действительно меняет статус на нужный.

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

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

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

МетодПлюсыМинусыПример использования
Хук woocommerce_order_status_changedДает полный контроль, легко кастомизируетсяНужно писать код, требует знаний PHPДобавление заметок, интеграция с API
Плагины автоматизации (например, AutomateWoo)Интерфейс без кода, много готовых сценариевПлатные, могут замедлять сайтУведомления, скидки, триггеры по статусу
WP-Cron задачиОтложенная обработка, минимальная нагрузкаЗависит от посещаемости сайтаОтправка отчетов, очистка старых заказов

Дополнительный пример: отправка кастомного email при смене статуса на "processing"

add_action('woocommerce_order_status_changed', 'wppr_send_custom_email_on_processing', 10, 4);
function wppr_send_custom_email_on_processing($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'processing') {
        $to = $order->get_billing_email();
        $subject = 'Ваш заказ принят в обработку';
        $message = 'Здравствуйте! Ваш заказ #' . $order_id . ' принят в обработку и скоро будет отправлен.';
        wp_mail($to, $subject, $message);
    }
}

Проверьте работу, сменив статус заказа на processing и убедившись, что письмо пришло на почту клиента.

Как добавить произвольные поля в регистрацию WordPress с примером кода
05.02.2026
Оптимизация базы данных WordPress: лучшие практики и решения
24.11.2025
Как удалить пустые термины в таксономии WordPress
27.03.2026
WooCommerce: автоматическая регистрация пользователя при оформлении заказа без регистрации
23.06.2026
WooCommerce: автоматическое изменение стоимости вариативных товаров
14.06.2026