wpurok.ru wordpress WPUrok

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

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

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

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

Действие принимает 4 параметра:

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

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

Если вы добавили обработчик на woocommerce_order_status_changed, но не видите ожидаемых результатов (например, не отправляются письма, не меняются данные), проверьте следующее:

  • Правильно ли подключен код (в functions.php темы или через плагин)?
  • Нет ли конфликтов с другими плагинами, которые могут переопределять статусы?
  • Используете ли вы правильные имена статусов (например, processing, completed, а не выполнен)?
  • Подключена ли отладка — можно вывести error_log или использовать плагины для логирования событий.

Пошаговое решение: пример автоматизации при смене статуса заказа

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

add_action('woocommerce_order_status_changed', 'wpurok_order_status_changed_handler', 10, 4);
function wpurok_order_status_changed_handler($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') {
        // Добавляем заметку к заказу
        $order->add_order_note('Заказ автоматически помечен как выполненный.');
    }
}

Чтобы проверить работу, перейдите в админку WooCommerce → Заказы, измените статус вручную на выполнен и убедитесь, что в комментариях заказа появилась заметка.

Пример с отправкой письма при смене статуса на processing

add_action('woocommerce_order_status_changed', 'wpurok_send_custom_email_on_status', 10, 4);
function wpurok_send_custom_email_on_status($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'processing') {
        $to = $order->get_billing_email();
        $subject = 'Ваш заказ принят в обработку';
        $message = 'Здравствуйте! Ваш заказ №' . $order_id . ' сейчас в обработке.';
        wp_mail($to, $subject, $message);
    }
}

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

  • Измените статус заказа в админке WooCommerce на нужный;
  • Проверьте появление заметок в заказе (если добавляете заметку);
  • Проверьте почтовый ящик покупателя для получения писем;
  • При необходимости активируйте логирование ошибок в wp-config.php для отладки (define('WP_DEBUG', true); define('WP_DEBUG_LOG', true););
  • Используйте плагины типа Query Monitor для отслеживания срабатывания хуков.

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

  • Неправильные имена статусов. WooCommerce использует английские slug, например, completed, processing. Использование русских или других вариантов не сработает.
  • Код не в functions.php или плагине. Если код подключен в неправильном месте (например, в шаблоне), он может не сработать.
  • Конфликты с другими плагинами. Некоторые плагины могут отменять стандартные статусы или менять порядок действий.
  • Отсутствие параметра 4 в add_action. Для работы с объектом заказа необходимо указать количество параметров — 4, иначе объект не передастся.

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

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

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

СпособПреимуществаНедостатки
PHP-хук woocommerce_order_status_changedГибкость, полная кастомизация, не требует сторонних плагиновТребует навыков программирования, возможны конфликты
Плагины автоматизации статусов (например, AutomateWoo)Простота настройки, визуальные правила, интеграции с почтой и CRMПлатные, нагрузка на сайт, ограниченная кастомизация
Ручное изменение статусов через админкуПростота, нет кодаНет автоматизации, требует участия оператора
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее