wpinc.ru wordpress WP Inc

Почему в WooCommerce не работает проверка наличия товара в корзине и как исправить

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

В WooCommerce нередко возникает ситуация, когда магазин не блокирует добавление товара в корзину, хотя его запас (stock) равен нулю или меньше. Это приводит к оформлению заказов с отсутствующим товаром, конфликтам с поставками и негативным отзывам.

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

  • Клиенты добавляют в корзину товары, которых нет в наличии.
  • В админке WooCommerce указано, что товар закончился (Out of stock), но на сайте корзина все равно принимает его.
  • Используются кастомные решения или плагины, которые работают с корзиной, и они не учитывают статус наличия.

Как проверить, действительно ли проверка не работает

Для диагностики вручную:

  1. Перейдите в WooCommerce → Товары и выберите товар с нулевым запасом.
  2. Убедитесь, что галочка Управлять запасом? включена, а количество на складе равно 0.
  3. Откройте страницу этого товара в публичной части сайта и попробуйте добавить его в корзину.
  4. Если товар добавляется — проверка не работает.

Если в стандартном шаблоне WooCommerce проблема не воспроизводится, значит, конфликт скорее всего вызван кастомным кодом или сторонним плагином.

Пошаговое решение: как исправить проверку наличия товара в корзине

WooCommerce по умолчанию должен блокировать добавление товара в корзину, если запас равен 0. Если это не происходит, рекомендуем сделать следующее.

1. Проверка настроек WooCommerce

  • В админке перейдите в WooCommerce → Настройки → Товары → Запасы.
  • Убедитесь, что опция Включить управление запасами активирована.
  • Проверьте, что Разрешить заказы под заказ (Allow backorders) отключена или установлена в значение «Нет».

2. Отключение сторонних плагинов, влияющих на корзину

Отключите все плагины, которые могут вмешиваться в процесс добавления товара в корзину (кэш, оптимизация, кастомные фильтры). Проверьте, работает ли проверка без них.

3. Исправление с помощью кода: фильтр woocommerce_add_to_cart_validation

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

add_filter('woocommerce_add_to_cart_validation', 'custom_check_product_stock_before_add', 10, 3);
function custom_check_product_stock_before_add($passed, $product_id, $quantity) {
    $product = wc_get_product($product_id);
    if (!$product->is_in_stock()) {
        wc_add_notice(__('Извините, этот товар отсутствует на складе и не может быть добавлен в корзину.'), 'error');
        return false;
    }
    if ($product->get_stock_quantity() < $quantity) {
        wc_add_notice(sprintf(__('На складе доступно только %d единиц этого товара.'), $product->get_stock_quantity()), 'error');
        return false;
    }
    return $passed;
}

Этот фильтр блокирует добавление товара в корзину, если он отсутствует на складе, или если запрошенное количество превышает доступное.

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

Для проверки:

  1. Обновите страницу продукта с нулевым запасом.
  2. Попробуйте добавить в корзину — должно появиться сообщение об ошибке, и товар не добавится.
  3. Проверьте добавление товара с ограниченным запасом, превышая количество — также должна быть ошибка.
  4. Убедитесь, что товары с достаточным запасом добавляются без проблем.

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

  • Ошибка: Включены заказы под заказ (backorders).
    Решение: Отключите эту опцию в настройках WooCommerce, если не хотите, чтобы товары с нулевым запасом добавлялись.
  • Ошибка: Кэширование страниц корзины или товара.
    Решение: Настройте исключения для страниц корзины и оформления заказа в плагинах кэширования (например, WP Super Cache, LiteSpeed Cache).
  • Ошибка: Кастомные фильтры или действия изменяют поведение корзины.
    Решение: Проанализируйте сторонние плагины и кастомный код, временно отключите их для теста.

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

  • Всегда проверяйте логи ошибок PHP и WooCommerce (WooCommerce → Статус) при подозрениях на проблемы с корзиной.
  • Используйте функцию wc_add_notice() для информирования пользователя о невозможности добавить товар.
  • Минимизируйте количество сторонних плагинов, влияющих на корзину, чтобы снизить риск конфликтов.
  • Соблюдайте стандартные хуки и фильтры WooCommerce для совместимости при обновлениях.

Сравнение вариантов решения проблемы

МетодПлюсыМинусы
Настройки WooCommerceБыстро, без кодаИногда недостаточно при кастомных решениях
Отключение конфликтных плагиновУстраняет сторонние проблемыМожет нарушить функционал сайта
Код с фильтром woocommerce_add_to_cart_validationТочный контроль, легко масштабируетсяТребует навыков программирования
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙