Как отключить AJAX Add to Cart на страницах категорий WooCommerce

На небольших магазинах 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. Иногда проблема решается не новым кодом, а отключением лишнего поведения в одном месте, а не в трёх.

Пошаговое решение без лишних побочных эффектов

  1. Сделайте резервную копию файлов и базы.
  2. Добавьте код в дочернюю тему или отдельный mu-plugin.
  3. Очистите кэш сайта и браузера.
  4. Откройте категорию товара в инкогнито.
  5. Проверьте, что клик по кнопке ведёт к ожидаемому сценарию: либо переход на карточку, либо обычное добавление без AJAX.
  6. Проверьте товары с вариациями, если они есть в каталоге.

Если после отключения 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 будет понятно, почему код вообще был добавлен и что именно он должен делать.

Как удалить или изменить заголовок страницы в WordPress через фильтр
08.02.2026
Как отключить ревизии постов в WordPress для удаления старых версий
02.03.2026
Как добавить круглые иконки социальных сетей в WordPress
15.04.2026
Как автоматизировать удаление старого контента в WooCommerce
11.05.2026
Как создать автоматический снимок экрана страницы в WordPress
28.01.2026