Проблема: необходимость отключить AJAX добавление товара в корзину
WooCommerce по умолчанию использует AJAX для добавления товаров в корзину с архивных страниц (например, категории, магазин). Это удобно для пользователей, но иногда вызывает конфликты с кастомными скриптами, плагинами или влияет на производительность. Особенно часто нужно отключить AJAX для отдельных страниц, чтобы контролировать поведение сайта.
Диагностика проблемы
Если вы заметили, что при клике на кнопку "Добавить в корзину" страница не перезагружается, а корзина обновляется через AJAX, значит AJAX на добавление активен. Чтобы проверить, какие страницы задействуют AJAX:
- Откройте консоль браузера (F12) на странице с товарами.
- Нажмите кнопку "Добавить в корзину".
- Если в Network запросах появляется ajax-запрос на
/?wc-ajax=add_to_cart— используется AJAX.
Если AJAX вызывает проблемы или нужен традиционный переход, можно отключить его выборочно.
Пошаговое решение: отключение AJAX добавления товара на конкретных страницах
WooCommerce управляет AJAX добавлением через скрипт add-to-cart, который подключается условно. Чтобы отключить AJAX, нужно убрать этот скрипт на нужных страницах.
1. Определите страницы для отключения AJAX
Например, отключим AJAX на странице магазина и странице категории с ID 12.
2. Добавьте следующий код в functions.php вашей темы или в кастомный плагин:
function disable_ajax_add_to_cart_on_selected_pages() {
if ( is_shop() || is_product_category( 12 ) ) {
wp_dequeue_script( 'wc-add-to-cart' );
wp_dequeue_script( 'wc-add-to-cart-variation' );
}
}
add_action( 'wp_enqueue_scripts', 'disable_ajax_add_to_cart_on_selected_pages', 100 );Этот код снимает очередь скриптов, отвечающих за AJAX добавление, только на страницах магазина и категории с ID 12.
3. Обработка кнопок на отключённых страницах
После отключения AJAX добавления кнопки "Добавить в корзину" будут вести себя как обычные ссылки с перезагрузкой страницы. Убедитесь, что шаблон кнопок поддерживает класс add_to_cart_button с правильным URL.
Проверка результата
- Очистите кеш браузера и кеш сайта, если он есть.
- Перейдите на страницы, где отключали AJAX.
- Нажмите кнопку "Добавить в корзину" — страница должна перезагрузиться, а товар добавиться в корзину.
- Проверьте вкладку Network в инструментах разработчика — ajax-запросы
wc-ajax=add_to_cartне должны появляться.
Частые ошибки и как их исправить
- Скрипты не отключаются: Проверьте приоритет хука
wp_enqueue_scripts, он должен быть >= 100, чтобы переопределить предыдущие подключения. - Кнопка не работает: Убедитесь, что в шаблоне кнопка выводится с правильным атрибутом
hrefна страницу корзины с параметром добавления товара. - AJAX работает на всех страницах: Проверьте условия в
if(например,is_shop()иis_product_category()), возможно, нужно добавить больше условий или использовать другие условные теги.
Практические советы по производительности и безопасности
- Отключайте AJAX только там, где это действительно необходимо, чтобы не ухудшать UX.
- Проверяйте совместимость с темой и плагинами после внесения изменений.
- Используйте Child Theme для модификаций, чтобы избежать потери при обновлениях.
- Для сложных условий используйте
is_page(),is_singular()или пользовательские проверки.
Дополнительный чек-лист для внедрения
- Определить страницы, где нужно отключить AJAX.
- Добавить код с правильными условиями и приоритетом.
- Проверить работу кнопок и перезагрузку страницы.
- Тестировать на разных устройствах и браузерах.
- Обновлять документацию проекта с описанием изменений.