wpcodes.ru wordpress WP Codеs

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

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

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

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

Если автоматизация, основанная на этом хуке, не работает, проверьте следующие моменты:

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

Пошаговое решение: пример кода для отправки уведомления при смене статуса на 'completed'

Ниже пример, как отследить, когда заказ переходит в статус completed, и отправить кастомное письмо клиенту:

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

Разместите этот код в файле functions.php вашей дочерней темы или в собственном плагине.

Как проверить, что код работает

  • Создайте тестовый заказ в WooCommerce.
  • Измените статус заказа на completed вручную в админке.
  • Проверьте, что на электронную почту, указанную в заказе, пришло письмо.

Расширение: обновление стороннего API при смене статуса заказа

Если нужно отправлять данные о смене статуса в сторонний сервис, используйте пример:

add_action('woocommerce_order_status_changed', 'sync_order_status_to_api', 10, 4);
function sync_order_status_to_api($order_id, $old_status, $new_status, $order) {
    $api_url = 'https://example.com/api/update-order-status';
    $response = wp_remote_post($api_url, [
        'body' => json_encode([
            'order_id' => $order_id,
            'old_status' => $old_status,
            'new_status' => $new_status
        ]),
        'headers' => [
            'Content-Type' => 'application/json'
        ]
    ]);

    if (is_wp_error($response)) {
        error_log('Ошибка отправки статуса заказа: ' . $response->get_error_message());
    }
}

Частые ошибки при работе с хуком woocommerce_order_status_changed

  • Неправильное количество аргументов в add_action: Для получения 4 параметров надо явно указать 4 в четвертом аргументе функции add_action. По умолчанию передаётся 1.
  • Проверка статусов со строчными буквами: Статусы всегда в нижнем регистре, сравнивайте именно так.
  • Проблемы с отправкой почты: Убедитесь, что на сервере настроен SMTP или почтовая функция работает корректно.
  • Конфликты с другими плагинами: Некоторые плагины могут менять логику изменения статусов, проверьте отключением других плагинов.

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

  • Не выполняйте тяжелых операций в хук напрямую — лучше ставьте задачи в очередь (например, через WP-Cron или внешние сервисы).
  • Проверяйте входящие данные и используйте логирование для отладки.
  • Ограничьте действия только необходимыми статусами, чтобы избежать лишних вызовов.

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

ВариантПлюсыМинусыПример
Использование woocommerce_order_status_changedПрямой, нативный, гибкийТребует навыков программированияКод из статьи
Плагин автоматизации (например, AutomateWoo)Прост в использовании, визуальный интерфейсПлатный, ограниченная кастомизацияНастройка в UI плагина
Использование сторонних сервисов (Zapier, Integromat)Интеграция с внешними сервисами без кодаЗависимость от внешних сервисов, задержкиWebhook + API
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее