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

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

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

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

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

  • Проверьте консоль браузера на наличие JS ошибок при добавлении товара.
  • Проанализируйте, есть ли у товара особые атрибуты или настройки, влияющие на добавление в корзину.
  • Посмотрите, не конфликтует ли AJAX с кастомными плагинами или темами.

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

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

Ниже пример кода, который отключает AJAX добавление для товаров с ID 12, 34 и 56:

add_filter('woocommerce_product_single_add_to_cart_text', 'disable_ajax_for_specific_products', 10, 2); 
function disable_ajax_for_specific_products($text, $product) {
    $disable_ajax_ids = array(12, 34, 56); // ID товаров
    if (in_array($product->get_id(), $disable_ajax_ids)) {
        // Меняем текст кнопки, если нужно
        return 'Добавить в корзину (без AJAX)';
    }
    return $text;
}

add_filter('woocommerce_loop_add_to_cart_link', 'remove_ajax_class_for_specific_products', 10, 2);
function remove_ajax_class_for_specific_products($html, $product) {
    $disable_ajax_ids = array(12, 34, 56);
    if (in_array($product->get_id(), $disable_ajax_ids)) {
        // Убираем класс ajax_add_to_cart
        $html = str_replace('ajax_add_to_cart', '', $html);
    }
    return $html;
}

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

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

Чтобы отключить AJAX и на странице одиночного товара, нужно добавить JS, который заменит поведение кнопки:

add_action('wp_footer', 'disable_ajax_add_to_cart_on_single_product');
function disable_ajax_add_to_cart_on_single_product() {
    if (is_product()) {
        global $product;
        $disable_ajax_ids = array(12, 34, 56);
        if (in_array($product->get_id(), $disable_ajax_ids)) {
            ?>
            <script type="text/javascript">
                jQuery(document).ready(function($) {
                    $('form.cart').off('submit'); // Отключаем AJAX обработчик
                });
            </script>
            <?php
        }
    }
}

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

  • Перейдите на страницу товара с ID из списка (например, 12).
  • Нажмите кнопку "Добавить в корзину" — страница должна перезагрузиться, подтверждая отключение AJAX.
  • Для товара без отключения AJAX — добавление должно работать без перезагрузки.
  • Проверьте консоль браузера на отсутствие ошибок JS.
  • Проверьте, что корзина обновляется корректно и количество товаров меняется.

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

  • Код не срабатывает для товаров на странице каталога: убедитесь, что ID товаров указаны правильно и фильтр woocommerce_loop_add_to_cart_link используется.
  • Кнопка исчезает или не работает: не удаляйте лишние классы у кнопки, кроме ajax_add_to_cart. Проверьте, что HTML кнопки остаётся корректным.
  • AJAX отключается для всех товаров: проверьте условие in_array и правильность передачи ID.
  • JavaScript не отключает AJAX на странице товара: проверьте, что скрипт подключается и jQuery доступен.

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

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

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

МетодПлюсыМинусы
Удаление класса ajax_add_to_cart (фильтр PHP)Простая реализация, работает на страницах каталогаНе отключает AJAX на странице товара, нужен JS
Отключение AJAX через JS на странице товараГибкое, не требует изменения шаблоновЗависит от корректной загрузки скриптов
Полная переделка шаблонов WooCommerceПолный контроль над функционаломСложно, требует поддержки и обновлений
Как использовать REST API для автоматизации управления заказами в WooCommerce
27.04.2026
Как создать собственный плагин для автоматического отчёта в WordPress
01.03.2026
Как автоматически удалять старые новости в WordPress
11.04.2026
Как использовать Hooks в WordPress для расширения функциональности
12.11.2025
Как использовать REST API в WordPress для создания настраиваемых приложений
08.11.2025