WooCommerce: автоматическое отключение неактивных методов оплаты

Диагностика проблемы с неактивными методами оплаты

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

Чтобы проверить, есть ли такие методы, выполните следующие шаги:

  • Перейдите в WooCommerce → Настройки → Платежи и посмотрите, какие методы включены.
  • На странице оформления заказа проверьте, какие из включенных методов действительно доступны для конкретного заказа (по условиям: валюта, регион, сумма заказа и т.п.).
  • Если метод оплаты виден, но при попытке оплаты он не работает или вызывает ошибку, значит он фактически неактивен.

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

Цель — программно скрывать из списка оплаты те методы, которые не применимы для текущего заказа.

WooCommerce предоставляет хук фильтра 'woocommerce_available_payment_gateways', с помощью которого можно отфильтровать методы.

Пример кода для functions.php вашей темы или плагина:

add_filter('woocommerce_available_payment_gateways', 'disable_inactive_payment_gateways', 10, 1);
function disable_inactive_payment_gateways($available_gateways) {
    if (is_admin()) return $available_gateways; // Не трогаем админку

    $cart = WC()->cart;
    if (!$cart) return $available_gateways;

    foreach ($available_gateways as $gateway_id => $gateway) {
        // Проверяем условие активности для каждого метода
        // Например, отключаем метод, если сумма заказа меньше минимальной или для недопустимой валюты

        // Минимальная сумма для метода
        $min_amount = isset($gateway->min_amount) ? $gateway->min_amount : 0;
        if ($min_amount > 0 && $cart->total < $min_amount) {
            unset($available_gateways[$gateway_id]);
            continue;
        }

        // Пример проверки валюты
        $allowed_currencies = isset($gateway->allowed_currencies) ? $gateway->allowed_currencies : [];
        if (!empty($allowed_currencies) && !in_array(get_woocommerce_currency(), $allowed_currencies)) {
            unset($available_gateways[$gateway_id]);
            continue;
        }

        // Добавьте свои условия для отключения
    }

    return $available_gateways;
}

В этом примере можно расширять условия, например, по геолокации, по ролям пользователей, по типам товаров в корзине и т.д.

Как добавить минимальные суммы и валюты в методы оплаты

Чтобы использовать кастомные свойства min_amount и allowed_currencies, добавьте код, например, в woocommerce_payment_gateways или настройте методы оплаты вручную:

add_filter('woocommerce_payment_gateways', 'add_custom_gateway_settings');
function add_custom_gateway_settings($gateways) {
    foreach ($gateways as $gateway) {
        // Пример: для платежного шлюза 'cod' задаём минимальную сумму и валюты
        if ($gateway->id === 'cod') {
            $gateway->min_amount = 1000; // минимальная сумма 1000
            $gateway->allowed_currencies = ['RUB', 'USD'];
        }
    }
    return $gateways;
}

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

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

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

  • Методы оплаты не исчезают: Проверьте, что код подключён и не вызывает ошибок PHP. Убедитесь, что фильтр применяется в правильном месте (в functions.php или в плагине).
  • Ошибка «Call to a member function total() on null»: Убедитесь, что корзина инициализирована, добавьте проверку if (!WC()->cart) return $available_gateways;.
  • Методы оплаты пропадают у администраторов: Добавьте условие if (is_admin()) return $available_gateways;, чтобы не мешать работе админки.
  • Условия неправильные или не работают: Проверьте, что используемые свойства (например, min_amount) реально передаются в объект платежного шлюза.

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

  • Не храните чувствительные данные (API ключи, секреты) в свойствах объектов методов оплаты, если они используются в фильтрах.
  • Старайтесь минимизировать количество условий в фильтре, чтобы не замедлять загрузку страницы оформления заказа.
  • Если проверка условий сложная (например, геолокация по IP), кэшируйте результаты, чтобы не выполнять одно и то же несколько раз.
  • Для комплексных сценариев используйте специализированные плагины, например, Clearfy Pro умеет оптимизировать методы оплаты и отключать неиспользуемые элементы.

Сравнение способов автоматического отключения методов оплаты

СпособПлюсыМинусыПример использования
Код в functions.phpГибкость, полный контроль, бесплатноТребует навыков, возможные ошибки при обновлениях WooCommerceФильтр woocommerce_available_payment_gateways
Плагин-менеджер способов оплатыПростота настройки, поддержка, обновленияМожет быть платным, лишние функцииПлагины типа Payment Gateways per Product
Использование Clearfy ProОптимизация, дополнительные настройки безопасностиПлатный продуктClearfy Pro

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

⭐⭐⭐⭐⭐
Как удалить кэш в WordPress: практические способы и примеры
30.09.2026
WooCommerce: как отключить переход в корзину и сразу вести на оформление заказа
09.08.2026
Автоматическое удаление спама в комментариях WordPress: лучшие плагины и примеры кода
18.09.2026
Оптимизация загрузки шрифтов в WordPress: практические решения для ускорения сайта
23.09.2026
Как использовать REST API в WordPress для создания простого плагина
26.09.2026
×
до 3225₽

Продавай темы и плагины WordPress!

Лови с каждой продажи

Начать ⋙