WooCommerce

Не добавляется товар в корзину WooCommerce: причины и как исправить

Нажимаете «В корзину», кнопка реагирует, а товар не появляется. Или появляется на секунду и исчезает после перехода на другую страницу. Иногда проблема возникает только у гостей, только на мобильном или только у вариативных товаров. Это не одна ошибка, а несколько разных сценариев с похожим симптомом.

Главное правило диагностики: не начинайте с массового отключения всего подряд. Сначала определите, на каком этапе теряется товар: кнопка, запрос к серверу, сессия WooCommerce или отображение корзины.

Что происходит, когда покупатель нажимает «В корзину»

В современном WooCommerce корзина — не просто страница с таблицей товаров. Блоки Cart и Checkout работают через Store API, а состояние корзины связано с текущей пользовательской сессией. При добавлении товара сервер должен принять запрос, проверить товар и его параметры, записать состояние корзины и вернуть актуальные данные интерфейсу.

Если ломается хотя бы одно звено, пользователь видит простую картину: «товар не добавился». Для магазина последствия шире: падает конверсия, реклама продолжает приводить посетителей, а до оплаты они физически не доходят.

Быстрая проверка: определяем тип ошибки

Откройте магазин в режиме инкогнито и попробуйте добавить обычный простой товар. Затем повторите тест с проблемным товаром.

  • Не работает ни один товар — проверяем JavaScript, Store API, кэш, сессии и серверные ошибки.
  • Не работает один товар — проверяем его статус, цену, остаток, ограничения и настройки.
  • Проблема только у вариативных товаров — вероятны некорректные атрибуты, variation ID или конфликт формы выбора вариации.
  • Товар появляется, но после обновления корзина пустая — в первую очередь проверяем сессии, cookies и кэш.
  • В корзине товар есть, но мини-корзина показывает ноль — это уже может быть проблема синхронизации интерфейса, а не потеря товара.

Что это значит. Один и тот же визуальный симптом может находиться на разных уровнях системы. Поэтому «переустановить WooCommerce» — примерно как менять двигатель, когда на панели перегорела лампочка.

1. Проверьте сам товар

Начните с безопасного. В карточке товара проверьте, что он опубликован, имеет цену и доступен для покупки. Если включено управление запасами, убедитесь, что остаток не равен нулю и настройки backorder соответствуют вашей логике продаж.

Для вариативного товара проверьте каждую используемую вариацию: атрибуты должны быть назначены корректно, сама вариация — активна, а цена и наличие — заполнены.

Если видите это — вероятнее всего… Простой товар добавляется, а вариативный нет — не спешите трогать сервер. Сначала ищите проблему в данных вариации или JavaScript формы товара.

2. Посмотрите запрос в DevTools: это самый короткий путь к причине

Откройте инструменты разработчика браузера → Network, очистите список запросов и нажмите «В корзину». В магазинах на блоках WooCommerce вы можете увидеть обращения к Store API, включая маршруты корзины.

Если запрос завершается успешно и сервер возвращает обновлённую корзину, а интерфейс остаётся пустым, проблема вероятнее на клиентской стороне: JavaScript, мини-корзина, оптимизация скриптов или сторонняя тема.

Если ответ содержит 403, 404, 429 или 500, причина уже ближе к серверу, защите, REST API или PHP. Для отдельной диагностики серверной ошибки используйте материал как исправить ошибку 500 в WordPress.

WooCommerce Store API требует корректного nonce или Cart Token для операций записи. Поэтому ошибки токена, агрессивное кэширование HTML или вмешательство security/CDN-слоя могут приводить к тому, что запрос добавления отклоняется.

3. Проверьте Console на JavaScript-ошибки

Перейдите в DevTools → Console и повторите добавление. Красная ошибка JavaScript, появившаяся в этот момент, — важная зацепка.

Особенно внимательно смотрите на файлы плагинов оптимизации, вариаций, фильтров товаров, аналитики, popup/mini-cart и кастомные скрипты темы. Ошибка одного расширения может остановить код, который должен отправить или обработать запрос корзины.

В 2026 году в официальном репозитории WooCommerce уже фиксировались регрессии, затрагивающие Add to Cart в Products block, mini-cart и новый Add to Cart with Options. Это хороший пример универсального принципа: если проблема появилась сразу после обновления, проверяйте changelog и GitHub до того, как начнёте «лечить» базу данных.

4. Исключите кэш корзины

Cart и Checkout содержат персональные данные сессии и не должны отдаваться покупателям как одна и та же закэшированная страница. Официальная документация WooCommerce отдельно рекомендует исключать корзину и оформление заказа из кэширования.

Проверьте настройки плагина кэша, серверного page cache и CDN. Если используются правила оптимизации JavaScript — временно отключите delay/defer именно для WooCommerce-скриптов на тестовой копии и повторите сценарий.

Не делайте так: не отключайте весь кэш на рабочем магазине навсегда. Сначала подтвердите причинно-следственную связь. Если после исключения Cart/Checkout проблема исчезла — настраивайте точечные исключения.

5. Если товар исчезает — проверяйте сессию WooCommerce

Сессия позволяет WooCommerce помнить корзину конкретного посетителя между запросами. Если она не сохраняется, товар может успешно добавиться на одном запросе, а следующая страница уже увидит пустую корзину.

Проверьте, воспроизводится ли проблема у гостя и авторизованного пользователя одинаково. Затем посмотрите cookies браузера и ответы Store API. В официальном репозитории WooCommerce описывался случай, когда отсутствие таблицы woocommerce_sessions приводило к постоянно пустой корзине: покупатель добавлял товары, но сессия не могла сохраниться.

Удалять или вручную редактировать таблицы на рабочем магазине ради проверки не нужно. Если подозрение дошло до базы данных — сначала резервная копия и staging.

6. Проверьте nonce, REST API и защиту

Store API использует namespace /wp-json/wc/store/v1/. Запросы, изменяющие корзину, защищаются nonce или Cart Token. Если firewall, security-плагин, CDN или кастомный код блокирует REST-запросы, корзина может перестать работать, хотя обычные страницы магазина открываются без ошибок.

В Network смотрите не только HTTP-код, но и тело ответа. Сообщение Nonce is invalid — не повод отключать проверку nonce в production. В документации WooCommerce возможность отключения проверки прямо обозначена как вариант только для development-среды.

Правильное решение — найти, почему клиент получает устаревший токен: кэш страницы, некорректная интеграция, сторонний блок или конфликт скриптов.

7. Сделайте conflict test, но не на покупателях

Если базовые проверки ничего не показали, переходите к конфликтам. На staging-копии оставьте WooCommerce, временно переключитесь на совместимую стандартную тему и отключите сторонние плагины. Затем возвращайте их по одному, каждый раз повторяя один и тот же тест добавления товара.

Особое внимание — расширениям, которые меняют карточку товара, вариации, цены, корзину, мини-корзину, скидки, кеширование и JavaScript.

Дилемма здесь простая: массовое отключение плагинов быстрее, но на живом магазине может сломать оплату, доставку и текущие сессии. Staging занимает несколько минут на подготовку, зато превращает эксперимент в диагностику.

8. Включайте логирование только тогда, когда оно действительно нужно

Если запрос падает с 500 или PHP-ошибкой, используйте серверный error log и журнал WordPress. Официальная документация WordPress рекомендует применять WP_DEBUG и WP_DEBUG_LOG для разработки и диагностики, а не оставлять отладочный вывод на рабочем сайте.

Если одновременно появляются фатальные ошибки, полезно отдельно пройти алгоритм поиска причины Fatal Error в WordPress. А если проблема возникла непосредственно после обновления расширения, используйте диагностику критической ошибки после обновления плагина.

А если корзина работает, но заказ не оформляется?

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

Такое разделение важно и технически, и для SEO: корзина отвечает за состояние товаров и сессии, Checkout — за валидацию, доставку, создание заказа и оплату.

Коротко: что делать сейчас

  1. Проверить простой и проблемный товар в инкогнито.
  2. Определить: товар не добавляется вообще или исчезает после перехода.
  3. Посмотреть Network и Console в момент клика.
  4. Проверить исключения Cart/Checkout из page cache.
  5. Проверить сессию, cookies и ответы Store API.
  6. Если есть 403/500 или nonce error — искать причину в защите, REST API, кэше и сервере.
  7. Conflict test проводить на staging, а не на работающем магазине.

Универсальный принцип здесь полезнее любого списка плагинов: один тест — одна переменная. Тогда вы находите причину, а не случайную комбинацию настроек, после которой «вроде заработало».

FAQ

Почему кнопка «В корзину» нажимается, но ничего не происходит?

Чаще всего нужно проверить JavaScript в Console и сетевой запрос в Network. Если запрос вообще не отправляется, вероятен конфликт скриптов. Если отправляется и получает ошибку — анализируйте HTTP-код и ответ сервера.

Почему товар добавляется, а после обновления страницы исчезает?

Это похоже на проблему с пользовательской сессией, cookies или кэшированием. Проверьте, видит ли Store API тот же состав корзины после нового запроса.

Может ли плагин кэша ломать корзину WooCommerce?

Да. Корзина и Checkout динамические и зависят от сессии пользователя. Эти страницы необходимо корректно исключать из page cache; оптимизация JavaScript также может нарушить работу интерфейса.

Нужно ли отключать все плагины?

Только как контролируемый conflict test, желательно на staging. На рабочем магазине массовое отключение расширений может повлиять на оплату, доставку и активных покупателей.

Что делать при ошибке «Nonce is invalid»?

Не отключать защиту nonce на production. Проверьте кэш, Store API, CDN/security-правила и сторонний код, который может использовать устаревший токен.

Когда пора остановиться

Если магазин принимает реальные заказы, а диагностика дошла до базы данных, сессий, REST API, PHP, firewall или отключения платёжных расширений, дальнейшие эксперименты на production могут стоить дороже самой ошибки. Безопаснее зафиксировать симптом, сохранить логи и продолжить на staging.

Исправить корзину WooCommerce