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

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

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

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

  • Отключить оплату при самовывозе;
  • Скрыть оплату картой для новых клиентов;
  • Отключить наложенный платеж при сумме заказа выше определённого порога;
  • Скрыть способы оплаты для определённых стран.

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

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

add_filter('woocommerce_available_payment_gateways', function($gateways) {
    error_log('Доступные платежные методы: ' . implode(', ', array_keys($gateways)));
    return $gateways;
});

Это поможет увидеть, какие методы доступны по умолчанию и проверить, что фильтр работает.

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

Основной инструмент — фильтр woocommerce_available_payment_gateways. Через него можно удалить ненужные методы из массива доступных.

Пример 1: отключить "наложенный платёж" для заказов свыше 5000 рублей

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

    $minimum_amount = 5000;
    $total = WC()->cart->total;

    if ($total > $minimum_amount && isset($gateways['cod'])) {
        unset($gateways['cod']);
    }
    return $gateways;
});

Пример 2: отключить все методы, кроме PayPal, для пользователей с ролью "subscriber"

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

    if (current_user_can('subscriber')) {
        foreach ($gateways as $key => $gateway) {
            if ($key !== 'paypal') {
                unset($gateways[$key]);
            }
        }
    }
    return $gateways;
});

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

  • Откройте страницу оформления заказа в режиме гостя и с разными ролями;
  • Измените сумму в корзине и проверьте, изменились ли доступные методы;
  • Проверьте работу на разных способах доставки, если применимо;
  • Проверьте логи сервера (error_log), если добавляли для отладки.

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

  • Методы не отключаются: убедитесь, что фильтр добавлен в правильном месте и с правильным приоритетом (обычно 10), а условие срабатывает;
  • Проблемы с кэшированием: если вы используете кеширующие плагины, очистите кеш после изменений;
  • Ошибка в определении роли пользователя: для проверки ролей используйте current_user_can(), а не wp_get_current_user()->roles напрямую;
  • Ошибки в админке из-за фильтра: используйте is_admin() для исключения фильтра в админ-панели.

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

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

Сравнение подходов: использование кода против плагинов

МетодПлюсыМинусы
Ручной код в functions.phpГибкость, контроль, нет нагрузки от плагинаТребует навыков PHP, возможны ошибки при обновлениях
Плагины для ограничения платежей (например, Conditional Shipping and Payments)Удобный интерфейс, поддержка, быстрый стартДополнительная нагрузка, ограничена функциональность плагина
WooCommerce: как автоматически отключать платёжные методы при определённых условиях
07.07.2026
Как запретить доступ к страницам в WordPress по IP адресу
12.03.2026
Как установить лимит на количество постов в WordPress на странице архива
08.03.2026
Как установить и настроить OmniVideo в WordPress
25.02.2026
Как создать динамическую таблицу в WordPress с помощью шорткода
02.12.2025