Как отключить AJAX в WooCommerce без потери функциональности

Диагностика проблемы: зачем и когда отключать AJAX в WooCommerce

AJAX в WooCommerce отвечает за динамическое обновление корзины, фильтров, добавление товаров без перезагрузки страницы. Однако в некоторых случаях AJAX вызывает конфликты с кастомными скриптами, замедляет сайт из-за неправильной реализации или мешает работе плагинов кэширования. В итоге возникают баги, например, не обновляется количество товаров в корзине или не срабатывают события оформления заказа.

Перед отключением AJAX важно понять, какие именно функции сайта зависят от динамического обновления и как отключение повлияет на UX и логику магазина.

Как проверить использование AJAX в вашем WooCommerce

  • Откройте консоль браузера (F12) и перейдите на страницу с товарами или корзиной.
  • Добавьте товар в корзину и посмотрите, есть ли AJAX-запросы (XHR) к admin-ajax.php или REST API WooCommerce.
  • Проверьте, обновляется ли количество товаров или содержимое корзины без перезагрузки страницы.
  • Отследите ошибки JavaScript, которые могут быть связаны с AJAX.

Пошаговое отключение AJAX добавления в корзину

Чтобы отключить AJAX добавления товаров в корзину на странице магазина и архивов, но сохранить функциональность оформления заказа, добавьте следующий код в functions.php вашей темы или в кастомный плагин:

add_filter('woocommerce_product_add_to_cart_url', function($url, $product) {
    if (is_shop() || is_product_category() || is_product_tag()) {
        return $product->get_permalink();
    }
    return $url;
}, 10, 2);

add_action('wp_enqueue_scripts', function() {
    if (is_shop() || is_product_category() || is_product_tag()) {
        wp_dequeue_script('wc-add-to-cart');
        wp_dequeue_script('wc-cart-fragments');
    }
});

Объяснение:

  • Фильтр woocommerce_product_add_to_cart_url меняет ссылку на добавление в корзину с AJAX на прямую ссылку на страницу товара, что отключает AJAX на страницах архива.
  • Деактивация скриптов wc-add-to-cart и wc-cart-fragments предотвращает динамическое обновление корзины и кнопок.

Отключение AJAX обновления корзины в виджете

Если нужно отключить обновление корзины в сайдбаре через AJAX, используйте следующий код:

add_filter('woocommerce_cart_fragment_refresh', '__return_false');

Проверка результата после внедрения

  • Очистите кеш браузера и сайта (если используете кэш-плагины).
  • Перейдите на страницу магазина, попробуйте добавить товар в корзину — страница должна перезагрузиться вместо AJAX-запроса.
  • Проверьте, что количество товаров в корзине обновляется корректно после перезагрузки.
  • На странице оформления заказа проверьте, что все поля работают и заказ проходит без ошибок.
  • В консоли браузера убедитесь, что не происходит запросов AJAX к admin-ajax.php при добавлении товара в корзину.

Частые ошибки и как их исправить

  • Ошибка: После отключения AJAX кнопка «Добавить в корзину» не работает.
    Причина: Возможно, ссылка на добавление товара не ведёт на страницу товара или отсутствует.
  • Ошибка: Корзина не обновляется после добавления товара.
    Причина: Кэш браузера или сервера не сброшен, либо отключен скрипт обновления корзины.
  • Ошибка: Оформление заказа с AJAX перестало работать.
    Причина: В коде отключены скрипты, необходимые для страницы оформления заказа. Убедитесь, что условие отключения скриптов ограничено страницами архива и магазина.

Практические советы по безопасности и производительности

  • Отключение AJAX снижает нагрузку на сервер от AJAX-запросов, что полезно при проблемах с производительностью.
  • Перед внесением изменений сделайте бэкап functions.php и протестируйте на staging-сайте.
  • Если используете плагины кэширования, после отключения AJAX обязательно очистите кеш.
  • Тестируйте оформление заказа на всех типах устройств и браузерах, чтобы убедиться в отсутствии регрессий.

Сравнение способов отключения AJAX

МетодПлюсыМинусы
Отключение через фильтр ссылок + деактивация скриптовПолностью отключает AJAX на страницах архива, сохраняет оформление заказаТребует ручной настройки, возможны баги с кастомными темами
Деактивация только скриптов wc-cart-fragmentsПростая реализацияКорзина не обновляется динамически, UX страдает
Использование плагинов для управления AJAXГрафический интерфейс, меньше кодаДополнительная нагрузка, возможны конфликты
Как создать собственный REST API endpoint в WordPress с примерами кода
28.11.2025
Как установить уникальные слаги для таксономий в WordPress
27.03.2026
Как использовать хуки для расширения функционала WordPress
23.12.2025
Как удалить старые или неиспользуемые мета данные в WordPress
05.12.2025
Оптимизация базы данных WordPress: практические советы и примеры
12.11.2025