На небольших магазинах AJAX-кнопка «Добавить в корзину» в каталоге часто выглядит удобной. Но на практике она нередко мешает: товар добавляется без перехода на страницу товара, часть кастомных скриптов не успевает отработать, а в каталоге становится сложнее контролировать пользовательский сценарий. Если вам нужно, чтобы покупатель сначала открывал карточку товара, а уже потом добавлял его в корзину, AJAX на страницах категорий можно отключить точечно, не трогая весь магазин.
Когда отключение AJAX действительно помогает
Речь не о «ускорении ради ускорения», а о конкретных сценариях. Например, у товара есть вариации, обязательные поля или дополнительная логика выбора опций. В каталоге AJAX-кнопка может отправить в корзину не тот вариант, который ожидался, либо пользователь вообще не увидит, что нужно сначала выбрать параметры. Ещё один частый случай — кастомная тема или плагин, который навешивает обработчики на форму товара, но не учитывает AJAX-обновление мини-корзины.
Если у вас магазин с простыми товарами и коротким путём к покупке, отключение AJAX на архивных страницах может быть лишним. Но если каталог используется как витрина, а не как «быстрая покупка», решение обычно оправдано.
Диагностика проблемы перед изменениями
Сначала проверьте, где именно включён AJAX и что он ломает. В WooCommerce поведение кнопок в каталоге зависит не только от настроек самого плагина, но и от темы, шаблонов архива и дополнительных фильтров.
Что проверить в админке и на фронтенде
- Откройте
WooCommerce → Настройки → Товарыи посмотрите, включены ли опции, связанные с поведением кнопки в каталоге. - Проверьте страницу категории в режиме инкогнито: добавление товара должно происходить так же, как у обычного посетителя.
- Откройте консоль браузера и посмотрите, нет ли ошибок JavaScript после клика по кнопке.
- Сравните поведение простого товара и товара с вариациями: проблема часто проявляется только на одном типе.
Если после клика товар добавляется, но мини-корзина не обновляется или счётчик не меняется, это уже не вопрос AJAX-кнопки как таковой. Тогда нужно отдельно разбирать скрипты темы и сторонние хуки.
Как отключить AJAX Add to Cart только в категориях
Самый надёжный путь — убрать AJAX-скрипт только на архивных страницах товаров. Так вы не ломаете карточку товара, где AJAX может быть нужен для других сценариев, и не вмешиваетесь в глобальные настройки магазина.
Вариант через functions.php или мини-плагин
Добавьте код в functions.php дочерней темы или в свой небольшой плагин. Логика простая: если это архив товара, отключаем загрузку скрипта добавления в корзину.
add_action( 'wp_enqueue_scripts', function () {
if ( is_shop() || is_product_taxonomy() ) {
wp_dequeue_script( 'wc-add-to-cart' );
wp_dequeue_script( 'wc-add-to-cart-variation' );
}
}, 20 );Этот вариант подходит, если вам нужно убрать AJAX-обработку именно в каталоге и категориях. Но есть нюанс: в зависимости от темы и версии WooCommerce поведение может отличаться, поэтому после внедрения обязательно проверьте не только кнопку, но и связанные с ней элементы интерфейса.
Если нужно оставить кнопку, но убрать AJAX-эффект
Иногда задача мягче: кнопка в каталоге должна остаться, но без мгновенного добавления через AJAX. В таком случае можно отключить сам AJAX-флаг для кнопки «Добавить в корзину» на архивных страницах.
add_filter( 'woocommerce_loop_add_to_cart_link', function ( $html, $product ) {
if ( is_shop() || is_product_taxonomy() ) {
return preg_replace( '/ajax_add_to_cart/', '', $html );
}
return $html;
}, 10, 2 );Этот способ менее универсален, чем отключение скрипта, потому что он зависит от разметки кнопки в теме и от того, как именно WooCommerce выводит ссылку. Если тема сильно кастомизирована, лучше идти через скрипты или шаблон архива.
Сравнение подходов: код, плагин или настройка темы
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Код в дочерней теме | Нужно отключить AJAX точечно | Контроль, минимум лишней логики | Нужно тестировать после обновлений |
| Настройка темы | Тема уже умеет управлять каталогом | Без кода, быстрее внедрить | Не всегда есть нужная опция |
| Плагин для кастомизации | Нет доступа к коду или нужен быстрый откат | Проще выключить и заменить | Дополнительная нагрузка и риск конфликтов |
Если у вас уже стоит плагин для оптимизации и чистки WordPress, например Clearfy Pro, проверьте, не дублирует ли он часть настроек WooCommerce. Иногда проблема решается не новым кодом, а отключением лишнего поведения в одном месте, а не в трёх.
Пошаговое решение без лишних побочных эффектов
- Сделайте резервную копию файлов и базы.
- Добавьте код в дочернюю тему или отдельный mu-plugin.
- Очистите кэш сайта и браузера.
- Откройте категорию товара в инкогнито.
- Проверьте, что клик по кнопке ведёт к ожидаемому сценарию: либо переход на карточку, либо обычное добавление без AJAX.
- Проверьте товары с вариациями, если они есть в каталоге.
Если после отключения AJAX кнопка перестала работать совсем, значит вы убрали не только AJAX-обработчик, но и нужный скрипт для части интерфейса. В таком случае вернитесь к более точечному варианту и не отключайте wc-add-to-cart-variation, если на архиве есть вариативные товары.
Как проверить, что решение сработало
Проверка должна быть не визуальной, а функциональной. Откройте категорию, нажмите «Добавить в корзину» и смотрите на три вещи: меняется ли URL, появляется ли товар в корзине, обновляется ли счётчик корзины. Если у вас включена мини-корзина, проверьте и её.
- Товар не должен добавляться «молча», если вы ожидали переход на карточку.
- В консоли браузера не должно быть ошибок, связанных с
wc-add-to-cartилиwc-cart-fragments. - После обновления страницы товар должен оставаться в корзине.
- Если используются кэш-плагины, проверьте сценарий на очищенном кэше и после прогрева.
Для дополнительной проверки откройте исходный код страницы категории и убедитесь, что отключённый скрипт действительно не подключается на архиве. Это быстрее, чем гадать по поведению кнопки.
Частые ошибки и как их исправить
Отключили не тот скрипт
Самая частая ошибка — убрать wc-add-to-cart-variation там, где он ещё нужен. В результате вариативные товары перестают нормально работать даже на карточке товара. Если задача только в каталоге, не трогайте лишнее.
Добавили код в родительскую тему
После обновления темы изменения пропадают. Для таких правок используйте дочернюю тему или отдельный мини-плагин. Это банально, но именно здесь чаще всего теряют рабочее решение.
Не учли кэш и минифицированные скрипты
Если на сайте включена агрессивная оптимизация JS, отключение одного скрипта может не сработать сразу. Сначала очистите кэш, потом временно отключите объединение и минификацию, чтобы проверить базовое поведение.
Сломали сценарий для мобильных
На мобильной теме кнопка в каталоге иногда ведёт себя иначе, чем на десктопе. Проверяйте оба сценария, особенно если у вас отдельные стили или мобильный шаблон.
Безопасность и производительность
Любое вмешательство в WooCommerce лучше делать через маленький, понятный кусок кода, а не через набор случайных сниппетов из разных источников. Если правка нужна надолго, вынесите её в отдельный mu-plugin: так её проще контролировать, чем в переполненном functions.php.
С точки зрения производительности отключение AJAX в каталоге не всегда даёт заметный выигрыш само по себе. Но оно может снизить количество лишних запросов и убрать конфликтные сценарии, если у вас тяжёлая тема, фильтры, быстрый просмотр и сторонние виджеты корзины. Главное — не путать «меньше AJAX» с «быстрее в любом случае».
Если после правки магазин стал стабильнее, зафиксируйте это в changelog проекта: при следующем обновлении темы или WooCommerce будет понятно, почему код вообще был добавлен и что именно он должен делать.