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

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

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

Основные симптомы проблем с AJAX в WooCommerce:

  • Обновление корзины или количества товаров не происходит без перезагрузки страницы.
  • Добавление товаров в корзину с помощью AJAX не срабатывает.
  • Проблемы с отображением динамических цен и купонов.

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

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

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

add_filter( 'woocommerce_product_add_to_cart_url', function( $url, $product ) {
    // Возвращаем стандартный URL без AJAX
    return $product->is_type( 'simple' ) ? $product->get_permalink() : $url;
}, 10, 2 );

Этот фильтр заставит кнопку "Добавить в корзину" вести на страницу товара, а не использовать AJAX.

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

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

function disable_woocommerce_ajax() {
    // Убираем скрипт, отвечающий за AJAX добавление в корзину
    wp_dequeue_script( 'wc-add-to-cart' );
    // Убираем обновление мини-корзины через AJAX
    wp_dequeue_script( 'wc-cart-fragments' );
}
add_action( 'wp_enqueue_scripts', 'disable_woocommerce_ajax', 99 );

Шаг 3. Обработка оформления заказа без AJAX

WooCommerce использует AJAX для динамического обновления формы оформления заказа (например, пересчёта стоимости при изменении способа доставки). Чтобы отключить AJAX, нужно:

  • Отключить скрипты checkout с AJAX.
  • Обеспечить корректную работу формы с полноценной перезагрузкой страницы.

Для этого можно использовать следующий код:

function disable_checkout_ajax_scripts() {
    if ( is_checkout() ) {
        wp_dequeue_script( 'wc-checkout' );
    }
}
add_action( 'wp_enqueue_scripts', 'disable_checkout_ajax_scripts', 99 );

После отключения скриптов убедитесь, что форма отправляется стандартным POST-запросом.

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

Чтобы убедиться, что AJAX полностью отключен и функционал не потерян:

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

Для проверки AJAX запросов можно использовать вкладку Network в инструментах разработчика браузера (F12). Отсутствие XHR запросов к wp-admin/admin-ajax.php означает, что AJAX отключён.

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

1. Форма оформления заказа не отправляется

Причина: отключены скрипты, но форма не настроена для стандартного POST-запроса.

Решение: проверьте, что кнопка отправки <button type="submit"> и форма имеют правильные атрибуты (action, method="post").

2. Мини-корзина не обновляется после добавления товара

Причина: скрипты AJAX отключены, но отсутствует редирект на страницу корзины или перезагрузка.

Решение: добавьте редирект на страницу корзины после добавления товара:

add_filter( 'woocommerce_add_to_cart_redirect', function( $url ) {
    return wc_get_cart_url();
} );

3. Конфликты с кэшированием

Причина: AJAX отключен, но страницы с корзиной и оформлением заказа кэшируются.

Решение: исключите из кэширования страницы корзины и оформления заказа. Например, для nginx и WP Rocket или другого кэш-плагина настройте исключения.

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

  • Безопасность: отключение AJAX снижает поверхность для XHR-атак, но убедитесь, что все формы имеют nonce-поля WooCommerce для защиты от CSRF.
  • Производительность: отключение AJAX уменьшит количество запросов к серверу, но увеличит нагрузку на полную перезагрузку страниц — оптимизируйте кэширование и сервер.
  • SEO: отключение AJAX улучшает индексируемость страниц, так как URL меняется при обновлении корзины и оформления заказа.

Сравнение вариантов отключения AJAX в WooCommerce

МетодОписаниеПлюсыМинусы
Удаление скриптов через wp_dequeue_scriptПолное отключение AJAX-скриптов WooCommerce на сайтеПростота внедрения, контроль над запросамиПотеря плавности UX, больше перезагрузок
Фильтры для изменения поведения кнопокИзменение ссылок и редиректов без загрузки скриптовМеньше кода, гибкость в нужных местахНе отключает все AJAX, возможны конфликты
Изменение шаблонов темыРедактирование кнопок и форм в шаблонах темыПолный контроль над выводом и поведениемТребует поддержки при обновлении темы
WooCommerce: как автоматически удалять товары после отмены заказа
07.08.2026
Как избежать проблем с производительностью при очистке кеша WooCommerce
25.04.2026
Как избежать конфликтов между плагинами в WordPress
12.02.2026
Как автоматизировать удаление старых черновиков и автосохранений в WordPress
14.01.2026
Как создать динамические виджеты в WordPress: практическое руководство
24.11.2025