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

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

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

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

Хук принимает четыре параметра:

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

Диагностика проблем с хуком woocommerce_order_status_changed

Если ваш код на этот хук не срабатывает, проверьте:

  • Правильно ли подключен callback (функция должна быть добавлена в functions.php или плагин);
  • Не происходит ли конфликт с другими хуками или плагинами, которые отменяют изменение статуса;
  • Используется ли правильный статус (например, 'processing', 'completed' и т.д.);
  • Отсутствуют ли ошибки PHP, которые мешают выполнению.

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

Задача: при переходе заказа в статус completed добавить в заказ заметку с благодарностью клиенту.

add_action('woocommerce_order_status_changed', 'add_thank_you_note_on_completed', 10, 4);
function add_thank_you_note_on_completed($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') {
        $note = 'Спасибо за покупку! Ваш заказ завершён.';
        $order->add_order_note($note);
    }
}

Добавьте этот код в functions.php вашей темы или в кастомный плагин.

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

  1. Создайте тестовый заказ в WooCommerce;
  2. Переведите заказ вручную в статус completed через админку;
  3. Перейдите в страницу редактирования заказа и откройте вкладку "Заметки к заказу";
  4. Убедитесь, что появилась заметка с текстом "Спасибо за покупку! Ваш заказ завершён.".

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

  • Хук не вызывается: убедитесь, что статус действительно меняется, а не обновляется без изменения статуса;
  • Ошибка "Call to undefined method": проверьте, что параметр $order указан в функции (4 параметра) и что в версии WooCommerce он поддерживается;
  • Заметка не добавляется: проверьте права пользователя, под которым выполняется скрипт, и корректность метода add_order_note;
  • Конфликты с другими плагинами: временно отключите сторонние плагины и проверьте работу кода.

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

  • Не выполняйте тяжелые операции внутри хука, чтобы не замедлять процесс обновления статуса;
  • Для интеграций с внешними системами используйте очереди (wp_cron или внешние сервисы), чтобы не блокировать поток;
  • Санитизируйте и проверяйте все данные перед записью в заметки или метаданные;
  • Если добавляете сторонние API вызовы, обрабатывайте ошибки и тайм-ауты.

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

МетодПреимуществаНедостаткиПример
Хук woocommerce_order_status_changed Простой, встроенный в WooCommerce, автоматически срабатывает при смене статуса Срабатывает только на смену статуса, не подходит для других событий Код из статьи
Хук save_post_shop_order Срабатывает при любом сохранении заказа, можно более гибко реагировать Может срабатывать слишком часто, требуется дополнительная фильтрация
add_action('save_post_shop_order', 'my_custom_save_order'); function my_custom_save_order($post_id) { /* логика */ }
Плагины для автоматизации (например, AutomateWoo) Графический интерфейс, множество готовых триггеров и действий Платные решения, нагрузка на сайт Использование плагина с настройками в админке
Как использовать WooCommerce REST API для массового управления заказами
30.05.2026
Как удалить неактивных пользователей WordPress с помощью кода
09.03.2026
Как удалить пустые категории в WordPress с помощью кода
06.01.2026
Как удалить неиспользуемые метаданные в WordPress для оптимизации базы данных
22.02.2026
Использование хука woocommerce_checkout_update_order_meta для добавления данных к заказу в WooCommerce
21.05.2026