Как отключить AJAX подгрузку корзины WooCommerce для улучшения производительности

Что такое AJAX подгрузка корзины в WooCommerce и почему она тормозит сайт

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

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

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

  • Проверьте HTTP-запросы в инструментах разработчика браузера (Network) — ищите частые AJAX-запросы к wc-ajax=get_refreshed_fragments.
  • Проанализируйте нагрузку на сервер с помощью мониторинга (top, htop, New Relic, или плагинов для мониторинга).
  • Проверьте время загрузки страниц с помощью GTMetrix, PageSpeed Insights, или аналогичных сервисов — если есть задержки связанные с AJAX запросами WooCommerce.

Пошаговое отключение AJAX подгрузки корзины в WooCommerce

Отключение AJAX подгрузки корзины достигается фильтрацией функционала WooCommerce, отвечающего за обновление «фрагментов» корзины.

add_filter('woocommerce_add_to_cart_fragments', '__return_empty_array');

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

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

function disable_woocommerce_cart_fragments() {
    if (!is_admin()) {
        wp_dequeue_script('wc-cart-fragments');
    }
}
add_action('wp_enqueue_scripts', 'disable_woocommerce_cart_fragments', 11);

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

  • wp_dequeue_script('wc-cart-fragments') отключает скрипт, который отвечает за AJAX подгрузку корзины.
  • Проверка !is_admin() гарантирует, что скрипт отключается только на фронтенде, не ломая админку.
  • Приоритет 11 ставится после стандартной очереди скриптов WooCommerce.

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

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

Частые ошибки при отключении AJAX подгрузки корзины и их исправление

1. Корзина не обновляется и количество товаров не меняется

Причина: полностью отключён фильтр woocommerce_add_to_cart_fragments или скрипт, но не предусмотрена перезагрузка страницы.

Решение: отключайте только скрипт wc-cart-fragments, а не фильтр, чтобы не сломать базовый функционал WooCommerce.

2. Ошибки JavaScript после отключения

Причина: другие плагины или тема зависят от AJAX обновления корзины и вызывают скрипты, которые становятся невалидными без wc-cart-fragments.

Решение: проверьте консоль на ошибки, при необходимости адаптируйте тему или отключите конфликтующие плагины.

3. Отключение происходит в админке

Причина: отсутствует проверка !is_admin().

Решение: всегда проверяйте условие для отключения только на фронтенде.

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

  • Отключение AJAX подгрузки корзины уменьшает нагрузку на сервер, но ухудшает UX — учитывайте баланс между скоростью и удобством.
  • Используйте кеширование страниц (например, через плагин WP Rocket или интеграцию с Redis), чтобы дополнительно снизить нагрузку.
  • Проверяйте совместимость с другими плагинами WooCommerce перед отключением AJAX функций.
  • Регулярно обновляйте WooCommerce и тему для получения последних исправлений производительности.

Таблица сравнения способов отключения AJAX подгрузки корзины WooCommerce

МетодОписаниеПреимуществаНедостатки
Фильтр woocommerce_add_to_cart_fragments возвращает пустой массивПолностью отключает обновление фрагментов корзиныПростой кодКорзина не обновляется без перезагрузки, может сломать некоторые функции
Отключение скрипта wc-cart-fragmentsДеактивирует AJAX скрипты корзиныСнижает нагрузку без кардинальных изменений UXКоличество товаров не обновляется динамически, нужно адаптировать тему
Использование плагинов для оптимизацииПлагины как Clearfy Pro могут оптимизировать AJAX запросыБыстрая настройка без кодаМожет быть платным, не всегда гибко