Что такое хук woocommerce_order_status_changed и для чего он нужен
Хук woocommerce_order_status_changed вызывается в WooCommerce при изменении статуса заказа. Он позволяет выполнить произвольный PHP-код в момент перехода заказа из одного статуса в другой. Это удобно для автоматизации задач: отправки уведомлений, синхронизации с внешними сервисами, изменения метаданных заказа и так далее.
Сигнатура хука
Действие принимает 4 параметра:
$order_id(int) – ID заказа.$old_status(string) – предыдущий статус заказа.$new_status(string) – новый статус заказа.$order(WC_Order) – объект заказа.
Диагностика: как понять, что хук не срабатывает
Если ваша логика не срабатывает при изменении статуса заказа, проверьте:
- Правильность добавления обработчика (функция подключена и хук зарегистрирован).
- Работает ли WooCommerce и доступны ли объекты заказа.
- Вызывается ли изменение статуса через стандартные методы WooCommerce (изменение вручную или программно через
$order->update_status()). - Отсутствие конфликтов с другими плагинами, которые могут перехватывать или переопределять статусы.
Пошаговое руководство по реализации автоматизации с помощью woocommerce_order_status_changed
1. Добавление обработчика в functions.php или в плагин
add_action('woocommerce_order_status_changed', 'my_custom_order_status_changed', 10, 4);
function my_custom_order_status_changed($order_id, $old_status, $new_status, $order) {
if ($new_status === 'completed' && $old_status !== 'completed') {
// Пример: отправка кастомного письма
$to = $order->get_billing_email();
$subject = 'Спасибо за покупку!';
$message = 'Ваш заказ #' . $order_id . ' был успешно завершён.';
wp_mail($to, $subject, $message);
}
}2. Варианты автоматизации
- Отправка письма или SMS при смене статуса.
- Обновление метаданных заказа (
$order->update_meta_data()). - Синхронизация с CRM или ERP через внешние API.
- Добавление заметок к заказу (
$order->add_order_note()).
Как проверить, что обработчик сработал
- Добавьте логирование в файл через
error_log()или WP_DEBUG_LOG:
function my_custom_order_status_changed($order_id, $old_status, $new_status, $order) {
error_log("Заказ #$order_id изменил статус с $old_status на $new_status");
// дополнительная логика
}- Проверьте, появляется ли запись в
wp-content/debug.logпосле смены статуса. - Используйте email уведомления или временно выводите данные на экран (только для разработки).
- Проверьте изменения в базе данных (например, новые метаданные или заметки к заказу).
Частые ошибки при использовании хука и как их исправить
- Ошибка: Хук не вызывается при смене статуса.
Причина: Статус меняется напрямую в базе, минуя методы WooCommerce.
Решение: Всегда менять статус через$order->update_status('new-status'), чтобы триггерить хуки. - Ошибка: Письма не отправляются.
Причина: Некорректная работаwp_mail()или блокировка сервером.
Решение: Проверьте почтовый сервер, используйте SMTP плагины для надежной отправки. - Ошибка: Функция вызывается много раз.
Причина: Изменение статуса несколько раз подряд.
Решение: Добавьте проверку старого и нового статуса, чтобы выполнять действия только при нужном переходе.
Практические советы по безопасности и производительности
- Не выполняйте тяжелые операции в обработчике хука. Для сложных задач используйте WP-Cron или асинхронные запросы.
- Проверяйте права доступа и валидируйте данные, особенно если интегрируетесь с внешними API.
- Логируйте только в режиме отладки, чтобы не засорять логи на продакшене.
- Избегайте дублирования действий при повторных вызовах хука.
Сравнение вариантов реализации автоматизации при смене статуса заказа
| Метод | Плюсы | Минусы | Пример |
|---|---|---|---|
Прямой хук woocommerce_order_status_changed | Легко реализовать, работает сразу | Нагрузка при сложной логике, риск повторов | Отправка письма, добавление заметок |
| WP-Cron с отложенной обработкой | Снижает нагрузку, надежнее для тяжелых задач | Задержка выполнения, сложнее в настройке | Отправка отчетов, интеграция с CRM |
| Сторонние плагины автоматизации (Zapier, Integromat) | Без кода, интеграции с внешним миром | Зависимость от сервисов, ограниченная кастомизация | Автоматизация маркетинга, CRM |