WooCommerce: как установить ограничение на количество товаров в корзине

Диагностика: зачем ограничивать количество товаров в корзине WooCommerce

Ограничение количества товаров в корзине полезно для магазинов с физическими ограничениями по упаковке, логистике или акциями. Например, розничный магазин может продавать не более 5 единиц одного товара за один заказ. Без ограничения клиент может добавить необоснованно много товара, что приведёт к задержкам и ошибкам обработки заказов.

Как установить ограничение на количество товаров в корзине WooCommerce

Шаг 1. Определите бизнес-логику ограничения

Решите, нужно ли ограничивать количество товаров по каждой товарной позиции отдельно или общее количество товаров в корзине. Также определите лимит (например, максимум 5 штук одного товара и максимум 20 товаров в корзине).

Шаг 2. Добавьте фильтр для проверки количества товаров

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

add_filter('woocommerce_add_to_cart_validation', 'wpin_limit_cart_quantity', 10, 3);
function wpin_limit_cart_quantity($passed, $product_id, $quantity) {
    $max_quantity = 5; // Максимум 5 штук одного товара
    $current_quantity = 0;

    foreach (WC()->cart->get_cart() as $cart_item) {
        if ($cart_item['product_id'] == $product_id) {
            $current_quantity += $cart_item['quantity'];
        }
    }

    if (($current_quantity + $quantity) > $max_quantity) {
        wc_add_notice(sprintf('Вы можете добавить не более %d единиц этого товара в корзину.', $max_quantity), 'error');
        return false;
    }

    return $passed;
}

Шаг 3. Ограничение общего количества товаров в корзине

Чтобы ограничить общее количество товаров в корзине (например, не более 20), используйте следующий код:

add_action('woocommerce_check_cart_items', 'wpin_limit_total_cart_items');
function wpin_limit_total_cart_items() {
    $max_total_items = 20;
    $cart_count = WC()->cart->get_cart_contents_count();

    if ($cart_count > $max_total_items) {
        wc_add_notice(sprintf('Общее количество товаров в корзине не может превышать %d.', $max_total_items), 'error');
    }
}

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

  • Попробуйте добавить в корзину товар более установленного лимита (например, 6 единиц). Появится сообщение об ошибке, и добавление не произойдёт.
  • Добавьте несколько товаров так, чтобы общее количество превысило лимит (например, 21 штуку). При обновлении корзины появится ошибка.
  • Убедитесь, что при добавлении допустимого количества товаров ошибок нет и корзина работает как обычно.

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

  • Ошибка: ограничение не срабатывает при добавлении товара из разных мест (например, с архивов и с карточки товара).
    Проверьте, что фильтр woocommerce_add_to_cart_validation подключён и возвращает false при превышении лимита.
  • Ошибка: после обновления WooCommerce код перестал работать.
    Проверьте актуальность хуков и используйте последние методы API корзины WooCommerce.
  • Ошибка: сообщение об ошибке не отображается.
    Убедитесь, что в шаблоне корзины вызывается функция wc_print_notices().

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

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

Сравнение методов ограничения количества товаров

МетодПреимуществаНедостатки
Код в functions.phpБыстрая реализация, контроль через кодТребуется навыки разработки, возможны ошибки при обновлениях
Плагины (например, WooCommerce Max Quantity)Готовое решение, настройки через интерфейсМожет влиять на производительность, часто платные
⭐⭐⭐⭐⭐