WooCommerce — мощный плагин для электронной коммерции на WordPress, который использует AJAX для обновления корзины без перезагрузки страницы. Это удобно для пользователя, но в некоторых случаях AJAX-обновление корзины может вызывать проблемы с кэшированием, конфликтами плагинов или замедлять работу сайта. В этой статье рассмотрим, как отключить AJAX в корзине WooCommerce, чтобы устранить подобные проблемы.
Зачем отключать AJAX в корзине WooCommerce
AJAX-обновление корзины позволяет менять количество товаров и видеть изменения без перезагрузки страницы. Однако у этого подхода есть недостатки:
- Проблемы с кэшированием — AJAX-запросы могут не учитывать кэш, из-за чего корзина отображается некорректно.
- Конфликты с другими плагинами или темами, которые не поддерживают AJAX обновления.
- Некоторые хостинги или настройки сервера плохо обрабатывают частые AJAX-запросы, что замедляет работу сайта.
В таких случаях отключение AJAX-обновления корзины поможет избежать ошибок и повысить стабильность работы магазина.
Отключение AJAX обновления корзины через код (wpnews_woocommerce_disable_ajax_cart)
Самый простой способ — добавить в файл functions.php вашей темы (желательно дочерней) следующий код:
function wpnews_woocommerce_disable_ajax_cart() {
// Отключаем AJAX обновление корзины при изменении количества товаров
wp_dequeue_script('wc-cart-fragments');
}
add_action('wp_enqueue_scripts', 'wpnews_woocommerce_disable_ajax_cart', 11);Этот код отключает скрипт wc-cart-fragments, который отвечает за AJAX обновление корзины. После его добавления корзина будет обновляться только при полной перезагрузке страницы.
Важно: если вы используете кэширование, после добавления кода очистите кэш сайта и браузера, чтобы изменения вступили в силу.
Отключение AJAX в корзине через фильтры WooCommerce
Можно также отключить AJAX обновления корзины для некоторых элементов через фильтры. Например, WooCommerce использует AJAX для добавления товаров в корзину с архивов. Чтобы отключить эту функцию, добавьте в functions.php:
function wpnews_disable_ajax_add_to_cart() {
return false; // Отключаем AJAX добавление в корзину
}
add_filter('woocommerce_add_to_cart_fragments', 'wpnews_disable_ajax_add_to_cart');Однако этот метод менее универсален, чем отключение скрипта целиком.
Практические советы и рекомендации
Проверьте совместимость с кэш-плагинами
Если вы используете кэш-плагины (например, Clearfy Pro), обязательно настройте их так, чтобы корзина не кэшировалась. Иначе отключение AJAX может не решить проблему с отображением корзины.
Тестируйте после изменений
После внедрения отключения AJAX внимательно протестируйте процесс покупки, изменение количества товаров и работу корзины на мобильных и настольных устройствах. Если вы пользуетесь темами с кастомными корзинами (например, темы Reboot или Root), убедитесь, что они корректно работают без AJAX.
Используйте дочернюю тему для правок
Не редактируйте напрямую файлы основной темы или WooCommerce, чтобы не потерять изменения при обновлениях. Создайте дочернюю тему и добавляйте код туда.
Пример: Полное отключение AJAX обновления корзины в WooCommerce
Ниже собран пример кода, который отключает все основные AJAX-скрипты, связанные с корзиной:
function wpnews_disable_all_ajax_cart() {
// Отключаем фрагменты корзины
wp_dequeue_script('wc-cart-fragments');
// Отключаем добавление в корзину через AJAX
wp_dequeue_script('wc-add-to-cart');
}
add_action('wp_enqueue_scripts', 'wpnews_disable_all_ajax_cart', 11);После внедрения этого кода ваша корзина будет работать без AJAX, что подойдет для сайтов с проблемами совместимости или специфическими требованиями.
Как вернуть AJAX обратно при необходимости
Если вы захотите вернуть стандартное поведение WooCommerce с AJAX, просто удалите или закомментируйте добавленные функции в functions.php. Это позволит возвращать обновления корзины без перезагрузки страницы.