wpcat.ru wordpress WPCat.ru

Использование хука WooCommerce 'woocommerce_order_status_changed' для автоматизации задач

Что такое хук 'woocommerce_order_status_changed' и зачем он нужен

Хук woocommerce_order_status_changed — это один из основных инструментов для разработчиков, которые хотят реагировать на изменение статуса заказа в WooCommerce. Он позволяет запускать кастомные функции при переходе заказа из одного статуса в другой, что удобно для автоматизации бизнес-процессов: уведомлений, смены метаданных, интеграции с внешними сервисами и т.д.

Сигнатура хука

Этот хук принимает следующие параметры:

  • $order_id (int) — ID заказа;
  • $old_status (string) — предыдущий статус;
  • $new_status (string) — текущий статус;
  • $order (WC_Order) — объект заказа.

Диагностика: как проверить, что хук срабатывает

Часто разработчики сталкиваются с тем, что их функции на хук не запускаются. Для диагностики используйте простой логгер:

add_action('woocommerce_order_status_changed', function($order_id, $old_status, $new_status, $order) {
    error_log("Order #$order_id changed from $old_status to $new_status");
}, 10, 4);

Если в wp-content/debug.log появляется нужная запись при смене статуса заказа, значит хук работает корректно.

Пошаговое решение: пример автоматической отправки письма при смене статуса на 'completed'

Задача: отправлять кастомное письмо клиенту, когда заказ сменяет статус на completed.

1. Подключитесь к хуку woocommerce_order_status_changed с приоритетом 10 и 4 параметрами.

2. Проверьте, что новый статус — completed.

3. Получите объект заказа и email клиента.

4. Отправьте письмо через wp_mail().

add_action('woocommerce_order_status_changed', 'send_custom_completed_email', 10, 4);
function send_custom_completed_email($order_id, $old_status, $new_status, $order) {
    if ($new_status !== 'completed') {
        return;
    }
    $to = $order->get_billing_email();
    $subject = 'Ваш заказ #' . $order_id . ' выполнен';
    $message = 'Спасибо за покупку! Ваш заказ теперь завершен.';
    wp_mail($to, $subject, $message);
}

Проверка результата после внедрения

  • Создайте тестовый заказ в WooCommerce с любым статусом, кроме completed.
  • В панели администратора измените статус заказа на completed.
  • Проверьте почту, указанную в заказе, — должно прийти письмо с указанным текстом.
  • Для отладки используйте error_log внутри функции, чтобы проверить выполнение.

Частые ошибки и как их исправить

  • Функция не вызывается: убедитесь, что при добавлении хука указан параметр 4 в конце, так как нужно 4 аргумента.
  • Письмо не отправляется: проверьте настройки почтового сервера и используйте плагины SMTP для диагностики.
  • Неверный статус: помните, что статусы передаются в нижнем регистре, проверяйте строгое равенство.
  • Объект $order не передается: если используете старую версию WooCommerce, возможно, придется получить объект вручную через wc_get_order($order_id).

Практические советы по безопасности и производительности

  • Не выполняйте тяжелые операции в функциях на хуках — используйте очереди или WP-Cron для асинхронной обработки.
  • Проверяйте, что $order — валидный объект перед использованием методов.
  • Для отправки писем используйте функции WooCommerce Mailer, если нужна интеграция с шаблонами.
  • Добавляйте nonce и права доступа, если функция изменяет данные в пользовательском интерфейсе.

Сравнение способов автоматизации при смене статуса заказа

МетодПлюсыМинусыКогда использовать
Хук woocommerce_order_status_changed с кастомным кодомГибкость, полный контроль, без плагиновТребует навыков разработки, возможна ошибка в кодеУникальная логика, интеграции, кастомные задачи
Плагины автоматизации (например, AutomateWoo)Удобный интерфейс, много функций без кодаПлатные, могут влиять на производительностьСтандартные сценарии без глубокого кастома
WP-Cron для отложенных задач после смены статусаАсинхронность, разгрузка сервераЗависит от посещаемости сайта, сложнее настроитьТяжелые операции, массовая обработка
×
День SEO
Время сделать подарок своему WordPress!
-20% на премиум

шаблоны и плагины

Порадуй свой сайт ⋙