WooCommerce: автоматическое отключение платёжных систем по условиям заказа

Почему важно автоматически отключать платёжные системы в WooCommerce

В интернет-магазинах на WooCommerce бывают ситуации, когда необходимо ограничить методы оплаты в зависимости от условий заказа: суммы, категории товаров, страны доставки, статуса пользователя и других параметров. Это помогает избежать ошибок, снизить риски мошенничества и улучшить UX.

Диагностика проблемы: как понять, что платёжные системы не фильтруются

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

Если вы столкнулись с этими симптомами, значит, нужна кастомизация.

Пошаговое решение: отключаем платёжные системы по условиям

1. Используем фильтр woocommerce_available_payment_gateways

Этот фильтр позволяет изменить массив доступных платёжных способов на странице оформления заказа. В нём можно реализовать любую бизнес-логику.

2. Пример кода для отключения метода "Оплата при доставке" (cod), если сумма заказа меньше 1000 рублей

add_filter('woocommerce_available_payment_gateways', 'custom_disable_payment_gateways_by_order_amount');
function custom_disable_payment_gateways_by_order_amount($available_gateways) {
    if (is_admin()) return $available_gateways; // не менять в админке

    $minimum_amount = 1000;
    $order_total = WC()->cart->total;

    if ($order_total < $minimum_amount) {
        if (isset($available_gateways['cod'])) {
            unset($available_gateways['cod']);
        }
    }
    return $available_gateways;
}

3. Отключение оплаты по предоплате для определённой категории товаров

add_filter('woocommerce_available_payment_gateways', 'disable_payment_for_category');
function disable_payment_for_category($available_gateways) {
    if (is_admin()) return $available_gateways;

    $target_category = 'vip-products';
    $disable_gateway = 'bacs'; // банковский перевод

    $has_target_category = false;
    foreach (WC()->cart->get_cart() as $cart_item) {
        if (has_term($target_category, 'product_cat', $cart_item['product_id'])) {
            $has_target_category = true;
            break;
        }
    }

    if ($has_target_category && isset($available_gateways[$disable_gateway])) {
        unset($available_gateways[$disable_gateway]);
    }

    return $available_gateways;
}

Как проверить, что решение сработало

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

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

  • Код не срабатывает в админке: фильтр применяется и в админке — нужно проверять is_admin() и возвращать без изменений.
  • Ошибки из-за кеширования: если включено кеширование страниц, изменения могут не применяться мгновенно — отключите кеш на страницах оформления заказа.
  • Неверные ключи платёжных систем: используйте точные ID методов оплаты, которые можно посмотреть в настройках WooCommerce или через var_dump($available_gateways).
  • Условия не учитывают все варианты: обязательно тестируйте разные комбинации товаров и сумм.

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

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

Сравнение способов решения задачи

СпособПлюсыМинусы
Фильтр woocommerce_available_payment_gateways в functions.phpБыстро, без плагинов, гибкоТребует навыков PHP, возможные ошибки в коде
Плагины фильтрации платежей (например, Conditional Payment Gateways)Простой интерфейс, готовые правилаМожет быть платным, нагрузка на сайт
Модификация шаблонов WooCommerceПолный контроль над выводомСложнее поддерживать, не фильтрует методы, а только скрывает

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как удалить неиспользуемые метаключи в WooCommerce: практическое руководство
28.04.2026
Как создать собственный REST API endpoint в WordPress: подробное руководство
01.12.2025
WooCommerce: как автоматически удалять неактивные заказы и очищать базу
05.05.2026
Как удалить все очередные задачи в WordPress Cron: практическое руководство
09.11.2025
WooCommerce: как установить ограничение на количество товаров в корзине
20.04.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше