Что такое хук woocommerce_order_status_changed и зачем он нужен
Хук woocommerce_order_status_changed вызывается каждый раз, когда статус заказа в WooCommerce меняется. Он принимает пять параметров: ID заказа, старый статус, новый статус, объект заказа и дополнительный массив данных. Этот хук идеально подходит для автоматизации задач, связанных с изменением статусов, например, отправки уведомлений, интеграции с внешними системами, обновления пользовательских метаданных и т.п.
Диагностика задачи: автоматизация после изменения статуса заказа
Частая задача — выполнять определённые действия при смене статуса заказа. Если вы заметили, что эти действия не выполняются, проверьте, правильно ли подключён хук и корректно ли обрабатываются параметры. Например, если не срабатывают почтовые уведомления или интеграция с CRM, причина может быть в неправильной логике в функции-обработчике.
Пошаговое решение: как добавить обработчик на изменение статуса заказа
- Добавьте следующий код в файл
functions.phpвашей темы или в собственный плагин:
add_action('woocommerce_order_status_changed', 'custom_order_status_changed_action', 10, 5);
function custom_order_status_changed_action($order_id, $old_status, $new_status, $order) {
// Пример: при смене статуса на completed отправляем кастомное уведомление
if ($new_status === 'completed') {
$to = $order->get_billing_email();
$subject = 'Ваш заказ завершён';
$message = 'Спасибо за покупку! Ваш заказ #' . $order_id . ' выполнен.';
wp_mail($to, $subject, $message);
}
// Добавьте здесь другие действия, например интеграцию с API
}
- Если нужно, логируйте изменения для отладки:
function log_order_status_change($order_id, $old_status, $new_status, $order) {
$log_entry = sprintf('Order #%d changed from %s to %s', $order_id, $old_status, $new_status);
error_log($log_entry);
}
add_action('woocommerce_order_status_changed', 'log_order_status_change', 20, 4);
Проверка результата после внедрения
- Обновите статус любого заказа в админке WooCommerce.
- Проверьте, отправилось ли письмо на email покупателя (проверьте папку «Отправленные» на сервере или логи WP).
- Если вы добавили логирование, проверьте файл
debug.logили системный лог сервера на наличие записей о смене статуса.
Частые ошибки и как их исправить
- Неверный приоритет или количество аргументов в add_action: Функция должна принимать 5 параметров, а приоритет обычно 10. Проверьте, что в
add_actionуказано10, 5. - Использование устаревших статусов: Статусы заказов должны быть корректными, например,
pending,processing,completed. Проверьте, что вы правильно сравниваете статусы. - Отсутствие проверки объекта $order: Иногда объект заказа может быть не передан, добавьте проверку
if (!$order) return;. - Проблемы с отправкой почты: Убедитесь, что функция
wp_mailнастроена и работает, проверьте SMTP настройки сервера.
Практические советы по безопасности и производительности
- Не выполняйте тяжелые операции напрямую в хуке, если это возможно — используйте wp_cron или очередь задач для асинхронной обработки.
- Проверяйте права пользователя и валидность данных, особенно если хук запускает внешние запросы.
- Для логирования используйте отдельные файлы или системы мониторинга, а не
error_logв продакшене. - Минимизируйте количество операций в хук, чтобы не замедлять изменения статуса и не создавать узкие места в обработке заказов.
Сравнение способов автоматизации при смене статуса заказа
| Метод | Плюсы | Минусы |
|---|---|---|
Хук woocommerce_order_status_changed | Гибкость, доступ к объекту заказа, простота интеграции | Выполнение в синхронном режиме, возможность замедления процесса |
| Использование сторонних плагинов (например, автоматизация) | Удобство настройки, визуальный интерфейс | Ограниченная гибкость, нагрузка на систему |
| WP-Cron с проверкой статусов | Асинхронность, разгрузка основного процесса | Задержки в выполнении, зависимость от посещаемости сайта |