wordpressa.ru wordpress wordpressa.ru

Как использовать фильтр woocommerce_order_status_changed для автоматизации заказов WooCommerce

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

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

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

do_action( 'woocommerce_order_status_changed', $order_id, $old_status, $new_status, $order );

Где параметры:

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

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

Если автоматизация на смену статуса заказов не работает, нужно проверить:

  • Подключен ли ваш код в functions.php или плагине и нет ли синтаксических ошибок;
  • Правильно ли указан хук и параметры;
  • Логика в обработчике корректно сравнивает статусы;
  • Нет ли конфликтов с другими плагинами, которые могут переопределять статусы;
  • Включен ли режим отладки и записываются ли ошибки в debug.log;
  • Используется ли правильный тип статуса (без префикса wc- при сравнении).

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

Задача: при переходе заказа из статуса processing в completed автоматически добавить заметку к заказу и отправить кастомное уведомление по email.

1. Добавляем обработчик в файл functions.php вашей темы или в кастомный плагин

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

        // Отправляем кастомное письмо
        $to = $order->get_billing_email();
        $subject = 'Ваш заказ #'.$order_id.' выполнен';
        $message = 'Здравствуйте! Ваш заказ успешно выполнен и отправлен.';
        wp_mail($to, $subject, $message);
    }
}

2. Проверяем, что код подключен и ошибок нет

Включите WP_DEBUG и проверьте wp-content/debug.log на наличие ошибок. Проверьте, что почта отправляется, используя SMTP или логирование писем.

3. Тестируем смену статуса вручную

Перейдите в WooCommerce > Заказы, выберите заказ со статусом processing, измените статус на completed и сохраните. Проверьте:

  • Появилась ли заметка в заказе;
  • Пришло ли письмо на e-mail клиента.

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

  • В админке в заказе должна появиться новая заметка с текстом из add_order_note.
  • Пользователь должен получить email с указанным письмом (лучше проверить через тестовый заказ).
  • В журнале ошибок WP_DEBUG не должно быть сообщений, связанных с вашим кодом.

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

  • Ошибка: Письмо не отправляется.
    Причина: Неправильно настроена почта WordPress или используется неработающий wp_mail.
    Решение: Настройте SMTP через плагин (например, WP Mail SMTP) или проверьте локальный почтовый сервер.
  • Ошибка: Код не срабатывает.
    Причина: Функция не подключена в правильном месте или ошибка в синтаксисе.
    Решение: Проверьте подключение к functions.php, включите отладку, используйте error_log для отладки.
  • Ошибка: Статусы сравниваются с префиксом wc-.
    Причина: WooCommerce в хук передает статусы без префиксов.
    Решение: Сравнивайте статусы именно так, например 'processing', 'completed'.

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

  • Не выполняйте тяжелые операции напрямую в обработчике — если нужно, создайте очередь задач через Action Scheduler.
  • Проверяйте права пользователя, если добавляете действия, инициируемые по API.
  • Логируйте критичные ошибки для последующего анализа, не выводите ошибки на публичный сайт.
  • Используйте фильтры и действия WooCommerce, не меняйте напрямую базу данных.

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

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

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее