Что такое хук woocommerce_order_status_changed и зачем он нужен
Этот хук срабатывает в WooCommerce при любом изменении статуса заказа, например, с "в обработке" на "выполнен" или с "ожидание" на "отменён". Его используют, чтобы автоматически запускать дополнительные процессы: отправку уведомлений, интеграцию с CRM, обновление данных в базе, изменение доступов и прочее.
Диагностика: как понять, что хук не работает или работает неправильно
Если вы добавили код на этот хук, но ожидаемые действия не происходят, проверьте:
- Правильность подключения к хуку (синтаксис, приоритет, количество аргументов).
- Использование правильных статусов заказа – WooCommerce использует статусы без префикса "wc-" в хуках.
- Наличие ошибок PHP: смотрите логи сервера или включите WP_DEBUG.
- Конфликты с другими плагинами, которые могут прерывать выполнение вашего кода.
Пошаговое решение: как правильно использовать woocommerce_order_status_changed
1. Добавьте функцию-обработчик в файл functions.php вашей активной темы или в свой плагин.
2. Подпишитесь на хук с правильными параметрами:
add_action('woocommerce_order_status_changed', 'my_custom_order_status_change', 10, 4);3. Реализуйте логику внутри функции, например, отправку письма при переходе в статус "completed":
function my_custom_order_status_change( $order_id, $old_status, $new_status, $order ) {
if ( 'completed' === $new_status ) {
// Получаем email клиента
$to = $order->get_billing_email();
$subject = 'Ваш заказ завершён';
$message = 'Спасибо за покупку! Ваш заказ #' . $order_id . ' успешно выполнен.';
wp_mail( $to, $subject, $message );
}
}Проверка результата после внедрения
Создайте тестовый заказ или измените статус существующего через админку WooCommerce. Убедитесь, что при смене статуса на "выполнен" приходит письмо на указанный email. Если письма нет, проверьте логи ошибок и настройки почты.
Частые ошибки и как их исправить
- Ошибка: неправильное имя статуса – используйте без "wc-". Например,
completed, а неwc-completed. - Ошибка: не указан параметр $order в функции – в хуке 4 параметра, не забудьте указать их в add_action.
- Ошибка: функция не вызывается – убедитесь, что код находится в подключённом файле и не закомментирован.
- Ошибка: почта не отправляется – проверьте настройки SMTP, используйте плагины для отладки почты.
Практические советы по безопасности и производительности
- Не выполняйте в обработчике ресурсоёмкие операции напрямую, лучше ставьте задачи в очередь или используйте WP-Cron.
- Проверяйте права доступа пользователя, если код зависит от контекста.
- Используйте кеширование, если нужно получить дополнительные данные из базы.
- Для отправки почты используйте SMTP-сервер или специализированные сервисы, чтобы избежать попадания в спам.
Дополнительные примеры использования
Автоматическое обновление пользовательского мета при смене статуса:
function update_user_meta_on_order_status( $order_id, $old_status, $new_status, $order ) {
if ( 'processing' === $new_status ) {
$user_id = $order->get_user_id();
if ( $user_id ) {
update_user_meta( $user_id, 'last_order_processing', current_time( 'mysql' ) );
}
}
}
add_action( 'woocommerce_order_status_changed', 'update_user_meta_on_order_status', 10, 4 );Интеграция с внешним API при отмене заказа:
function notify_api_on_order_cancelled( $order_id, $old_status, $new_status, $order ) {
if ( 'cancelled' === $new_status ) {
$response = wp_remote_post( 'https://example.com/api/order-cancel', [
'body' => json_encode([ 'order_id' => $order_id ]),
'headers' => [ 'Content-Type' => 'application/json' ]
]);
}
}
add_action( 'woocommerce_order_status_changed', 'notify_api_on_order_cancelled', 10, 4 );Чек-лист для отладки и успешного внедрения
- Убедиться, что файл с кодом подключен к WordPress.
- Проверить правильность имени и количества аргументов функции.
- Проверить соответствие статусов (без "wc-").
- Проверить работу почты через тестовые письма.
- Проверить логи ошибок и включить WP_DEBUG при необходимости.
- Проверить, нет ли конфликтов с другими плагинами.
Таблица сравнения способов автоматизации на смену статуса заказа
| Метод | Плюсы | Минусы | Пример |
|---|---|---|---|
| Хук woocommerce_order_status_changed | Прямой контроль, гибкость, можно передать все статусы | Нужно контролировать производительность, может быть сложнее для новичков | Отправка почты, обновление мета, интеграция API |
| Плагины автоматизации (например AutomateWoo) | Простой интерфейс, много функций без кода | Требует установки дополнительного ПО, нагрузка на сайт | Автоматические письма, условия, триггеры |
| Использование WP-Cron с проверкой статусов | Отложенное выполнение, уменьшение нагрузки | Не подходит для мгновенных действий, зависит от посещаемости сайта | Периодические проверки и действия |