Что такое хук 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 вашей темы или в кастомный плагин.
Проверка результата после внедрения
- Создайте тестовый заказ в WooCommerce;
- Переведите заказ вручную в статус
completedчерез админку; - Перейдите в страницу редактирования заказа и откройте вкладку "Заметки к заказу";
- Убедитесь, что появилась заметка с текстом "Спасибо за покупку! Ваш заказ завершён.".
Частые ошибки и как их исправить
- Хук не вызывается: убедитесь, что статус действительно меняется, а не обновляется без изменения статуса;
- Ошибка "Call to undefined method": проверьте, что параметр
$orderуказан в функции (4 параметра) и что в версии WooCommerce он поддерживается; - Заметка не добавляется: проверьте права пользователя, под которым выполняется скрипт, и корректность метода
add_order_note; - Конфликты с другими плагинами: временно отключите сторонние плагины и проверьте работу кода.
Практические советы по безопасности и производительности
- Не выполняйте тяжелые операции внутри хука, чтобы не замедлять процесс обновления статуса;
- Для интеграций с внешними системами используйте очереди (wp_cron или внешние сервисы), чтобы не блокировать поток;
- Санитизируйте и проверяйте все данные перед записью в заметки или метаданные;
- Если добавляете сторонние API вызовы, обрабатывайте ошибки и тайм-ауты.
Сравнение способов автоматизации на примере добавления заметок к заказу
| Метод | Преимущества | Недостатки | Пример |
|---|---|---|---|
Хук woocommerce_order_status_changed |
Простой, встроенный в WooCommerce, автоматически срабатывает при смене статуса | Срабатывает только на смену статуса, не подходит для других событий | Код из статьи |
Хук save_post_shop_order |
Срабатывает при любом сохранении заказа, можно более гибко реагировать | Может срабатывать слишком часто, требуется дополнительная фильтрация | |
| Плагины для автоматизации (например, AutomateWoo) | Графический интерфейс, множество готовых триггеров и действий | Платные решения, нагрузка на сайт | Использование плагина с настройками в админке |