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

Диагностика проблемы с AJAX в WooCommerce

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

Проверить, связана ли проблема с AJAX, можно так:

  • Откройте консоль браузера (F12 - Console) и посмотрите, есть ли ошибки при добавлении товара в корзину.
  • Временно отключите все плагины, кроме WooCommerce, и переключитесь на дефолтную тему (например, Storefront), чтобы исключить конфликты.
  • Попробуйте добавить в корзину с включенным и отключенным JavaScript, чтобы понять, зависит ли поведение от AJAX-запросов.

Пошаговое отключение AJAX в WooCommerce

WooCommerce использует AJAX в нескольких местах, основные из них:

  • Добавление товара в корзину с архивных страниц
  • Обновление мини-корзины (в шапке или сайдбаре)
  • Фильтры и пагинация на страницах магазина

Отключить AJAX полностью можно, но важно сохранить базовую функциональность добавления и отображения корзины. Для этого понадобится:

1. Отключить AJAX добавление товара в корзину

По умолчанию WooCommerce добавляет класс ajax_add_to_cart к кнопкам на архивных страницах. Чтобы отключить AJAX, удалим этот класс:

function wpqa_disable_ajax_add_to_cart() {
    remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
    add_action( 'woocommerce_after_shop_loop_item', 'wpqa_custom_loop_add_to_cart', 10 );
}

function wpqa_custom_loop_add_to_cart() {
    global $product;
    echo sprintf(
        '<a href="%s" data-quantity="1" class="button add_to_cart_button" aria-label="%s" rel="nofollow">%s</a>',
        esc_url( $product->add_to_cart_url() ),
        esc_attr( sprintf( __( 'Добавить %s в корзину', 'woocommerce' ), $product->get_name() ) ),
        esc_html( $product->add_to_cart_text() )
    );
}
add_action( 'wp_loaded', 'wpqa_disable_ajax_add_to_cart' );

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

2. Отключить обновление мини-корзины через AJAX

Мини-корзина обновляется через AJAX хуки WooCommerce. Отключим скрипт, который отвечает за динамическое обновление:

function wpqa_disable_woocommerce_ajax_fragments() {
    wp_dequeue_script( 'wc-cart-fragments' );
}
add_action( 'wp_enqueue_scripts', 'wpqa_disable_woocommerce_ajax_fragments', 11 );

Обратите внимание, что после этого счетчик корзины будет обновляться только при полной перезагрузке страницы.

3. Проверка пагинации и фильтров

Если у вас используются AJAX-фильтры или пагинация (например, через кастомные темы или плагины), их нужно отключить отдельно, так как WooCommerce по умолчанию не применяет AJAX к этим элементам.

Как проверить, что отключение AJAX прошло успешно

  • Добавьте товар в корзину с архивной страницы — страница должна перезагрузиться, а не обновляться через AJAX.
  • Проверьте, что счетчик товаров в корзине обновляется только после перезагрузки страницы.
  • В консоли браузера не должно быть ошибок, связанных с AJAX-запросами WooCommerce.

Частые ошибки при отключении AJAX и их исправление

  • Кнопка «Добавить в корзину» не работает — проверьте, что ссылка корректно ведет на URL добавления товара с параметром add-to-cart. Пример: ?add-to-cart=123.
  • Счетчик корзины не обновляется после добавления товара — это нормальное поведение после отключения скрипта wc-cart-fragments. Для обновления счетчика нужно перезагружать страницу.
  • Конфликты с кэшем — при использовании плагинов кэширования убедитесь, что динамические страницы (корзина, оформление заказа) не кэшируются.

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

  • Отключение AJAX может повысить стабильность на слабых хостингах и снизить количество ошибок JavaScript.
  • Убедитесь, что страницы корзины и оформления заказа защищены от кэширования, иначе данные о корзине могут отображаться неверно.
  • Если нужно сохранить динамичность, а AJAX работает с ошибками, лучше оптимизировать или заменить проблемные скрипты, а не полностью отключать AJAX.

Таблица сравнения методов отключения AJAX в WooCommerce

МетодПлюсыМинусыКогда использовать
Отключение AJAX добавления в корзину (замена кнопки)Простая реализация; совместимость с большинством темПерезагрузка страницы; хуже UXПри ошибках с AJAX или на слабом хостинге
Отключение скрипта wc-cart-fragmentsУменьшение количества AJAX-запросов; меньше ошибокСчетчик и мини-корзина обновляются только после перезагрузкиЕсли функционал мини-корзины не нужен
Использование плагинов для управления AJAXГибкая настройка; сохранение UXДополнительные зависимости; может конфликтоватьПри необходимости точечной настройки AJAX
Как изменить стоимость товара в WooCommerce в зависимости от роли пользователя
23.05.2026
Создать динамические шорткоды в WordPress с поддержкой параметров
14.04.2026
Как изменить стоимость товара в WooCommerce в зависимости от пользователя
22.04.2026
Как создать динамический виджет в WordPress с примерами кода
02.04.2026
Как создать собственный виджет в WordPress с примером кода
13.11.2025