Как использовать хук woocommerce_cart_calculate_fees для добавления дополнительных платежей в WooCommerce

Что такое хук woocommerce_cart_calculate_fees и зачем он нужен

Хук woocommerce_cart_calculate_fees позволяет добавлять дополнительные сборы или скидки в корзину WooCommerce на этапе расчёта итоговой суммы. Это самый надёжный способ внедрить кастомные платежи, например, надбавки за обработку заказа, экологические сборы, оплату упаковки и т.п. Использование этого хука гарантирует, что сумма будет корректно учтена в итоговом чеке и в заказе.

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

Если вы добавляете кастомные сборы, но они не появляются в корзине или итоговой сумме, проверьте:

  • Вызывается ли хук в вашем коде
  • Используете ли правильный приоритет и параметры функции
  • Корректно ли установлен объект корзины WC_Cart в функции
  • Правильно ли указываете сумму сбора и флаг налогообложения

Пошаговое решение: добавление дополнительного платежа с помощью woocommerce_cart_calculate_fees

Пример добавления фиксированного сбора 100 рублей при сумме заказа меньше 3000 рублей:

add_action('woocommerce_cart_calculate_fees', 'add_custom_fee_for_small_orders');
function add_custom_fee_for_small_orders( WC_Cart $cart ) {
    if ( is_admin() && ! defined('DOING_AJAX') ) return;

    // Проверка минимальной суммы заказа
    if ( $cart->subtotal < 3000 ) {
        $fee = 100; // сумма сбора в рублях
        $cart->add_fee( __('Дополнительный сбор за обработку заказа', 'woocommerce'), $fee, true );
    }
}

Объяснение кода:

  • Функция привязана к хуку woocommerce_cart_calculate_fees и получает объект корзины
  • В админке и при AJAX-запросах функция не выполняется, чтобы избежать дублирования
  • Если сумма товаров меньше 3000, добавляется дополнительный сбор с названием и налогом (флаг true означает, что сбор облагается налогом)

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

Чтобы убедиться, что сбор добавлен:

  1. Добавьте товары в корзину с общей стоимостью ниже 3000 рублей
  2. Перейдите на страницу корзины — там должен появиться новый сбор с указанным названием и суммой
  3. Перейдите к оформлению заказа, проверьте, что сбор отображается в итогах и в заказе в админке WooCommerce
  4. Попробуйте увеличить сумму корзины выше 3000 — сбор должен исчезнуть

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

  • Функция не вызывается: проверьте, что хук подключён в functions.php или в плагине, и что код загружается корректно.
  • Сбор не отображается в корзине: убедитесь, что вызов $cart->add_fee() происходит именно в хуке woocommerce_cart_calculate_fees, а не раньше.
  • Сумма сбора неправильная или равна 0: проверьте тип и значение переменной суммы, она должна быть числом с плавающей точкой или целым.
  • Сбор добавляется несколько раз: добавьте проверку is_admin() && ! defined('DOING_AJAX') для исключения повторного выполнения в админке и при AJAX.

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

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

Сравнение методов добавления дополнительных сборов в WooCommerce

МетодПреимуществаНедостатки
Хук woocommerce_cart_calculate_feesКорректный расчёт, интеграция с налогами, динамичностьТребует базовых знаний PHP, работает только в корзине и оформлении заказа
Плагины для дополнительных сборовПростота настройки, визуальный интерфейсЗависимость от стороннего кода, возможные конфликты и накладные расходы
Изменение шаблонов WooCommerceПолный контроль над отображениемНе всегда корректно учитывает итоговые суммы, сложность поддержки
WooCommerce: как автоматически изменять стоимость товаров в корзине
22.06.2026
WooCommerce: автоматическое удаление товаров по срокам с помощью WP-Cron
07.06.2026
Оптимизация загрузки изображений в WordPress для ускорения сайта
17.12.2025
Автоматическое удаление товаров в WooCommerce по истечении срока с WP-Cron
10.06.2026
Изменение атрибутов товара в WooCommerce через REST API
17.05.2026