wpmake.ru wordpress WPMake

Как использовать хук action WooCommerce order status changed для кастомных действий

Что такое хук action WooCommerce order status changed и зачем он нужен

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

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

Если ваш код на woocommerce_order_status_changed не срабатывает, проверьте:

  • Правильно ли добавлен хук — хук должен регистрироваться через add_action в functions.php или в плагине.
  • Передача параметров — функция должна принимать именно три параметра, иначе параметры будут некорректны.
  • Не перезаписывается ли хук другими плагинами или темой.
  • Активирован ли WooCommerce и не отключен ли этот хук в настройках.

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

Пример базового использования хука с логированием изменений статуса заказа:

add_action('woocommerce_order_status_changed', 'wpmake_order_status_changed', 10, 3); 
function wpmake_order_status_changed($order_id, $old_status, $new_status) {
    if (!$order_id) return;
    $order = wc_get_order($order_id);
    if (!$order) return;
    error_log("Заказ #" . $order_id . " изменил статус с $old_status на $new_status");
    // Добавьте здесь нужные действия
}

Для отправки email при переходе заказа в статус "завершён":

add_action('woocommerce_order_status_changed', 'wpmake_notify_on_completed', 10, 3);
function wpmake_notify_on_completed($order_id, $old_status, $new_status) {
    if ($new_status !== 'completed') return;
    $order = wc_get_order($order_id);
    if (!$order) return;

    $to = $order->get_billing_email();
    $subject = 'Ваш заказ #' . $order_id . ' завершён';
    $message = 'Спасибо за покупку! Ваш заказ успешно завершён.';
    wp_mail($to, $subject, $message);
}

Чек-лист для внедрения кастомных действий по изменению статуса заказа

  • Подключите хук с приоритетом и количеством параметров (10, 3).
  • Проверяйте валидность ID заказа и объекта заказа.
  • Используйте строгие проверки статусов, чтобы не выполнять лишние действия.
  • Логируйте ключевые события для отладки.
  • Тестируйте на тестовом заказе с разными сценариями.

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

Чтобы убедиться, что хук работает:

  • Создайте тестовый заказ в WooCommerce.
  • Измените статус заказа вручную (например, с processing на completed).
  • Проверьте логи сервера (error_log) на наличие записей, если вы логировали.
  • Убедитесь, что кастомные действия (например, email) были выполнены.

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

  • Неверное количество параметров в функции — функция должна принимать 3 параметра. Иначе параметры будут пустыми или некорректными.
  • Отсутствие проверки объекта заказа — может привести к фатальным ошибкам, если wc_get_order вернёт false.
  • Использование статусов без префикса — WooCommerce использует статусы без префикса wc-, например completed, а не wc-completed.
  • Конфликт хуков — другие плагины могут вмешиваться, отключать или переназначать хук. Проверяйте в режиме отладки.

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

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

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

МетодПростотаГибкостьКомпромиссы
Хук woocommerce_order_status_changed в functions.phpВысокаяВысокаяПрямое вмешательство, может запутаться при множестве изменений
Плагин с регистрацией хукаСредняяВысокаяДополнительный плагин увеличивает нагрузку
Отдельный сервис с вебхуком по API WooCommerceСложнееОчень высокаяНужна настройка внешнего сервера и безопасности
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙