Что такое хук woocommerce_order_status_changed и зачем он нужен
Хук woocommerce_order_status_changed вызывается при изменении статуса заказа в WooCommerce. Он принимает несколько параметров, таких как ID заказа, старый статус, новый статус и объект заказа. Этот хук позволяет автоматизировать различные процессы — например, отправку уведомлений, обновление пользовательских метаданных, интеграцию с CRM или выполнение кастомных действий при смене статуса.
Сигнатура хуки
do_action( 'woocommerce_order_status_changed', $order_id, $old_status, $new_status, $order );Где параметры:
$order_id— ID заказа;$old_status— предыдущий статус (например, 'pending');$new_status— новый статус (например, 'completed');$order— объект WC_Order.
Диагностика: как понять, что автоматизация срабатывает неправильно
Если автоматизация на смену статуса заказов не работает, нужно проверить:
- Подключен ли ваш код в functions.php или плагине и нет ли синтаксических ошибок;
- Правильно ли указан хук и параметры;
- Логика в обработчике корректно сравнивает статусы;
- Нет ли конфликтов с другими плагинами, которые могут переопределять статусы;
- Включен ли режим отладки и записываются ли ошибки в
debug.log; - Используется ли правильный тип статуса (без префикса
wc-при сравнении).
Пошаговое решение: пример автоматизации на смену статуса заказа
Задача: при переходе заказа из статуса processing в completed автоматически добавить заметку к заказу и отправить кастомное уведомление по email.
1. Добавляем обработчик в файл functions.php вашей темы или в кастомный плагин
add_action('woocommerce_order_status_changed', 'wp_custom_order_status_changed', 10, 4);
function wp_custom_order_status_changed($order_id, $old_status, $new_status, $order) {
if ($old_status === 'processing' && $new_status === 'completed') {
// Добавляем заметку к заказу
$order->add_order_note('Заказ автоматически помечен как выполненный и обработан.');
// Отправляем кастомное письмо
$to = $order->get_billing_email();
$subject = 'Ваш заказ #'.$order_id.' выполнен';
$message = 'Здравствуйте! Ваш заказ успешно выполнен и отправлен.';
wp_mail($to, $subject, $message);
}
}2. Проверяем, что код подключен и ошибок нет
Включите WP_DEBUG и проверьте wp-content/debug.log на наличие ошибок. Проверьте, что почта отправляется, используя SMTP или логирование писем.
3. Тестируем смену статуса вручную
Перейдите в WooCommerce > Заказы, выберите заказ со статусом processing, измените статус на completed и сохраните. Проверьте:
- Появилась ли заметка в заказе;
- Пришло ли письмо на e-mail клиента.
Проверка результата после внедрения
- В админке в заказе должна появиться новая заметка с текстом из
add_order_note. - Пользователь должен получить email с указанным письмом (лучше проверить через тестовый заказ).
- В журнале ошибок WP_DEBUG не должно быть сообщений, связанных с вашим кодом.
Частые ошибки и как их исправить
- Ошибка: Письмо не отправляется.
Причина: Неправильно настроена почта WordPress или используется неработающийwp_mail.
Решение: Настройте SMTP через плагин (например, WP Mail SMTP) или проверьте локальный почтовый сервер. - Ошибка: Код не срабатывает.
Причина: Функция не подключена в правильном месте или ошибка в синтаксисе.
Решение: Проверьте подключение к functions.php, включите отладку, используйтеerror_logдля отладки. - Ошибка: Статусы сравниваются с префиксом
wc-.
Причина: WooCommerce в хук передает статусы без префиксов.
Решение: Сравнивайте статусы именно так, например'processing','completed'.
Практические советы по безопасности и производительности
- Не выполняйте тяжелые операции напрямую в обработчике — если нужно, создайте очередь задач через Action Scheduler.
- Проверяйте права пользователя, если добавляете действия, инициируемые по API.
- Логируйте критичные ошибки для последующего анализа, не выводите ошибки на публичный сайт.
- Используйте фильтры и действия WooCommerce, не меняйте напрямую базу данных.
Сравнение способов автоматизации смены статуса заказа
| Метод | Преимущества | Недостатки |
|---|---|---|
| Использование хука woocommerce_order_status_changed | Прямой доступ к данным заказа, моментальная реакция | Нужны базовые знания PHP, возможны конфликты с другими обработчиками |
| Плагины автоматизации (например, AutomateWoo) | Графический интерфейс, много готовых сценариев | Платные, ограниченная гибкость для кастомных задач |
| Собственные WP-Cron задачи | Можно планировать периодические проверки и действия | Задержки в выполнении, зависимость от посещаемости сайта |