AJAX-подгрузка товаров в WooCommerce удобна до тех пор, пока не начинает мешать: фильтры срабатывают не так, пагинация дублируется, счётчики не обновляются, а сторонние скрипты цепляются к старому DOM. В таких случаях задача обычно не в том, чтобы «сломать AJAX везде», а в том, чтобы отключить его в конкретном месте и проверить, что каталог продолжает работать предсказуемо.
Когда AJAX-подгрузка действительно мешает
Чаще всего проблема проявляется в каталоге, где тема или плагин подменяет стандартную навигацию WooCommerce на динамическую загрузку. Это удобно для UX, но конфликтует с:
- фильтрами по атрибутам и цене, которые ожидают обычную перезагрузку страницы;
- плагинами аналитики и трекинга, которые не видят новые карточки без дополнительной инициализации;
- кастомными скриптами, завязанными на событие
DOMContentLoadedи не умеющими переинициализироваться после AJAX; - медленными каталогами, где динамическая подгрузка создаёт лишнюю нагрузку на сервер и усложняет отладку.
Типичные симптомы
Если AJAX-подгрузка виновата, обычно видно одно или несколько из этих проявлений: после фильтрации URL меняется, но список товаров остаётся прежним; кнопка «Показать ещё» добавляет товары, но пагинация ведёт себя непоследовательно; часть карточек исчезает после сортировки; в консоли появляются ошибки JavaScript, связанные с элементами, которых уже нет в DOM.
Диагностика проблемы перед изменениями
Сначала нужно понять, кто именно включает AJAX: тема, плагин фильтрации или кастомный код. Не стоит сразу править шаблоны WooCommerce — в большинстве случаев источник находится в настройках темы или в отдельном скрипте.
Что проверить в админке и коде
- настройки темы для архива товаров, каталога и фильтров;
- плагины с функциями AJAX product filter, load more, infinite scroll;
- кастомные подключения скриптов в
functions.phpили в мини-плагине; - наличие переопределённых шаблонов WooCommerce в теме.
Если есть доступ к коду, быстро проверьте, не подключается ли библиотека или скрипт, который перехватывает стандартную навигацию каталога. Например, в теме может быть что-то вроде:
add_action( 'wp_enqueue_scripts', function() {
if ( is_shop() || is_product_taxonomy() ) {
wp_enqueue_script(
'theme-product-ajax',
get_stylesheet_directory_uri() . '/assets/js/product-ajax.js',
array( 'jquery' ),
'1.0.0',
true
);
}
} );Это не означает, что AJAX надо отключать глобально. Но если проблема возникает только на страницах категории товаров, можно ограничить его именно там.
Как отключить AJAX-загрузку товаров точечно
Самый безопасный путь — не ломать WooCommerce, а убрать или обойти конкретный механизм подгрузки. Ниже три рабочих сценария: через настройки, через отключение скрипта и через фильтрацию поведения на уровне шаблона.
1. Отключение в настройках темы или плагина
Если AJAX включён в настройках темы, это лучший вариант. Обычно достаточно снять галочку у опции вроде «AJAX product loading», «Infinite scroll» или «Load products without page reload». После этого стандартная пагинация WooCommerce возвращается без правок кода.
Плюс этого подхода — он не ломает обновления темы. Минус — не все темы дают отключить AJAX отдельно для категории, поиска и главной страницы магазина.
2. Отключение скрипта через wp_dequeue_script
Если AJAX-логика подключается отдельным скриптом, его можно убрать на нужных страницах. Это рабочий вариант, когда вы знаете handle скрипта.
add_action( 'wp_enqueue_scripts', function() {
if ( is_shop() || is_product_taxonomy() ) {
wp_dequeue_script( 'theme-product-ajax' );
wp_deregister_script( 'theme-product-ajax' );
}
}, 100 );Важно: wp_dequeue_script() сработает только если вы указали правильный handle. Его можно найти в исходниках темы или через поиск по wp_enqueue_script. Если handle неизвестен, не пытайтесь отключать всё подряд — так легко сломать фильтры, сортировку и даже галерею товаров.
3. Возврат к стандартной пагинации WooCommerce
Если проблема в том, что тема заменяет стандартный вывод каталога на собственный шаблон с AJAX, иногда проще вернуть обычный loop WooCommerce. Для этого в дочерней теме можно убрать переопределённые шаблоны архива и оставить стандартную навигацию.
Если же нужен точечный обход, можно принудительно отключить бесконечную подгрузку на страницах каталога через условие:
add_filter( 'body_class', function( $classes ) {
if ( is_shop() || is_product_taxonomy() ) {
$classes[] = 'no-ajax-product-listing';
}
return $classes;
} );Дальше в CSS или JS можно ориентироваться на этот класс и не инициализировать скрипт подгрузки на нужных страницах. Это удобнее, чем переписывать весь каталог.
Сравнение подходов
| Подход | Когда подходит | Риск |
|---|---|---|
| Отключить в настройках темы | Если AJAX включён штатно | Минимальный |
wp_dequeue_script() | Если подгрузка идёт отдельным скриптом | Можно задеть связанные функции |
| Вернуть стандартный loop WooCommerce | Если тема полностью подменила каталог | Нужна аккуратная проверка шаблонов |
Проверка результата после внедрения
После отключения AJAX не ограничивайтесь визуальной проверкой. Нужно убедиться, что каталог работает как обычная страница WooCommerce, а не просто «выглядит нормально».
- Откройте категорию товаров и нажмите пагинацию: должна происходить полная перезагрузка страницы.
- Примените фильтр по цене или атрибуту: URL должен обновляться без зависших блоков.
- Проверьте сортировку товаров: порядок должен меняться после загрузки страницы.
- Откройте консоль браузера: не должно быть ошибок JavaScript, связанных с отсутствующими элементами каталога.
- Если используется аналитика, убедитесь, что просмотры страниц и события каталога фиксируются корректно.
Полезно сравнить поведение в обычном режиме и в приватном окне, а также с отключённым кешем браузера. Иногда AJAX «не отключился», а просто подхватывается старый минифицированный файл из кеша.
Частые ошибки и как их исправить
Неправильный handle скрипта
Самая частая ошибка — попытка снять не тот скрипт. В результате AJAX продолжает работать, а вы думаете, что код не сработал. Решение простое: найдите точное имя в wp_enqueue_script() или через поиск по теме.
Отключение не там, где нужно
Иногда AJAX подключается только на странице магазина, но не в категориях. Если вы проверяете не тот шаблон, кажется, что изменения не работают. Используйте точные условия: is_shop(), is_product_taxonomy(), is_product_category().
Конфликт с плагином фильтрации
Если фильтр товаров сам использует AJAX, отключение скрипта темы не решит проблему. В таком случае нужно смотреть настройки самого фильтра или заменить его на вариант с обычной перезагрузкой страницы.
Кеш не очищен
После правок старый JS может продолжать отдаваться из кеша плагина, CDN или браузера. Очистите кеш на всех уровнях и проверьте файл в режиме без кеширования.
Практические советы по безопасности и производительности
Если вы отключаете AJAX ради стабильности, не превращайте это в повод оставить каталог без оптимизации. Обычная пагинация часто проще в поддержке, но она всё равно должна быть быстрой.
- не подключайте тяжёлые скрипты каталога на страницах, где они не нужны;
- проверяйте, не дублируются ли стили и JS после правок темы;
- если используете дочернюю тему, храните изменения там, а не в родительской;
- после обновлений темы повторно проверяйте, не вернулся ли AJAX через новые шаблоны или настройки;
- если нужен более чистый каталог без лишних дублей и конфликтов, имеет смысл посмотреть в сторону инструментов вроде Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wpbusiness.ru&utm_medium=article&utm_campaign=woocommerce-otkljuchit-ajax-zagruzku-tovarov-v-kategoriyah.
В реальных проектах лучше сначала отключить динамическую подгрузку только на проблемных страницах, а уже потом решать, нужна ли она вообще. Это снижает риск поломать каталог целиком и упрощает поддержку после обновлений WooCommerce и темы.