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

Почему нужно отключать AJAX для некоторых товаров в WooCommerce

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

Диагностика: как понять, что AJAX мешает

Основные признаки проблем с AJAX добавлением в корзину:

  • При клике на кнопку «В корзину» ничего не происходит или появляется ошибка JavaScript;
  • Товар с вариациями не добавляется корректно без перезагрузки;
  • Пользователь не видит изменений корзины без обновления страницы;
  • Конфликты с кастомными скриптами или плагинами, работающими с товарами.

Для диагностики откройте консоль браузера (F12 → Console) и проверьте наличие ошибок JS при попытке добавить товар в корзину. Если ошибки связаны с AJAX, имеет смысл отключить AJAX для проблемных товаров.

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

Рассмотрим пример, как отключить AJAX добавление в корзину для товаров с определённой категорией или по ID. Для этого нужно переопределить атрибут кнопки «Добавить в корзину» и отключить AJAX для этих товаров.

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

Допустим, у вас есть категория товаров с ярлыком no-ajax, для которых нужно отключить AJAX.

2. Добавляем код в functions.php темы или в кастомный плагин

add_filter('woocommerce_loop_add_to_cart_link', 'disable_ajax_add_to_cart_for_specific_products', 10, 2); 
function disable_ajax_add_to_cart_for_specific_products($html, $product) {
    if ( has_term('no-ajax', 'product_cat', $product->get_id()) ) {
        // Удаляем класс ajax_add_to_cart
        $html = str_replace('ajax_add_to_cart', '', $html);
        
        // Добавляем data-attribute для отладки (необязательно)
        $html = str_replace('add_to_cart_button', 'add_to_cart_button no-ajax-button', $html);
    }
    return $html;
}

Этот фильтр удалит класс ajax_add_to_cart у кнопок добавления товаров из категории no-ajax, что отключит AJAX для них.

3. Отключаем AJAX добавление на странице одиночного товара для тех же товаров

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

add_action('wp_enqueue_scripts', 'conditionally_disable_ajax_add_to_cart_script');
function conditionally_disable_ajax_add_to_cart_script() {
    if (is_product()) {
        global $product;
        if ($product && has_term('no-ajax', 'product_cat', $product->get_id())) {
            wp_dequeue_script('wc-add-to-cart');
        }
    }
}

Проверка результата: как убедиться, что AJAX отключен

  • Откройте страницу товара из категории no-ajax и кликните кнопку «Добавить в корзину» — страница должна перезагрузиться, а не сработать AJAX.
  • Проверьте консоль разработчика (F12 → Console) на отсутствие ошибок.
  • Добавьте товар из другой категории — AJAX должен работать как обычно.

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

  • Ошибка: Кнопка не работает или не отображается.
    Причина: Некорректное удаление класса или конфликт с темой.
    Решение: Проверьте точность фильтра, используйте дебаг с var_dump для товара.
  • Ошибка: AJAX отключен для всех товаров.
    Причина: Неправильно указан фильтр, например, опечатка в слаге категории.
    Решение: Убедитесь, что has_term() корректно проверяет категорию.
  • Ошибка: Скрипт wc-add-to-cart не деактивируется на странице товара.
    Причина: Условие is_product() не сработало из-за кеширования.
    Решение: Очистите кеш, отключите CDN, проверьте условия в шаблоне.

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

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

Сравнение подходов: плагин vs кастомный код

МетодПлюсыМинусы
Плагин (например, Disable AJAX Add to Cart)Быстрое решение, не требует кода, поддержка обновленийМожет быть тяжеловесным, не всегда гибкий, лишние функции
Кастомный код (как в статье)Лёгкий, заточен под конкретные задачи, полный контрольТребует навыков, нужно поддерживать самому
Как отключить XML-RPC в WordPress для повышения безопасности
02.01.2026
Как удалить кэш в WordPress: пошаговое руководство
01.02.2026
Как добавить автоматическое обновление плагинов в WordPress без помощи коммерческих пакетов
20.12.2025
WooCommerce: как автоматически изменять цены товаров для разных ролей пользователей
03.07.2026
Оптимизация базы данных WordPress: удаляем старые ревизии и чистим базу
15.11.2025