WooCommerce: как отключить автоматический пересчет стоимости товаров в корзине

Диагностика проблемы с автоматическим пересчетом стоимости в корзине WooCommerce

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

Типичные проявления проблемы:

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

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

1. Отключение AJAX-обновления корзины

WooCommerce использует AJAX для динамического обновления корзины. Чтобы отключить автоматический пересчет, можно убрать обработку AJAX на изменение количества товаров.

Добавьте следующий код в functions.php вашей темы или в кастомный плагин:

add_filter('woocommerce_update_cart_action_cart_updated', '__return_false');

Однако этого недостаточно, так как WooCommerce по умолчанию слушает изменение количества и автоматически вызывает обновление.

2. Отключение скриптов, отвечающих за автоматический пересчет

Можно полностью отключить скрипт wc-cart-fragments, который управляет обновлением корзины через AJAX:

function disable_wc_cart_fragments() {
    if (is_cart()) {
        wp_dequeue_script('wc-cart-fragments');
    }
}
add_action('wp_enqueue_scripts', 'disable_wc_cart_fragments', 11);

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

3. Блокировка пересчета стоимости с помощью фильтра

Можно использовать фильтр woocommerce_cart_needs_payment или woocommerce_cart_calculate_fees для управления пересчетом, но для полной остановки пересчета лучше контролировать процесс через JavaScript.

4. Отключение автоматического пересчета через JavaScript

Добавьте в footer темы следующий скрипт, чтобы перехватить событие изменения количества и предотвратить автоматический пересчет:

add_action('wp_footer', function() {
    if (is_cart()) : ?>
    <script>
    jQuery(function($) {
        // Отключаем отправку формы при изменении количества
        $('form.woocommerce-cart-form').off('change', 'input.qty');
    });
    </script>
    <?php endif;
});

Это предотвратит автоматический запуск обновления корзины при изменении количества.

Пошаговое руководство по внедрению решения

  1. Создайте резервную копию сайта и базы данных.
  2. Откройте файл functions.php вашей дочерней темы или создайте кастомный плагин для добавления кода.
  3. Добавьте код для отключения скрипта wc-cart-fragments:
function disable_wc_cart_fragments() {
    if (is_cart()) {
        wp_dequeue_script('wc-cart-fragments');
    }
}
add_action('wp_enqueue_scripts', 'disable_wc_cart_fragments', 11);
  1. Добавьте JS-скрипт для отключения автоматического пересчета при изменении количества товаров (как показано выше).
  2. Очистите кеш сайта и браузера.
  3. Перейдите на страницу корзины и протестируйте изменения.

Как проверить, что решение сработало

  • Откройте страницу корзины в режиме инкогнито или в другом браузере.
  • Измените количество товаров в корзине.
  • Убедитесь, что сумма в корзине не пересчитывается автоматически после изменения количества.
  • Проверьте, что кнопка "Обновить корзину" работает и пересчитывает стоимость по запросу пользователя.
  • Проверьте консоль браузера на отсутствие ошибок JavaScript.

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

  • Ошибка: Скрипт не отключается, корзина продолжает обновляться автоматически.
    Причина: Кэширование или конфликт с другими плагинами.
    Решение: Очистите все кеши, отключите временно другие плагины, чтобы выявить конфликт.
  • Ошибка: При отключении wc-cart-fragments пропадает обновление количества товаров.
    Причина: Отключение скрипта полностью убирает все AJAX обновления.
    Решение: Реализуйте кастомный скрипт для ручного обновления корзины по кнопке.
  • Ошибка: JavaScript-код не отключает обработчики событий.
    Причина: jQuery может быть загружен после вашего скрипта.
    Решение: Убедитесь, что скрипт запускается после загрузки jQuery, используйте приоритет 99 для хука wp_footer.

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

  • Не отключайте скрипты WooCommerce глобально — ограничьте их действие только страницей корзины.
  • После изменений тестируйте на мобильных устройствах, так как AJAX обновления влияют на UX.
  • Используйте кеширование страниц и объектное кеширование, чтобы снизить нагрузку при ручном обновлении корзины.
  • Внедряйте логику пересчета стоимости на серверной стороне, чтобы исключить возможность манипуляций со стороны клиента.

Сравнение способов отключения автоматического пересчета стоимости в корзине WooCommerce

МетодОписаниеПлюсыМинусы
Отключение wc-cart-fragmentsУдаление скрипта, отвечающего за AJAX обновленияПростая реализация, снижает нагрузкуПотеря динамических обновлений, требуется ручное обновление
Отключение событий через JSБлокировка триггеров изменения количестваГибкость, пользователь контролирует обновлениеНужно писать кастомный JS, возможны конфликты
Фильтры PHPИспользование фильтров для контроля пересчетаМожно частично контролировать логикуНе всегда останавливает автоматический пересчет
Как добавить автоматическое сохранение в редактор Gutenberg WordPress
23.02.2026
Как автоматизировать создание копий шаблонов WordPress для кастомизации
28.01.2026
Как создать отзывы с оценками в WordPress
20.02.2026
Как удалить избыточные CSS и JS в WordPress и улучшить скорость загрузки
28.12.2025
Как создать адаптивный шаблон WordPress без фреймворков
14.11.2025