WooCommerce: автоматическое изменение стоимости оплаты по способу оплаты

Проблема: необходимость динамически менять стоимость оплаты в WooCommerce

В стандартном WooCommerce стоимость оплаты не меняется в зависимости от выбранного способа оплаты. Часто возникает задача добавить дополнительную комиссию или скидку, чтобы корректно отразить расходы или стимулировать выбор определённого способа. Например, добавить 3% комиссии при оплате картой или скидку при выборе оплаты наличными.

Диагностика задачи: как понять, что стандартных настроек недостаточно

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

Проверить, что стоимость оплаты не меняется:

  • Перейдите в корзину/оформление заказа;
  • Выберите разные способы оплаты;
  • Проследите, что итоговая сумма не меняется.

Пошаговое решение: добавление комиссии через хук woocommerce_cart_calculate_fees

Для изменения стоимости оплаты используем хук woocommerce_cart_calculate_fees, который позволяет добавлять дополнительные сборы к корзине. Это наиболее надежный и рекомендованный способ.

Пример кода, который добавляет комиссию 3% при выборе способа оплаты «Оплата картой» (например, метод ID cod замените на ваш):

add_action('woocommerce_cart_calculate_fees', 'add_payment_gateway_fee', 20, 1);
function add_payment_gateway_fee( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
    if ( isset( WC()->session ) ) {
        $chosen_gateway = WC()->session->get('chosen_payment_method');
        if ( $chosen_gateway === 'bacs' ) { // замените 'bacs' на ID вашего способа оплаты
            $percentage = 0.03; // 3% комиссия
            $fee = $cart->subtotal * $percentage;
            $cart->add_fee( __('Комиссия за оплату картой', 'woocommerce'), $fee, true, '' );
        }
    }
}

Ключевые моменты:

  • Проверяем текущий способ оплаты через сессию WooCommerce;
  • Добавляем комиссию, вычисляемую как процент от subtotal;
  • Третий параметр true означает, что комиссия облагается налогом (измените при необходимости).

Как узнать ID способа оплаты

Перейдите в WooCommerce → Настройки → Оплаты и наведите на название способа, в URL будет параметр section=payment_method_id. Или используйте следующий сниппет для отладки в functions.php:

add_action('woocommerce_cart_calculate_fees', 'debug_chosen_payment_method', 1);
function debug_chosen_payment_method( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
    error_log('Chosen payment method: ' . WC()->session->get('chosen_payment_method') );
}

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

Чтобы убедиться, что комиссия применяется:

  1. Очистите кеш сайта и браузера;
  2. Перейдите на страницу оформления заказа;
  3. Выберите способ оплаты, для которого добавлена комиссия;
  4. Проверьте итоговую сумму и наличие дополнительной строки с комиссией;
  5. Смените способ оплаты и убедитесь, что комиссия исчезает или меняется корректно.

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

  • Комиссия не появляется: проверьте, что хук добавлен в functions.php активной темы или в плагине, убедитесь, что ID способа оплаты правильный.
  • Комиссия не меняется при переключении способа оплаты без перезагрузки страницы: WooCommerce не всегда обновляет стоимость автоматически. Добавьте поддержку обновления через JavaScript или используйте плагин для динамического обновления.
  • Комиссия не учитывается в налогах: параметр $cart->add_fee третий аргумент должен быть true, если комиссия облагается налогом.
  • Ошибка сессии: убедитесь, что сессия WooCommerce активна, код не должен выполняться в административной части без AJAX.

Практические советы по оптимизации и безопасности

  • Не храните логику комиссии в плагинах сторонних разработчиков без проверки — всегда тестируйте на локальном сервере.
  • Добавляйте локализацию в строку комиссии для поддержки многоязычности.
  • Кэширование страниц оформления заказа отключайте или исключайте, чтобы сумма менялась корректно.
  • Используйте Transient API для кеширования сложных вычислений комиссии при необходимости, чтобы уменьшить нагрузку.

Сравнение вариантов решения

ВариантПлюсыМинусыРекомендуемая ситуация
Код на woocommerce_cart_calculate_feesГибкость, контроль, бесплатныйТребует навыков PHP, может потребовать доработки JSНебольшие доработки, кастомизация под проект
Плагин комиссии (например, WooCommerce Fees Plugin)Простота настройки, готовый интерфейсМогут быть платными, ограниченная кастомизацияБыстрый запуск без программиста
Изменение в платежном шлюзеЧасто встроено, поддерживается разработчикомНе всегда есть опция, зависит от провайдераЕсли нужен фиксированный процент, поддерживаемый шлюзом
WooCommerce: автоматическое изменение стоимости доставки по зонам
24.05.2026
WooCommerce: автоматическое отключение неиспользуемых способов оплаты
19.07.2026
WooCommerce: автоматическое изменение стоимости доставки при изменении заказа
28.05.2026
Как создать автоматический фильтр по тегам в WordPress с поддержкой GPT
16.02.2026
Как создать автономный чат-бот на WordPress с помощью WPGPT
29.12.2025