wp-code.ru wordpress WP-Codе

Программное отключение неиспользуемых методов оплаты в WooCommerce

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

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

Проверить текущие активные методы оплаты можно через админку WooCommerce в разделе WooCommerce > Настройки > Оплата. Однако если вы хотите динамически менять доступные методы, нужно использовать фильтр woocommerce_available_payment_gateways.

Как отключить методы оплаты по условию через фильтр

Ниже приведён пример кода, который отключает метод оплаты «Чек» (check) и «Наличные» (cod) для заказов с суммой меньше 1000 рублей:

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

    $minimum_amount = 1000; // Минимальная сумма заказа
    $cart_total = WC()->cart->total;

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

    return $available_gateways;
}

Этот код нужно добавить в functions.php вашей темы или в отдельный сниппет через плагин типа Code Snippets.

Пример: отключение метода оплаты по геолокации

Если нужно отключить способ оплаты для определённой страны, например, отключить «Оплату при получении» (cod) для пользователей из России:

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

    $customer_country = WC()->customer->get_billing_country();

    if ($customer_country === 'RU' && isset($available_gateways['cod'])) {
        unset($available_gateways['cod']);
    }

    return $available_gateways;
}

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

  1. Добавьте код в functions.php или через сниппет.
  2. Обновите страницу оформления заказа.
  3. Проверьте список доступных методов оплаты в зависимости от условий (сумма корзины, страна и т.п.).
  4. Для проверки можно временно добавить error_log или var_dump внутри функции.

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

  • Методы оплаты не отключаются: проверьте, что используете правильные ID методов. Их можно увидеть в WooCommerce > Настройки > Оплата в URL или в коде плагинов оплаты.
  • Код влияет на админку: всегда добавляйте проверку is_admin(), чтобы не ломать админ-панель.
  • Ошибка при обращении к корзине вне фронта: фильтр срабатывает и в админке, поэтому нужна защита от вызова WC()->cart при отсутствии корзины.

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

  • Не используйте жёстко прописанные ID методов оплаты без проверки, так как они могут измениться при обновлениях WooCommerce или плагинов.
  • Для сложных условий используйте кэширование результата или минимизируйте количество запросов к базе.
  • Тестируйте код на staging-сайте, чтобы исключить конфликты с другими плагинами.

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

МетодГибкостьПростотаЗависимость от плагинов
Отключение через админку WooCommerceНизкая (статично)Очень простоНет
Фильтр woocommerce_available_payment_gateways в кодеВысокая (динамически)Средняя (требует программирования)Нет
Плагины для управления методами оплатыОчень высокаяПростоДа
×

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

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

пишет статьи

готовит SEO

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

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