Как отключать способы оплаты в WooCommerce при минимальной сумме заказа

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

Такой подход удобен тем, что логика остается в одном месте, не зависит от оформления темы и не ломается при обновлении страниц оформления заказа. Ниже разберем, как диагностировать проблему, выбрать способ реализации и проверить, что ограничение работает только там, где нужно.

Когда это действительно нужно

Чаще всего ограничение по минимальной сумме используют в трех случаях: при оплате наложенным платежом, при ручной оплате по счету и при дорогой доставке, где мелкие заказы экономически невыгодны. Иногда это еще и способ убрать лишние варианты оплаты на этапе тестирования магазина, чтобы не путать покупателей.

Важно не смешивать эту задачу с ограничением корзины по количеству товаров или весу. Здесь мы работаем именно с суммой заказа и списком доступных платежных методов.

Диагностика: что проверить до внедрения

Прежде чем писать код, нужно понять, от какой суммы вы считаете заказ: от cart_contents_total, от суммы с учетом скидок, или от итоговой суммы после доставки и налогов. В WooCommerce эти значения отличаются, и из-за этого правило может срабатывать не так, как ожидается.

Проверьте, где именно должен считаться порог

  • Если ограничение зависит от товаров в корзине, используйте сумму товаров без доставки.
  • Если правило должно учитывать скидки купонов, смотрите на итог корзины после пересчета.
  • Если ограничение связано с логистикой, иногда логичнее проверять сумму вместе с доставкой, но это уже отдельная бизнес-логика.

Для большинства магазинов безопаснее начинать с суммы товаров в корзине без доставки. Это предсказуемо для покупателя и проще для поддержки.

Проверьте, не конфликтует ли правило с другими плагинами

Если у вас уже стоят плагины для платежей, доставки или B2B-логики, они тоже могут менять список шлюзов через фильтр woocommerce_available_payment_gateways. В таком случае важно не отключать все подряд, а аккуратно проверять нужные методы по ID.

ПодходПлюсыМинусы
Код через фильтр WooCommerceКонтроль, прозрачная логика, не нужен лишний плагинНужен доступ к теме или мини-плагину
Плагин для правил оплатыБыстрая настройка без кодаЗависимость от стороннего решения, лишняя нагрузка
Кастомная логика в темеМожно быстро внедритьРиск потерять изменения при смене темы

Пошаговое решение через код

Надежнее всего вынести логику в мини-плагин или в functions.php дочерней темы. Если это магазин на продакшене, мини-плагин предпочтительнее: правило не исчезнет при обновлении темы.

Шаг 1. Добавьте фильтр доступных способов оплаты

<?php
add_filter( 'woocommerce_available_payment_gateways', 'wproot_limit_gateways_by_min_order_amount' );

function wproot_limit_gateways_by_min_order_amount( $gateways ) {
    if ( is_admin() ) {
        return $gateways;
    }

    if ( ! function_exists( 'WC' ) || ! WC()->cart ) {
        return $gateways;
    }

    $min_amount = 3000; // минимальная сумма заказа в валюте магазина
    $current_amount = (float) WC()->cart->get_cart_contents_total();

    if ( $current_amount < $min_amount ) {
        // Уберите только те методы, которые не должны быть доступны на маленьких заказах.
        unset( $gateways['cod'] );
        unset( $gateways['bacs'] );
    }

    return $gateways;
}

В этом примере скрываются cod и bacs, если сумма товаров в корзине меньше 3000. Идентификаторы шлюзов могут отличаться, поэтому сначала проверьте их в настройках платежей или в коде плагина.

Шаг 2. Если нужно, учитывайте скидки

Иногда магазин считает минимальную сумму уже после купона. Тогда вместо get_cart_contents_total() можно использовать итог корзины, но здесь важно не перепутать сумму до и после налогов. Для большинства задач лучше сначала протестировать оба варианта на staging-среде.

<?php
add_filter( 'woocommerce_available_payment_gateways', 'wproot_limit_gateways_after_discount' );

function wproot_limit_gateways_after_discount( $gateways ) {
    if ( is_admin() || ! function_exists( 'WC' ) || ! WC()->cart ) {
        return $gateways;
    }

    $min_amount = 3000;
    $current_amount = (float) WC()->cart->get_total( 'edit' );

    if ( $current_amount < $min_amount ) {
        unset( $gateways['cod'] );
    }

    return $gateways;
}

Этот вариант стоит использовать только после проверки, потому что get_total() может включать в себя больше компонентов, чем вам нужно. Если правило начинает срабатывать неожиданно, вернитесь к сумме товаров без доставки.

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

Не всегда нужно отключать все методы сразу. Иногда достаточно скрыть только один способ, например наложенный платеж, а банковский перевод оставить доступным. Тогда логика должна проверять конкретный шлюз по ID и не трогать остальные.

Отключение только одного метода

<?php
add_filter( 'woocommerce_available_payment_gateways', 'wproot_disable_cod_below_threshold' );

function wproot_disable_cod_below_threshold( $gateways ) {
    if ( is_admin() || ! function_exists( 'WC' ) || ! WC()->cart ) {
        return $gateways;
    }

    $min_amount = 5000;
    $current_amount = (float) WC()->cart->get_cart_contents_total();

    if ( $current_amount < $min_amount && isset( $gateways['cod'] ) ) {
        unset( $gateways['cod'] );
    }

    return $gateways;
}

Такой вариант проще сопровождать: если позже появится новый шлюз, он не будет затронут без вашего явного решения.

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

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

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

Если способ оплаты исчезает не сразу, а только после обновления страницы, это обычно связано с кешированием фрагментов корзины или особенностями темы. В таком случае сначала отключите кеш на checkout и cart, а уже потом ищите проблему в коде.

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

Неверный ID платежного шлюза

Самая частая причина — вы отключаете не тот ключ в массиве $gateways. Например, в одном магазине это cod, в другом — кастомный ID от платежного модуля. Решение простое: временно выведите список доступных ключей в лог или посмотрите структуру массива через отладку на staging.

Проверка суммы не в том месте

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

Код вставлен в активную тему

Если правило лежит в functions.php родительской темы, оно исчезнет после обновления или смены темы. Для магазина лучше сразу вынести логику в отдельный мини-плагин или в дочернюю тему.

Не учтены плагины кеша

Если checkout или cart кешируются агрессивно, список платежей может не обновляться вовремя. Для таких страниц лучше исключить кеширование и проверить, не включены ли оптимизации, которые ломают AJAX WooCommerce.

Что делать, если нужен более гибкий сценарий

Если у вас несколько порогов, разные правила для стран или отдельные условия для доставки, код можно расширить. Но не стоит сразу превращать фильтр в комбайн. Когда логики становится много, удобнее вынести правила в отдельный класс или использовать специализированный плагин для условий оплаты.

Из готовых решений имеет смысл смотреть в сторону плагинов, которые умеют управлять правилами отображения платежных методов без правки ядра темы. Если вы уже используете набор инструментов для чистки и оптимизации сайта, вроде Clearfy Pro, проверьте только, не пересекаются ли его настройки с вашим кастомным кодом. Дублирующаяся логика часто и дает самые неприятные конфликты.

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

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

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

В итоге задача сводится к одному фильтру и аккуратной проверке суммы. Если правило сформулировано четко, его можно внедрить без плагинов и без лишней нагрузки на магазин, а при необходимости — расширить под несколько условий.

}

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

⭐⭐⭐⭐⭐
WooCommerce: как автоматически отключать платёжные системы по геолокации клиента
24.07.2026
Как создать собственный шорткод в WordPress: подробное руководство
17.11.2025
WooCommerce: как автоматически удалять неактивные вариации товаров
04.08.2026
Как создать обновляемую карту сайта XML в WordPress с поддержкой фильтрации
27.01.2026
Создать динамические поля в формах регистрации WordPress с примерами
29.03.2026
×
до 3225₽

WPShop - честная партнерка!

Зарабатывай с каждой продажи

Подключиться ⋙