wp-kurs.ru wordpress WP-Kurs

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

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

Хук woocommerce_order_status_changed вызывается при изменении статуса заказа в WooCommerce. Его используют для запуска автоматических действий, например, отправки уведомлений, обновления сторонних сервисов или изменения данных заказа. Это ключевой инструмент для автоматизации бизнес-процессов в интернет-магазине.

Диагностика проблемы: почему автоматизация на смену статуса не работает

Если код на этот хук не срабатывает, вероятные причины:

  • Хук подключён неправильно (например, не в functions.php или в неподходящем месте);
  • Используется неправильный синтаксис или параметры в функции обратного вызова;
  • Другие плагины или тема конфликтуют и блокируют выполнение;
  • Кэширование, которое не пропускает вызов хуков;
  • Неправильная проверка статуса внутри функции.

Пошаговое решение: как правильно подключить и использовать хук

1. Подключаем функцию к хуку в файле functions.php вашей темы или в отдельном плагине:

add_action('woocommerce_order_status_changed', 'my_custom_order_status_changed', 10, 4);

2. Пишем функцию обратного вызова, которая принимает четыре параметра:

  • $order_id — ID заказа;
  • $old_status — старый статус заказа;
  • $new_status — новый статус заказа;
  • $order — объект WC_Order.
function my_custom_order_status_changed($order_id, $old_status, $new_status, $order) {
    // Например, логируем смену статуса
    error_log("Заказ #$order_id изменил статус с $old_status на $new_status");

    // Действие только при смене на 'completed'
    if ($new_status === 'completed') {
        // Добавляем заметку к заказу
        $order->add_order_note('Заказ автоматически помечен как выполненный.');

        // Отправляем кастомное письмо
        $mailer = WC()->mailer();
        $mails = $mailer->get_emails();
        if (!empty($mails['WC_Email_Customer_Completed_Order'])) {
            $mails['WC_Email_Customer_Completed_Order']->trigger($order_id);
        }
    }
}

Проверка результата: как убедиться, что код сработал

  • Посмотрите логи сервера на наличие записи, добавленной через error_log. Если лога нет — код не сработал.
  • Перейдите в админку WooCommerce, откройте заказ и проверьте наличие заметки, добавленной вашей функцией.
  • Проверьте почтовый ящик, указанный в заказе, на наличие письма о смене статуса.
  • Для отладки можно временно добавить вывод через wp_mail или error_log в ключевых местах.

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

  • Функция не вызывается — убедитесь, что add_action вызван в правильном месте и нет синтаксических ошибок.
  • Использование неправильного количества параметров — хук принимает 4 параметра, нужно задать это в add_action (четвёртый параметр).
  • Проблемы с кешированием — если вы используете кеширующие плагины (например, LiteSpeed Cache), отключите кеш для страниц админки и страниц заказа, чтобы хук срабатывал корректно.
  • Конфликты с другими плагинами — временно отключите другие плагины, чтобы проверить влияние.

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

  • Не выполняйте в хуке тяжёлые операции (например, вызовы внешних API) напрямую. Используйте WP Cron или очередь задач.
  • Проверяйте тип и валидность данных перед использованием в функции.
  • Для крупных магазинов логируйте действия в отдельный файл, чтобы не засорять стандартный лог PHP.
  • Избегайте дублирования действий при повторных вызовах хука.

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

МетодПлюсыМинусы
Прямое использование woocommerce_order_status_changedГибкость, полный контроль, отсутствие дополнительных плагиновТребует знания PHP, возможны ошибки при неправильном коде
Плагины автоматизации (например, AutomateWoo)Удобный UI, готовые шаблоны, поддержка без кодаНагрузка на сайт, лицензии, ограниченная кастомизация
Кастомный плагин с WP Cron для отложенных задачОтложенное выполнение, не влияет на скорость заказаУсложнённая реализация, требуется настройка WP Cron
×
Делай сайт лучше!!

-20% на премиум темы и плагины

Использовать скидку ⋙