В WooCommerce по умолчанию многие элементы на страницах магазина, такие как добавление товаров в корзину, фильтрация и пагинация, работают через AJAX. Это удобно для пользователя — страница не перезагружается полностью, а обновляется динамически. Однако бывают ситуации, когда AJAX-подгрузка вызывает проблемы совместимости с темами, плагинами или кастомным кодом. В этом случае стоит отключить AJAX и вернуть классическую загрузку страниц.
Почему иногда нужно отключать AJAX в WooCommerce
Хотя AJAX улучшает UX, он может создавать следующие сложности:
- Конфликты с кастомными скриптами и темами, приводящие к неправильной работе кнопок или фильтров.
- Проблемы с SEO, если AJAX-запросы не индексируются поисковыми системами.
- Ошибки в кэшировании страниц из-за динамических обновлений контента.
При таких проблемах отключение AJAX — простой и эффективный способ стабилизировать работу магазина.
Как отключить AJAX для кнопки «Добавить в корзину» на страницах архива товаров
Самый частый запрос — отключить AJAX у кнопки добавления товара в корзину на странице каталога и категории. По умолчанию WooCommerce добавляет класс ajax_add_to_cart к этим кнопкам, что и активирует AJAX.
Отключение AJAX через фильтр в functions.php
Добавьте следующий код в файл functions.php активной темы или в кастомный плагин:
function wpwp_disable_ajax_add_to_cart( $url, $product ) {
// Убираем параметр ajax для кнопки добавления в корзину
if ( strpos( $url, 'add-to-cart=' ) !== false ) {
$url = remove_query_arg( 'ajax_add_to_cart', $url );
}
return $url;
}
add_filter( 'woocommerce_product_add_to_cart_url', 'wpwp_disable_ajax_add_to_cart', 10, 2 );
Этот код убирает AJAX-подгрузку с кнопки, делая её классической ссылкой на добавление товара с перезагрузкой страницы.
Удаление класса AJAX с кнопки
Иногда нужно дополнительно убрать CSS-класс, который отвечает за AJAX:
function wpwp_remove_ajax_class_from_add_to_cart( $classes, $product ) {
if ( ( $key = array_search( 'ajax_add_to_cart', $classes ) ) !== false ) {
unset( $classes[ $key ] );
}
return $classes;
}
add_filter( 'woocommerce_product_add_to_cart_classes', 'wpwp_remove_ajax_class_from_add_to_cart', 10, 2 );
Отключение AJAX фильтров и пагинации в WooCommerce
Многие сайты используют AJAX для фильтров товаров и пагинации, реализованных через темы и плагины. Если вы столкнулись с проблемами, можно отключить AJAX, убрав JavaScript-обработчики.
Отключение скриптов AJAX через wp_dequeue_script
Пример кода для отключения стандартного скрипта WooCommerce, отвечающего за AJAX:
function wpwp_dequeue_woocommerce_ajax() {
wp_dequeue_script( 'wc-add-to-cart' );
}
add_action( 'wp_enqueue_scripts', 'wpwp_dequeue_woocommerce_ajax', 99 );
Учтите, что это отключит AJAX добавления в корзину полностью, включая страницы товара.
Отключение AJAX в плагинах фильтров
Если у вас установлен плагин фильтрации товаров с AJAX, например, Filter Everything, то отключить AJAX можно в настройках плагина. Если такой возможности нет, придется править JS-код плагина или заменять его другим решением.
Практический пример: отключаем AJAX в теме Reboot от WPSHOP
Тема Reboot использует AJAX для динамической загрузки товаров. Чтобы вернуть классическую загрузку страниц, добавьте в functions.php следующее:
function wpwp_reboot_disable_ajax() {
wp_dequeue_script( 'reboot-ajax-filter' ); // условное имя скрипта
wp_dequeue_script( 'reboot-ajax-pagination' );
}
add_action( 'wp_enqueue_scripts', 'wpwp_reboot_disable_ajax', 100 );
После этого фильтры и пагинация будут работать без AJAX, с полной перезагрузкой страниц.
Плюсы и минусы отключения AJAX в WooCommerce
Плюсы:
- Улучшенная совместимость с кастомными решениями и старыми плагинами.
- Простота отладки и меньше неожиданных ошибок.
- Лучшее индексирование контента поисковыми системами.
Минусы:
- Потеря плавного UX без перезагрузки страницы.
- Более долгие загрузки страниц при каждом взаимодействии.
- Возможное снижение конверсии из-за задержек.
Альтернативы отключению AJAX: исправление конфликтов и кэширование
Если AJAX нужен, но возникают проблемы, попробуйте сначала:
- Отключить конфликтующие плагины поочередно и найти виновника.
- Использовать плагин Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wpwp.ru&utm_medium=article&utm_campaign=kak-otklyuchit-ajax-podgruzku-v-woocomerce) для оптимизации и исправления конфликтов.
- Настроить правильное кэширование с исключением AJAX-запросов.
Вывод
Отключение AJAX-подгрузки в WooCommerce — простой способ устранить конфликты и ошибки, вернуть стабильную работу магазина. В статье приведены готовые решения с примерами кода, которые легко внедрить в свой проект. Если AJAX важен, рекомендуем сначала пробовать исправлять конфликты или использовать оптимизационные плагины.