Как отключить автоматическую AJAX-перезагрузку корзины WooCommerce в теме WordPress

Диагностика проблемы с AJAX-перезагрузкой корзины WooCommerce

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

Основные симптомы:

  • Автоматическая перезагрузка всей корзины или мини-корзины при каждом добавлении товара;
  • Проблемы с отображением обновленного количества товаров;
  • Конфликты с кастомными AJAX-реализациями;
  • Избыточные запросы к серверу, замедляющие работу сайта.

Почему WooCommerce использует AJAX для корзины

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

Пошаговое отключение автоматической AJAX-перезагрузки корзины в теме

1. Отключение стандартного скрипта обновления корзины

WooCommerce использует скрипт wc-cart-fragments для AJAX-обновления корзины. Чтобы отключить его загрузку в теме, добавьте следующий код в functions.php вашей темы:

add_action('wp_enqueue_scripts', function() {
    wp_dequeue_script('wc-cart-fragments');
    wp_deregister_script('wc-cart-fragments');
}, 99);

Этот код предотвращает загрузку и выполнение скрипта, ответственного за AJAX обновление.

2. Отключение AJAX добавления товаров в корзину

Если у вас активна AJAX-кнопка добавления в корзину (например, на страницах архивов), чтобы отключить AJAX-режим, добавьте фильтр, который заставит WooCommerce использовать обычный метод добавления товара:

add_filter('woocommerce_product_add_to_cart_url', function($url, $product) {
    return remove_query_arg('add-to-cart', $url);
}, 10, 2);
>

Или в случае стандартных кнопок с AJAX нужно отключить поддержку AJAX в кнопках через:

add_filter('woocommerce_loop_add_to_cart_link', function($html, $product) {
    $html = preg_replace('/ajax_add_to_cart/', '', $html);
    return $html;
}, 10, 2);

3. Удаление перезагрузки мини-корзины

Если вы используете мини-корзину в шапке или сайдбаре и хотите полностью отключить её AJAX-обновление, удалите соответствующие хуки:

remove_action('wp_footer', array(WC()->widget_cart, 'ajax_fragments'));
remove_action('wp_footer', 'woocommerce_cart_fragment');
>

После этого потребуется самостоятельно реализовать обновление корзины, если это необходимо.

Как проверить, что отключение AJAX-перезагрузки сработало

  • Откройте консоль браузера (F12) на странице с добавлением товара в корзину;
  • Добавьте товар в корзину и посмотрите на сетевые запросы (Network) — запросы с названием wc-ajax=get_refreshed_fragments должны отсутствовать;
  • Обновите страницу, проверьте, что количество товаров в корзине меняется только после полной перезагрузки;
  • Проверьте, что не происходит мерцания или странного поведения мини-корзины.

Частые ошибки и способы их исправления

  • Мини-корзина не обновляется после отключения AJAX: без AJAX обновления потребуется обновлять страницу вручную или реализовать кастомный скрипт обновления по событию добавления товара.
  • Кнопки «Добавить в корзину» не работают: проверьте, не убрали ли вы другие необходимые скрипты WooCommerce, например, woocommerce или wc-add-to-cart.
  • Конфликты с плагинами: некоторые плагины могут требовать AJAX-обновления корзины. Проверьте совместимость и при необходимости отключайте AJAX выборочно.
  • Кэширование мешает обновлению корзины: убедитесь, что страницы с корзиной и кнопками добавления товара не кэшируются сервером или CDN.

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

  • Отключайте AJAX-обновление корзины только если уверены, что это улучшит UX или решит конкретные проблемы.
  • Используйте минимальное количество сторонних скриптов, чтобы избежать конфликтов.
  • Проверяйте сетевые запросы и консоль браузера на ошибки после изменений.
  • Для улучшения SEO и скорости загружайте только необходимые скрипты на нужных страницах через условные проверки is_cart(), is_checkout() и т.п.
  • Если нужна кастомная корзина с AJAX, реализуйте её по стандарту WordPress AJAX с nonce-проверками для безопасности.

Сравнение подходов отключения AJAX корзины WooCommerce

МетодПлюсыМинусыПример кода
Отключение скрипта wc-cart-fragmentsПростое отключение AJAX обновления мини-корзиныМини-корзина не обновляется динамически
wp_dequeue_script('wc-cart-fragments');
Удаление AJAX-обработчиков добавления в корзинуПолный контроль над поведением кнопокТребуется дополнительная реализация обновления UI
add_filter('woocommerce_loop_add_to_cart_link', function($html, $product) {
    return preg_replace('/ajax_add_to_cart/', '', $html);
}, 10, 2);
Использование собственного AJAX-скриптаМаксимальная кастомизация и производительностьТребует глубоких знаний и времени на разработкуЗависит от реализации
Как добавить поддержку AMP в тему WordPress
21.02.2026
Оптимизация темы WordPress для скорости: лучшие практики и примеры
07.11.2025
Как удалить или изменить WooCommerce AJAX корзину без плагинов
28.04.2026
Как создать тему WordPress с поддержкой RTL (Right-to-Left)
21.03.2026
Как настроить меню администратора в WordPress: подробное руководство с примерами
15.11.2025