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

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

По умолчанию WooCommerce при изменении атрибутов товаров (например, цвета, размера) или количества в корзине пересчитывает и обновляет её содержимое с помощью AJAX. Это может приводить к нежелательным эффектам: перезагрузке блока корзины, потере пользовательских данных или конфликтам с кастомными скриптами.

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

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

  • Откройте консоль браузера (F12) и перейдите во вкладку "Сеть" (Network).
  • При изменении количества или атрибутов товара в корзине посмотрите, какие AJAX-запросы отправляются. Обычно это запросы к /?wc-ajax=update_cart или /?wc-ajax=get_refreshed_fragments.
  • Если они выполняются, значит WooCommerce инициирует обновление корзины.

Пошаговое решение: отключение автоматического обновления корзины

Для отключения автоматического обновления корзины можно переопределить JS-обработчики WooCommerce и отменить вызовы обновления корзины. Сделаем это через добавление кастомного скрипта в тему или плагин.

Шаг 1. Отключаем обновление фрагментов корзины

WooCommerce использует JS-функцию wc_fragments_refresh для обновления блока корзины. Чтобы её отключить, добавим код:

jQuery( function($) {
    // Отключаем автоматическое обновление фрагментов
    $( document.body ).off( 'updated_wc_div' );
    $( document.body ).off( 'wc_fragments_refreshed' );

    // Отключаем вызов обновления фрагментов после изменения корзины
    $( document.body ).off( 'updated_cart_totals' );
    $( document.body ).off( 'update_cart_totals' );
});

Шаг 2. Отключаем обработчики изменения количества и атрибутов

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

jQuery( function($) {
    // Отключаем обработчики изменения количества
    $( document.body ).off( 'change', '.qty' );

    // Отключаем обновление при смене варианта товара
    $( document.body ).off( 'change', 'select' );
});

Шаг 3. Подключаем скрипт правильно

Добавьте следующий PHP-код в functions.php вашей темы или в кастомный плагин, чтобы подключить кастомный JS только на страницах корзины и оформления заказа:

function disable_wc_auto_update_cart() {
    if ( is_cart() || is_checkout() ) {
        wp_add_inline_script( 'wc-cart-fragments', "
            jQuery(function($){
                $(document.body).off('updated_wc_div wc_fragments_refreshed updated_cart_totals update_cart_totals');
                $(document.body).off('change', '.qty');
                $(document.body).off('change', 'select');
            });
        " );
    }
}
add_action( 'wp_enqueue_scripts', 'disable_wc_auto_update_cart', 20 );

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

  • Обновите страницу корзины в режиме инкогнито, чтобы сбросить кэш.
  • Измените количество товара или выберите другой вариант.
  • Откройте вкладку "Сеть" в консоли браузера и убедитесь, что AJAX-запросы update_cart и get_refreshed_fragments не отправляются.
  • Проверьте, что содержимое корзины не обновляется автоматически и не исчезают пользовательские данные.

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

  • Скрипт не отключает обновление корзины
    Причина: скрипт подключается не на тех страницах или слишком рано. Проверьте условие is_cart() || is_checkout() и приоритет подключения (должен быть >= 20).
  • Конфликты с другими плагинами, которые тоже обновляют корзину
    Решение: используйте консоль браузера, чтобы определить, какие скрипты вызывают обновление, и отключите их аналогично.
  • Пользователь не видит обновлённое количество товаров
    Если отключить автоматическую перезагрузку, нужно самому реализовать кнопку "Обновить корзину" с отправкой формы, чтобы сохранить корректность данных.

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

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

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

МетодПреимуществаНедостатки
Отключение JS-обработчиков (код выше)Быстрое решение, снижает AJAX-запросыМожет нарушить UX, нужно реализовать кнопку обновления
Использование плагина для управления корзинойПростота настройки, готовые функцииДополнительная нагрузка, возможны конфликты
Кастомная логика обновления корзины через REST APIПолный контроль над процессомСложно реализовать, требует разработки
WooCommerce: как правильно настроить возвраты и обмены товаров
02.05.2026
WooCommerce не обновляет стоимость в корзине: как исправить
19.04.2026
Как установить лимит на количество публикаций в WordPress для пользователей
07.01.2026
Оптимизация базы данных WordPress: лучшие практики и плагины
18.11.2025
Как правильно использовать AJAX в WordPress для обновления контента без перезагрузки страницы
28.12.2025