Что такое хук update_order_status в WooCommerce и зачем он нужен
Хук woocommerce_order_status_changed срабатывает при изменении статуса заказа в WooCommerce. Он позволяет запускать собственные функции, которые автоматизируют процессы, например, отправку уведомлений, обновление остатков, интеграцию с CRM и другое.
Использование этого хука помогает избежать ручного вмешательства и исключить ошибки, связанные с пропуском важных действий после смены статуса заказа.
Сигнатура хука
Этот хук передает четыре параметра:
$order_id— ID заказа;$old_status— предыдущий статус;$new_status— новый статус;$order— объект WC_Order.
Диагностика: почему автоматизация на смену статуса не работает
Если вы добавили функцию на хук woocommerce_order_status_changed, но она не срабатывает, проверьте:
- Правильно ли подключен код (например, в functions.php или отдельном плагине).
- Используете ли верные имена параметров и нет ли синтаксических ошибок.
- Не конфликтует ли ваш код с другими плагинами, особенно с теми, что тоже работают с заказами.
- Корректно ли изменяется статус заказа (например, через админку или программно).
Пошаговое решение: пример автоматического уведомления при смене статуса на «выполнен»
Допустим, нужно отправить письмо менеджеру при смене статуса заказа на completed. Вот пример кода для functions.php вашей темы или плагина:
add_action('woocommerce_order_status_changed', 'notify_manager_on_completed', 10, 4);
function notify_manager_on_completed($order_id, $old_status, $new_status, $order) {
if ($new_status === 'completed') {
$to = 'manager@example.com';
$subject = 'Заказ #' . $order_id . ' выполнен';
$message = 'Заказ ' . $order_id . ' был отмечен как выполненный.';
wp_mail($to, $subject, $message);
}
}Обратите внимание на приоритет и количество аргументов — они должны совпадать с объявлением хука.
Как проверить, что уведомление работает
- Поменяйте статус любого тестового заказа на «выполнен» через панель WooCommerce.
- Проверьте папку «Входящие» почты, указанной в коде.
- Если письма не приходят, проверьте логи почтового сервера и настройки WP Mail.
Частые ошибки при работе с хуком woocommerce_order_status_changed
- Неправильное количество аргументов в функции: хук передает 4 аргумента, но функция объявлена с меньшим числом, из-за чего они не передаются.
- Использование устаревшего хука: иногда рекомендуют
woocommerce_order_status_{$new_status}, но для универсальной логики лучше использоватьwoocommerce_order_status_changed. - Код размещен в неподходящем месте: например, в файле, который не загружается в админке или на фронтенде.
- Конфликты с другими плагинами: если другой плагин меняет статус заказа программно и не триггерит хук, ваша функция не сработает.
Практические советы по безопасности и производительности
- Никогда не выполняйте тяжелые операции в хук синхронно — используйте WP-Cron или очереди.
- Проверяйте права пользователя, если функция задействует административные действия.
- Используйте фильтры и настройки, чтобы отключать автоматизацию в тестовом режиме.
- Логируйте действия для отладки, например, через
error_log()или специализированные плагины.
Сравнение способов автоматизации при смене статуса заказа
| Метод | Плюсы | Минусы |
|---|---|---|
Хук woocommerce_order_status_changed | Универсальность, доступ к объекту заказа, простота внедрения | Нужно контролировать правильный приоритет и аргументы |
Хук woocommerce_order_status_{$new_status} | Простота для конкретного статуса | Меньшая универсальность, требует отдельной функции на каждый статус |
| Плагины автоматизации (например, AutomateWoo) | Готовые сценарии, визуальный редактор | Зависимость от стороннего кода, возможные накладные расходы |
Чек-лист для внедрения автоматизации на смену статуса заказа
- Подключите функцию с правильным хуком и аргументами
- Проверьте логику внутри функции на соответствие нужному статусу
- Тестируйте изменение статуса на тестовых заказах
- Проверьте отправку почты или выполнение других действий
- Логируйте ошибки и отлавливайте исключения
- Обеспечьте отключение кода в тестовой среде