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

Диагностика проблемы: зачем нужно автоматическое управление статусами заказов в WooCommerce

В стандартном WooCommerce все заказы создаются со статусом pending или processing и требуют ручного подтверждения или автоматического перехода в следующий статус после оплаты. Часто возникает задача автоматически менять статус заказа на «одобрен» или «отклонен» в зависимости от определённых условий: сумма заказа, наличие определённых товаров, способ оплаты и другие параметры. Это позволяет ускорить обработку, снизить человеческий фактор и автоматизировать бизнес-процессы.

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

  • Автоматическое одобрение заказов при оплате определённым способом (например, PayPal подтверждённый)
  • Автоматическое отклонение заказов с низкой суммой или с запрещёнными товарами
  • Автоматическое изменение статуса для заказов с определёнными пользовательскими полями

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

Рассмотрим пример, когда заказы с суммой больше 5000 рублей переходят в статус completed (одобрены), а заказы с суммой меньше 1000 рублей автоматически отклоняются (статус cancelled).

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

add_action('woocommerce_thankyou', 'auto_change_order_status_based_on_amount', 10, 1);
function auto_change_order_status_based_on_amount($order_id) {
    if (!$order_id) return;
    $order = wc_get_order($order_id);
    if (!$order) return;

    $total = $order->get_total();
    // Проверяем текущий статус, чтобы не менять уже обработанные заказы
    $status = $order->get_status();

    if ($status !== 'processing' && $status !== 'pending') {
        return; // Уже обработан
    }

    if ($total > 5000) {
        $order->update_status('completed', 'Автоматическое одобрение: сумма больше 5000');
    } elseif ($total < 1000) {
        $order->update_status('cancelled', 'Автоматическое отклонение: сумма меньше 1000');
    }
}

2. Этот хук woocommerce_thankyou срабатывает после успешного оформления заказа, то есть после оплаты (для платёжных систем, поддерживающих возврат статуса).

Добавление условий по товарам в заказе

Если нужно проверить наличие конкретного товара или категории, добавьте внутри функции проверку товаров:

foreach ($order->get_items() as $item) {
    $product_id = $item->get_product_id();
    // Проверяем наличие запрещённого товара с ID 123
    if ($product_id == 123) {
        $order->update_status('cancelled', 'Отклонено: заказ содержит запрещённый товар');
        return;
    }
}

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

  • Оформите тестовый заказ с суммой более 5000 — статус должен автоматически перейти в completed.
  • Оформите заказ с суммой менее 1000 — статус должен стать cancelled.
  • Проверьте, что заказы с промежуточной суммой не меняют статус автоматически.
  • Просмотрите журнал заказов в админке WooCommerce и убедитесь, что комментарии к статусам добавились корректно.

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

  • Статус не меняется: проверьте, что хук woocommerce_thankyou действительно срабатывает для используемого способа оплаты. Для некоторых способов (например, оффлайн) этот хук не вызывается. Можно использовать woocommerce_order_status_pending_to_processing или другие хуки смены статуса.
  • Заказы не обновляются, если уже в статусе processing: добавьте логику обработки нескольких статусов или используйте другой хук.
  • Проблемы с кешированием: очистите кеш сайта и браузера, если не видите изменений.
  • Конфликты с другими плагинами: временно отключите сторонние расширения, которые могут менять статус заказов.

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

  • Не храните критичные бизнес-правила только в коде — лучше создать отдельное административное меню для управления условиями смены статусов.
  • Используйте транзиенты или кэширование, если проверяете сложные условия, чтобы не нагружать БД.
  • Всегда проверяйте права пользователя и безопасность данных при добавлении пользовательских условий.
  • Для масштабируемых решений рассмотрите создание отдельного плагина с возможностью расширения логики.

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

СпособПреимуществаНедостатки
Хук woocommerce_thankyou с PHP-кодом Простота, гибкость, нет дополнительных плагинов Зависит от способа оплаты, может не сработать для оффлайн платежей
Плагины автоматизации заказов (например, AutomateWoo) Графический интерфейс, много условий, интеграции Платные, дополнительная нагрузка на сайт
Использование WP-Cron и кастомных задач Можно ставить задачи по расписанию, не зависит от оплаты Сложнее в реализации, возможны задержки из-за Cron
Как закрыть от индексации старые версии страниц WordPress после смены slug
23.08.2026
Как закрыть дубли страниц от пагинации в WordPress через robots, noindex и canonical
13.08.2026
Как закрыть страницы поиска WordPress от индексации без поломки внутреннего поиска
19.08.2026
Как закрыть страницы авторов в WordPress без потери индексации полезного контента
16.08.2026