WooCommerce: как автоматически отключить AJAX добавление в корзину для определённых товаров

Проблема: почему нужно отключать AJAX добавление в корзину для отдельных товаров

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

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

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

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

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

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

1. Определяем ID товаров, для которых отключить AJAX

function disable_ajax_for_specific_products() {
    // Список ID товаров
    return array(12, 34, 56);
}

2. Отключение AJAX на странице товара

add_filter('woocommerce_product_single_add_to_cart_text', 'custom_disable_ajax_add_to_cart', 10, 2);
function custom_disable_ajax_add_to_cart($text, $product) {
    $disable_ajax_ids = disable_ajax_for_specific_products();
    if (in_array($product->get_id(), $disable_ajax_ids)) {
        // Изменяем текст кнопки, чтобы WooCommerce не использовал AJAX
        return __('Добавить в корзину', 'woocommerce');
    }
    return $text;
}

3. Отключение AJAX для кнопки "Добавить в корзину" в списках товаров (каталог, архив)

add_filter('woocommerce_loop_add_to_cart_link', 'custom_disable_ajax_in_loop', 10, 2);
function custom_disable_ajax_in_loop($html, $product) {
    $disable_ajax_ids = disable_ajax_for_specific_products();
    if (in_array($product->get_id(), $disable_ajax_ids)) {
        // Удаляем класс ajax_add_to_cart, который отвечает за AJAX
        $html = str_replace('ajax_add_to_cart', '', $html);
    }
    return $html;
}

4. Проверка, что AJAX не срабатывает

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

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

  • Откройте страницу товара с ID из списка disable_ajax_for_specific_products().
  • Нажмите кнопку «Добавить в корзину» и убедитесь, что страница перезагружается.
  • Проверьте, что товар добавлен в корзину (значок корзины обновился или появилась соответствующая информация).
  • На страницах каталога проверьте, что кнопки для этих товаров тоже не используют AJAX (нет обновления корзины без перезагрузки).
  • Проверьте консоль браузера на отсутствие JS ошибок.

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

  • Не отключается AJAX: возможно, тема или плагин переопределяют шаблоны WooCommerce. Проверьте, нет ли кастомных шаблонов add-to-cart и обновите их аналогично.
  • Скрипты продолжают вызывать AJAX: удалите класс ajax_add_to_cart из кнопок принудительно, как в шаге 3.
  • Кнопка становится неактивной или не отображается: проверьте правильность ID товаров и наличие товаров в базе.
  • Кэширование мешает обновлениям: очистите кэш сайта и браузера после изменений.

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

  • Не отключайте AJAX для всех товаров — это ухудшит UX и скорость работы сайта.
  • Используйте этот метод только для товаров с нестандартной логикой добавления в корзину.
  • Проверяйте консоль браузера и логи сервера на предмет ошибок после изменений.
  • При использовании кэширования страниц (например, через WP Rocket) добавьте исключения для страниц корзины и товаров с отключенным AJAX.

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

МетодПлюсыМинусы
Отключение через фильтры и удаление класса ajax_add_to_cartГибко, можно выбрать товары по ID, не требует плагиновТребует правок кода, зависит от темы и плагинов
Использование плагинов для управления AJAXПростота настройки через UI, поддержка разработчиковМожет добавить нагрузку, не всегда гибко для отдельных товаров
Полное отключение AJAX добавления в корзинуПростота, совместимостьПониженный UX, медленная работа сайта
Как создать собственный плагин для автоматического отчёта в WordPress
01.03.2026
Как использовать REST API для установки и управления WP-Cron задачами в WordPress
08.06.2026
Как создать поддержку многоязычности в WordPress без плагинов
18.11.2025
Как установить и настроить WP GraphQL в WordPress для расширенного API
17.02.2026
Как отключить AJAX в корзине WooCommerce и почему это может понадобиться
14.12.2025