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

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

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

Проблемы, с которыми сталкиваются разработчики:

  • Корзина не обновляется без перезагрузки страницы.
  • Кнопки добавления товара не вызывают обновление данных корзины.
  • Нестандартные темы или кастомизации ломают штатный AJAX WooCommerce.

Как проверить, работает ли AJAX в корзине WooCommerce

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

  1. Откройте страницу с товаром.
  2. Добавьте товар в корзину и обратите внимание, происходит ли перезагрузка страницы.
  3. Если страница перезагружается — AJAX не работает или отключен.
  4. Откройте консоль браузера (F12) и проверьте наличие ошибок JavaScript.

Пошаговое решение: добавляем поддержку AJAX обновления корзины

1. Подключаем скрипты AJAX WooCommerce

WooCommerce уже содержит скрипт wc-add-to-cart, который обрабатывает AJAX добавление в корзину. Убедитесь, что он подключен в вашей теме:

function mytheme_enqueue_scripts() {
    if (function_exists('is_woocommerce')) {
        wp_enqueue_script('wc-add-to-cart');
    }
}
add_action('wp_enqueue_scripts', 'mytheme_enqueue_scripts');

2. Добавляем поддержку AJAX для кнопок добавления в корзину на странице архива и каталога

Чтобы кнопки <button> или <a> с классом add_to_cart_button работали с AJAX, они должны иметь правильные атрибуты. Обычно WooCommerce делает это автоматически для товаров с типом «простой товар».

Если у вас кастомный шаблон, используйте следующий пример кнопки:

<a href="<?php echo esc_url( $product->add_to_cart_url() ); ?>" 
   data-quantity="1" 
   class="button add_to_cart_button ajax_add_to_cart" 
   data-product_id="<?php echo esc_attr( $product->get_id() ); ?>" 
   aria-label="Добавить <?php echo esc_attr( $product->get_name() ); ?> в корзину" 
   rel="nofollow">
   Добавить в корзину
</a>

3. Обработка обновления фрагментов корзины (cart fragments)

WooCommerce использует механизм cart fragments для обновления мини-корзины или счетчика товаров без перезагрузки. Убедитесь, что он не отключен в вашей теме или плагинах:

// В functions.php не должно быть такого отключения
add_filter('woocommerce_cart_fragments_enabled', '__return_false');

Если отключено, удалите или закомментируйте данную строку.

4. Кастомизация шаблона мини-корзины с поддержкой AJAX

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

jQuery(function($) {
    $('body').on('added_to_cart', function() {
        $.ajax({
            url: wc_cart_fragments_params.wc_ajax_url.toString().replace('%%endpoint%%', 'get_refreshed_fragments'),
            type: 'POST',
            success: function(data) {
                if (data && data.fragments) {
                    $.each(data.fragments, function(key, value) {
                        $(key).replaceWith(value);
                    });
                }
            }
        });
    });
});

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

После внедрения проверьте:

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

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

  • Ошибка: Кнопка не реагирует на клик или добавляет товар без AJAX.
    Причина: Нет класса ajax_add_to_cart или не подключен скрипт wc-add-to-cart.
    Решение: Добавьте класс и убедитесь, что скрипт подключен.
  • Ошибка: Мини-корзина не обновляется после добавления товара.
    Причина: Отключены cart fragments или конфликт JS.
    Решение: Удалите фильтр отключения, проверьте консоль и исправьте конфликты.
  • Ошибка: AJAX работает, но количество товаров в корзине не обновляется.
    Причина: Кэширование страниц или фрагментов.
    Решение: Настройте исключения для кэширования динамических частей.

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

  • Используйте nonce-поля в AJAX-запросах для защиты от CSRF, если пишете свои кастомные обработчики.
  • Избегайте избыточных AJAX-запросов при быстром добавлении товаров — применяйте дебаунсинг в JS, если нужно.
  • Проверяйте совместимость с плагинами кэширования и настраивайте исключения для cart fragments, чтобы динамические данные обновлялись корректно.
  • При кастомизации AJAX-логики следите за обновлениями WooCommerce — они могут изменить API или способы обработки запросов.

Сравнение способов реализации AJAX корзины в WooCommerce

ПодходПреимуществаНедостатки
Стандартный скрипт wc-add-to-cartРаботает из коробки, поддерживается WooCommerce, обновляет мини-корзинуОграничен стандартным функционалом, может конфликтовать с кастомами
Кастомный AJAX обработчикПолный контроль над логикой, можно расширять функционалТребует знаний и поддержки, возможны ошибки безопасности
Плагины AJAX корзиныБыстрое внедрение, дополнительные функцииЗависимость от стороннего кода, может замедлить сайт
WooCommerce: автоматический обзвон покупателей после оформления заказа
16.05.2026
Автоматическое изменение стоимости товаров в WooCommerce при снижении остатка на складе
20.04.2026
Как создать собственную таблицу в WordPress без плагинов
21.11.2025
Как создать динамические шорткоды в WordPress: практическое руководство
15.11.2025
Как создать динамические табличные каталоги в WordPress с помощью шорткода
17.04.2026