AJAX-подгрузка товаров в WooCommerce удобна до тех пор, пока не начинает мешать: ломает аналитику, конфликтует с фильтрами, делает поведение каталога непредсказуемым или просто усложняет отладку. На практике чаще всего нужно не «убрать AJAX вообще», а отключить именно тот механизм, который подменяет список товаров без полной перезагрузки страницы.
Ниже разберём рабочий сценарий: как понять, что проблема действительно в AJAX-подгрузке, как отключить её безопасно и как проверить, что каталог после правки работает стабильно.
Когда AJAX-подгрузку стоит отключать
Не каждый каталог нужно переводить на классическую пагинацию. Но есть ситуации, где AJAX создаёт больше проблем, чем пользы:
- фильтры товаров обновляют список, но URL не меняется и нельзя нормально делиться ссылкой на результат;
- после подгрузки сбиваются счётчики просмотров, события аналитики или пиксели рекламы;
- на мобильных устройствах каталог начинает подтормаживать из-за большого количества запросов;
- скрипты темы или плагинов конфликтуют с динамической подгрузкой и товары «пропадают» после фильтрации;
- нужно упростить отладку перед миграцией, редизайном или заменой темы.
Диагностика: что именно подгружается через AJAX
Сначала важно понять, откуда идёт динамика. В WooCommerce это может быть не только сам каталог, но и:
- фильтры по атрибутам и цене;
- бесконечная прокрутка;
- кнопка «Показать ещё»;
- AJAX-сортировка;
- обновление мини-корзины и фрагментов корзины.
Откройте страницу каталога в браузере и проверьте вкладку Network в DevTools. Если при выборе фильтра или прокрутке появляются запросы к admin-ajax.php или к REST-эндпоинтам темы/плагина, значит подгрузка действительно динамическая. Это полезно, потому что отключать нужно не «всё подряд», а конкретный источник.
Что проверить до правки
- какая тема активна и есть ли у неё собственные настройки каталога;
- какие плагины отвечают за фильтры, сортировку и infinite scroll;
- используется ли кэш страниц и не маскирует ли он проблему;
- есть ли отдельные шаблоны архива товаров в дочерней теме.
Сравнение подходов: плагин, код или настройка темы
| Способ | Когда подходит | Минус |
|---|---|---|
| Настройка темы или плагина | Если AJAX включён в интерфейсе темы/расширения | Не всегда есть нужный переключатель |
| Код в дочерней теме | Если нужно отключить точечно и без лишних плагинов | Требует проверки после обновлений |
| Отключение плагина фильтров/ленивой подгрузки | Если именно он генерирует AJAX | Может убрать и полезные функции |
Пошаговое решение через настройки темы или плагина
Если у темы есть собственные параметры каталога, начните с них. Часто AJAX-подгрузка включается в разделе, связанном с магазином, архивом товаров или фильтрами. Ищите опции вроде AJAX filters, infinite scroll, load more, instant search.
Если используется отдельный плагин фильтрации, отключите именно динамическое обновление списка товаров, а не весь плагин целиком. Обычно в настройках можно оставить фильтры, но перевести их на обычную отправку формы с перезагрузкой страницы.
После сохранения очистите кэш плагина, серверный кэш и, если есть, CDN. Иначе вы можете проверить старую версию страницы и решить, что настройка не сработала.
Отключение AJAX через код
Когда в интерфейсе нет нужного переключателя, проще убрать динамическую подгрузку кодом. Важно: не редактируйте файлы родительской темы. Используйте дочернюю тему или небольшой mu-plugin.
1. Отключение AJAX-фрагментов WooCommerce
Если проблема связана с обновлением мини-корзины и фрагментов, можно отключить стандартную подгрузку фрагментов на фронтенде:
add_action( 'wp_enqueue_scripts', function() {
if ( function_exists( 'is_woocommerce' ) && is_woocommerce() ) {
wp_dequeue_script( 'wc-cart-fragments' );
}
}, 20 );Этот код не отключает AJAX-фильтры каталога, но убирает лишние запросы, если именно они создают нагрузку или конфликтуют с кэшем. Используйте его только после проверки, что мини-корзина не зависит от мгновенного обновления на вашем сайте.
2. Отключение бесконечной прокрутки или кнопки «Показать ещё»
Если AJAX-подгрузку добавляет тема или плагин, обычно у них есть собственный скрипт. Его можно снять через wp_dequeue_script, но сначала нужно узнать handle. Это видно в исходном коде страницы или в списке подключённых скриптов.
add_action( 'wp_enqueue_scripts', function() {
if ( is_shop() || is_product_taxonomy() ) {
wp_dequeue_script( 'theme-infinite-scroll' );
wp_dequeue_script( 'product-load-more' );
}
}, 100 );Имена theme-infinite-scroll и product-load-more здесь примерные. В реальном проекте подставляйте фактические handle из вашей темы или плагина.
3. Перевод фильтров на обычную отправку формы
Если фильтр построен на AJAX, но сам плагин поддерживает обычный режим, отключите динамическое обновление в настройках. Это предпочтительнее, чем ломать скрипты вручную. Кодом стоит вмешиваться только тогда, когда настройка недоступна.
Проверка результата после внедрения
После отключения AJAX не ограничивайтесь визуальной проверкой каталога. Нужно проверить поведение страницы как пользователь и как браузер.
- выберите фильтр и убедитесь, что страница перезагружается полностью;
- проверьте, меняется ли URL и сохраняются ли параметры фильтра;
- откройте карточку товара, добавьте товар в корзину и проверьте мини-корзину;
- посмотрите вкладку Network: лишние AJAX-запросы должны исчезнуть;
- сравните поведение на мобильном и десктопе;
- очистите кэш и проверьте страницу в приватном окне.
Если у вас подключена аналитика, проверьте, что события просмотра каталога и перехода в товар продолжают фиксироваться корректно. Иногда после отключения AJAX улучшается именно измеримость, потому что каждый переход становится полноценной загрузкой страницы.
Частые ошибки и как их исправить
Отключили не тот скрипт
Иногда снимают wc-cart-fragments, ожидая, что исчезнет AJAX-фильтрация каталога. Это разные механизмы. Если фильтры продолжают работать динамически, ищите скрипт темы или плагина фильтрации.
Очистили не все уровни кэша
После правки код может уже не выполняться, но старая версия страницы остаётся в кэше. Очистите кэш плагина, серверный кэш, CDN и браузерный кэш. Иначе диагностика будет ложной.
Сломали мини-корзину
Если после отключения фрагментов корзина перестала обновляться, значит на сайте использовалась динамическая мини-корзина. В этом случае либо возвращайте wc-cart-fragments, либо переходите на вариант без зависимости от AJAX-обновления.
Сделали правку в родительской теме
После обновления тема перезапишет изменения. Для таких правок безопаснее использовать дочернюю тему или отдельный mu-plugin.
Практические советы по производительности и безопасности
Если каталог большой, отключение части AJAX часто снижает количество фоновых запросов и упрощает кэширование. Это особенно заметно на страницах архива товаров и в категориях с фильтрами. Но не стоит отключать всё подряд: сначала уберите только то, что реально мешает.
Для сайтов, где много служебного кода, полезно держать отдельный небольшой mu-plugin с такими правками. Тогда вы не потеряете их при смене темы и сможете быстро понять, что именно влияет на каталог.
Если нужно дополнительно почистить сайт от лишних скриптов, дублей и технического мусора, иногда помогает аудит через Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но саму AJAX-логику каталога всё равно лучше проверять отдельно, а не надеяться на общий тюнинг.
Мини-чек-лист перед публикацией изменений
- поняли, какой именно AJAX-механизм отключаете;
- проверили настройки темы и плагинов;
- сделали правку в дочерней теме или mu-plugin;
- очистили все уровни кэша;
- проверили фильтры, корзину и URL;
- сравнили поведение в Network до и после.
Если после отключения AJAX каталог стал стабильнее, а фильтры и корзина продолжают работать, значит решение выбрано правильно. Если что-то сломалось, откатывайте изменения по одному шагу: так быстрее найти конкретный скрипт или настройку, которая была источником проблемы.