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

Проблема: обновление корзины WooCommerce без перезагрузки страницы

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

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

Чтобы понять, что корзина обновляется с перегрузкой страницы:

  • Добавьте товар в корзину и посмотрите, обновляется ли страница полностью;
  • Проверьте консоль браузера на наличие ошибок JavaScript;
  • Убедитесь, что тема или плагины не блокируют AJAX-запросы;
  • Посмотрите сетевые запросы в DevTools — есть ли запросы к REST API при изменении корзины.

Пошаговое решение: обновление корзины через REST API

1. Включите REST API WooCommerce

WooCommerce REST API включён по умолчанию. Убедитесь, что она доступна на вашем сайте, перейдя по адресу https://ваш-сайт/wp-json/wc/v3/. Для неавторизованных пользователей можно создавать отдельные эндпоинты или использовать nonce для безопасности.

2. Создайте JavaScript код для добавления и удаления товаров из корзины

В вашей теме или плагине подключите скрипт, который будет отправлять запросы к REST API и обновлять DOM без перезагрузки.

jQuery(document).ready(function($){
  function updateCartCount(count) {
    $('.cart-count').text(count);
  }

  $('.add-to-cart-button').on('click', function(e){
    e.preventDefault();
    var productId = $(this).data('product-id');

    $.ajax({
      url: '/wp-json/wc/store/cart/items',
      method: 'POST',
      contentType: 'application/json',
      data: JSON.stringify({
        id: productId,
        quantity: 1
      }),
      success: function(response) {
        updateCartCount(response.item_count);
        alert('Товар добавлен в корзину');
      },
      error: function() {
        alert('Ошибка при добавлении товара в корзину');
      }
    });
  });
});

Обратите внимание: мы используем REST API Store Endpoints из WooCommerce Blocks (пакет WooCommerce), который доступен в последних версиях WooCommerce. Если у вас классический WooCommerce без блоков, потребуется создать кастомный REST endpoint или использовать AJAX на основе admin-ajax.php.

3. Обновление содержимого корзины на странице

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

function refreshCart() {
  $.getJSON('/wp-json/wc/store/cart', function(data) {
    $('.cart-count').text(data.item_count);
    // Можно также обновить список товаров в корзине
  });
}

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

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

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

  • Ошибка 401 Unauthorized при вызове REST API: Проверьте, что запросы выполняются с корректным nonce или через авторизованного пользователя. Для фронтенд-запросов используйте фильтр wp_localize_script для передачи nonce.
  • REST API Store Endpoints отсутствуют: Убедитесь, что установлен и активирован плагин WooCommerce Blocks. Если нет, придется писать кастомные REST endpoints.
  • Корзина не обновляется после запроса: Проверьте правильность селекторов в JS и структуру DOM. Возможно, требуется обновить также нестандартные виджеты.
  • Конфликты с кэшированием: При работе с REST API важно исключить кэширование ответов, иначе обновления корзины не будут видны. Настройте серверный кэш и плагин кэширования соответственно.

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

  • Используйте wp_localize_script для передачи nonce и URL REST API в JS, чтобы защитить запросы от CSRF.
  • Ограничьте REST API доступ к корзине только авторизованным или проверенным пользователям, если корзина содержит персональные данные.
  • Минимизируйте количество запросов — обновляйте только необходимые элементы DOM, избегая полной перерисовки страницы.
  • Используйте дебаунсинг при частых обновлениях корзины (например, при изменении количества товаров), чтобы уменьшить нагрузку.

Сравнение методов обновления корзины

МетодПлюсыМинусы
Перезагрузка страницы (стандарт WooCommerce)Простота реализации, совместимость с большинством тем и плагиновПлохой UX, высокая нагрузка, потеря состояния на странице
AJAX через admin-ajax.phpРаботает на всех версиях WooCommerce, гибкостьБольшая нагрузка на сервер, медленнее REST API
REST API (WooCommerce Store Endpoints)Быстрое асинхронное обновление, современный подходТребуется WooCommerce Blocks, может не работать на старых версиях
Как использовать фильтры для модификации выводимых данных
30.11.2025
Как использовать хуки WordPress для изменения вывода WooCommerce
24.04.2026
Как удалить неактивных пользователей из базы данных WordPress
20.02.2026
Как сделать автоматический откат обновлений в WordPress при ошибках
29.03.2026
Как создать многоуровневую навигацию в WordPress без плагинов
01.01.2026