wp-code.ru wordpress WP-Codе

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

Что такое WooCommerce Cart Fragments и почему их отключают

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

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

Диагностика проблемы: как проверить, что Cart Fragments тормозят сайт

  • Откройте консоль браузера (F12) и перейдите на вкладку Network.
  • Обновите страницу и найдите запросы к /?wc-ajax=get_refreshed_fragments. Если такие запросы есть и они занимают значительное время — Cart Fragments активны.
  • Используйте инструменты производительности, например, GTmetrix, чтобы увидеть влияние Cart Fragments на загрузку.
  • Включите плагин Query Monitor — он покажет AJAX-запросы WooCommerce и нагрузку.

Пошаговое решение отключения Cart Fragments программно

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

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

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

Если нужна более жесткая блокировка, можно отключить и AJAX-обработчик на сервере, добавив фильтр:

add_filter('woocommerce_cart_needs_refresh', '__return_false');

Объяснение

Первый метод просто не загружает JavaScript, что уже значительно снижает нагрузку. Второй предотвращает необходимость обновления корзины, что полезно, если у вас кастомный механизм или корзина не используется активно.

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

  • Повторите диагностику из предыдущего раздела и убедитесь, что запросы к get_refreshed_fragments больше не выполняются.
  • Проверьте, что количество товаров в мини-корзине не обновляется автоматически — это ожидаемый эффект.
  • Измерьте скорость загрузки страниц с помощью GTmetrix, WebPageTest или Google PageSpeed Insights — показатель должен улучшиться.
  • Проверьте функциональность корзины и оформления заказа — они должны работать без ошибок.

Частые ошибки при отключении Cart Fragments и их исправление

  • Ошибка: Мини-корзина не обновляется после добавления товара.
    Причина: Отключение скрипта убирает динамическое обновление.
    Решение: Добавьте кнопку обновления или уведомление о необходимости перезагрузить страницу, либо реализуйте свой AJAX-обновление корзины.
  • Ошибка: Код не работает, Cart Fragments всё еще активны.
    Причина: Код добавлен с недостаточным приоритетом или в неподходящем месте.
    Решение: Убедитесь, что хук wp_enqueue_scripts используется с приоритетом 11 или выше, чтобы перебить регистрацию WooCommerce.
  • Ошибка: Конфликты с другими плагинами, которые зависят от Cart Fragments.
    Решение: Проверьте зависимости плагинов, при необходимости настройте исключения или отключите Cart Fragments только на определённых страницах.

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

  • Не отключайте Cart Fragments, если у вас на сайте есть важные динамические функции корзины, которые зависят от них.
  • Если используете кэширование (например, WP Rocket, LiteSpeed Cache), убедитесь, что корзина и страницы оформления заказа не кэшируются вместе с Cart Fragments.
  • Для больших проектов рассмотрите написание собственного легковесного скрипта обновления мини-корзины, чтобы контролировать AJAX-запросы.
  • Проверяйте совместимость с будущими обновлениями WooCommerce, поскольку внутренние механизмы могут изменяться.

Сравнение способов отключения Cart Fragments

МетодОписаниеПлюсыМинусы
Отключение скрипта wc-cart-fragmentsУдаляет загрузку JS, который отвечает за AJAX обновление корзиныПростая реализация, снижает нагрузкуМини-корзина перестаёт обновляться динамично
Фильтр woocommerce_cart_needs_refreshОтключает необходимость обновления корзины на сервереДополняет первый метод, снижает серверную нагрузкуМожет вызвать проблемы с синхронизацией корзины
Полное отключение AJAX корзины через плагиныИспользование готовых решений (например, Clearfy Pro)Удобно, с дополнительными настройкамиДополнительная нагрузка на сайт, зависит от поддержки плагина
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше