wpcorp.ru wordpress WP Corp

WooCommerce: автоматическое отклонение заказов по заданным условиям

В чём проблема с ручным управлением заказами в WooCommerce

При большом потоке заказов вручную проверять и отклонять неподходящие становится слишком трудозатратно. Нужно автоматизировать процесс, чтобы экономить время и избежать ошибок в обработке заказов, например, при подозрении на мошенничество, неправильных данных или неподходящих товарах.

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

Часто встречающиеся сценарии для автоматического отклонения заказов:

  • Заказы с определёнными почтовыми индексами или регионами, куда доставка невозможна.
  • Заказы с товарами, запрещёнными для продажи определённым группам клиентов.
  • Заказы от новых пользователей с подозрительными данными (например, IP, email).
  • Заказы с методами оплаты, требующими дополнительной верификации.

Определите условия, которые вы хотите контролировать, чтобы создать правильный фильтр.

Пошаговое решение: добавляем автоматическое отклонение через хук WooCommerce

Для автоматического отклонения заказов используем хук woocommerce_checkout_order_processed. В нём проверяем условия и меняем статус заказа на "отклонён" (cancelled), если условие выполняется.

add_action('woocommerce_checkout_order_processed', 'auto_cancel_order_by_conditions', 10, 3);
function auto_cancel_order_by_conditions($order_id, $posted_data, $order) {
    // Проверяем, что объект заказа получен
    if (!$order instanceof WC_Order) {
        $order = wc_get_order($order_id);
    }

    // Пример условия: запрещённый почтовый индекс
    $forbidden_postcodes = array('123456', '654321');
    $shipping_postcode = $order->get_shipping_postcode();

    if (in_array($shipping_postcode, $forbidden_postcodes)) {
        // Меняем статус заказа на cancelled
        $order->update_status('cancelled', 'Заказ автоматически отклонён из-за запрещённого почтового индекса');
    }
}

Этот код автоматически отменит заказ, если почтовый индекс доставки попадает в запрещённый список.

Добавляем проверку на товар в заказе

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

add_action('woocommerce_checkout_order_processed', 'auto_cancel_order_by_product', 10, 3);
function auto_cancel_order_by_product($order_id, $posted_data, $order) {
    if (!$order instanceof WC_Order) {
        $order = wc_get_order($order_id);
    }

    $forbidden_product_ids = array(15, 22, 37); // ID запрещённых товаров

    foreach ($order->get_items() as $item) {
        if (in_array($item->get_product_id(), $forbidden_product_ids)) {
            $order->update_status('cancelled', 'Заказ автоматически отклонён из-за запрещённых товаров');
            return; // достаточно одного запрещённого товара
        }
    }
}

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

  • Создайте тестовый заказ с запрещённым почтовым индексом или товаром из списка.
  • После оформления заказа зайдите в панель WooCommerce → Заказы и убедитесь, что статус заказа сразу сменился на Отменён.
  • Проверьте, что в комментариях к заказу появилась запись с причиной отмены.
  • Убедитесь, что другие заказы, не подпадающие под критерии, проходят без изменений.

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

  • Не меняется статус заказа: Проверьте, что в функции используется правильный объект заказа (WC_Order), и что хук подключён с правильным приоритетом и параметрами.
  • Дублирование статусов или конфликт с другими плагинами: Убедитесь, что другие плагины не перезаписывают статус заказа позже. Для этого можно повысить приоритет хука, например, до 20.
  • Неверные ID товаров или почтовых индексов: Проверьте список запрещённых значений на актуальность и корректность.
  • Проблемы с кешем: Очистите кеш сайта и браузера, чтобы увидеть изменения.

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

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

Сравнение вариантов реализации автоматического отклонения заказов

МетодПлюсыМинусы
Хук woocommerce_checkout_order_processed с кастомным кодомГибкость, можно настроить любые условия, бесплатноТребует навыков разработки, нужно тестировать
Плагины автоматизации заказов (например, AutomateWoo)Удобный интерфейс, много готовых правилПлатно, ограничена кастомизация
Ручная проверка и отклонениеПростота, нет дополнительной настройкиБольшие временные затраты, риск ошибок
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙