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

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

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

Типичные сценарии:

  • Отключить "Оплату при получении" для товаров с цифровой доставкой.
  • Отключить платёжные системы, не поддерживающие валюту корзины.
  • Отключить метод оплаты, если сумма заказа меньше минимального порога.

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

Для диагностики полезно вывести текущие доступные платёжные методы в корзине и на странице оформления заказа. В файл functions.php темы или в плагин добавьте код:

add_action('woocommerce_review_order_before_payment', function() {
    $available_gateways = WC()->payment_gateways()->get_available_payment_gateways();
    echo '<pre>';
    print_r(array_keys($available_gateways));
    echo '</pre>';
});

После этого на странице оформления заказа увидите список идентификаторов платёжных методов, доступных в текущих условиях.

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

WooCommerce позволяет фильтровать доступные платёжные методы с помощью фильтра woocommerce_available_payment_gateways. На его основе можно реализовать любую условную логику.

Пример отключения метода оплаты cod (Оплата при получении), если в корзине есть цифровой товар:

add_filter('woocommerce_available_payment_gateways', 'disable_cod_for_digital_products');
function disable_cod_for_digital_products($gateways) {
    if (is_admin()) return $gateways; // не трогаем админку

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

    if ($has_digital && isset($gateways['cod'])) {
        unset($gateways['cod']);
    }

    return $gateways;
}

Если у вас нет таксономии product_type с термином digital, лучше ориентироваться на тип WooCommerce:

if ($cart_item['data']->is_downloadable()) {
    // товар цифровой
}

Другой пример — отключение метода оплаты, если сумма корзины меньше 1000 рублей:

add_filter('woocommerce_available_payment_gateways', 'disable_gateway_min_amount');
function disable_gateway_min_amount($gateways) {
    $minimum = 1000; // порог в рублях
    if (WC()->cart->total < $minimum) {
        if (isset($gateways['bacs'])) { // банковский перевод
            unset($gateways['bacs']);
        }
    }
    return $gateways;
}

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

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

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

  • Метод оплаты не отключается: убедитесь, что фильтр woocommerce_available_payment_gateways не перезаписывается другими плагинами. Проверьте приоритет фильтра (можно увеличить, например, до 99).
  • Условия проверки товаров неверные: используйте методы WooCommerce для проверки типа товара (is_downloadable(), is_virtual()), а не только таксономии.
  • Изменения не видны в админке: фильтр работает только на фронтенде, для админки его отключают через is_admin().
  • Не учитывается валюта: используйте get_woocommerce_currency() для проверки валюты и отключайте неподдерживаемые методы.

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

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

Сравнение способов реализации отключения платёжных систем

МетодПреимуществаНедостаткиПример
Фильтр woocommerce_available_payment_gateways Гибкость, можно реализовать любые условия, без сторонних плагинов Требует программирования, нужно тестировать
add_filter(...)
Плагины по условному отображению оплаты Простота настройки без кода Могут влиять на производительность, ограничены функционалом WooCommerce Conditional Shipping and Payments
Использование специализированных кастомных полей или мета для товаров Удобно для сложных правил (например, по атрибутам) Сложнее поддерживать, требует настройки интерфейса Код с проверкой мета-данных товаров

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

⭐⭐⭐⭐⭐
WooCommerce: как установить ограничение на количество товаров в корзине
20.04.2026
Создать динамические поля в формах регистрации WordPress с примерами
29.03.2026
Автоматическое удаление старых заказов WooCommerce по статусу
23.12.2025
Как удалить неиспользуемые метаданные из базы WordPress без плагинов
24.04.2026
Как создать уникальный виджет WordPress с настройками и примерами кода
28.11.2025
×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙