Как установить минимальное количество товара в WooCommerce: инструкция

от Михаил | Авг 11, 2026 | Уроки

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

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

Магазин упаковок, оптовая продажа или доставка с фиксированной ценой — каждый мелкий заказ бьёт по марже. Минимальный порог отсекает невыгодные покупки и поднимает средний чек. Эксперименты западных магазинов показывают рост среднего чека на 10–20% после ввода минимальной суммы. Клиент либо добавляет товары до порога, либо уходит к конкуренту — так работает фильтрация целевой аудитории.

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

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

На маркетплейсе WooCommerce три популярных расширения. Сравним их по ключевым функциям, чтобы вы не тратили время на неактуальные решения.

ВозможностьMin Max QuantitiesQuantities and UnitsOrder Minimum/Maximum Amount
Минимальное количество товараДаДаНет
Максимальное количество товараДаДаНет
Минимальная сумма заказаТолько PROНетДа
Правила для категорий товаровТолько PROНетНет
Ограничение покупки по ролям пользователейТолько PROНетНет
Шаг количества (Group of, Quantity Steps)ДаДаНет
Последнее обновление202420222023

Quantities and Units for WooCommerce не обновлялся больше двух лет и имеет известную ошибку с вариативными товарами: блокировка не срабатывает, когда открывается товар с атрибутом по умолчанию. Не используйте его для нового магазина. Оптимальный бесплатный выбор — Min Max Quantities. Бесплатная версия закрывает базовые потребности: минимум, максимум и шаг количества. Продвинутые сценарии — категории, роли, минимальная сумма заказа — открываются в PRO.

Установка и подготовка магазина

Перед установкой плагина проверьте, что ваш сайт тянет требования. Min Max Quantities работает на WordPress 5.2+, WooCommerce 3.0+, PHP 7.4+ и MySQL 5.6+. Если на хостинге стоит PHP 7.2 — сначала обновите PHP, иначе получите белую страницу.

  1. В админ-панели откройте «Плагины → Добавить новый».
  2. В поиске введите «Min Max Quantities».
  3. Установите и активируйте плагин.
  4. Перейдите в карточку любого товара и найдите вкладку «Min/Max Quantity».

После активации плагин добавляет поля Minimum Quantity, Maximum Quantity и Group of в карточку товара. Никаких отдельных настроек для включения не нужно.

Настройка минимального количества товара в WooCommerce: пошаговая инструкция

Для простых товаров

Откройте товар, перейдите на вкладку «Min/Max Quantity». В поле Minimum Quantity введите минимальное значение, например 10. Maximum Quantity — максимальное, например 100. Сохраните товар. Покупатель физически не сможет добавить в корзину меньше 10 и больше 100 штук.

Для вариативных товаров

У вариативного товара поля появятся внутри каждой вариации. Разверните вариацию и задайте свой минимум и максимум. Обратите внимание на опцию Combine Variations: если включить её, корзина будет суммировать количество всех вариаций одного товара. Без неё каждая вариация считается отдельно, и правило сработает некорректно.

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

Приоритет правил: какое правило побеждает

Когда у вас настроены глобальные, категорийные, товарные правила и правила по ролям, действует строгая иерархия. Если для товара задан минимум 10, а для категории — 5, товарное правило перекроет категорийное.

УровеньПриоритет
Роль пользователяВысший
Конкретная вариацияВыше товарного
Простой товарВыше категорийного
КатегорияВыше глобального
Глобальные настройкиБазовый уровень

Это означает, что для оптового клиента с ролью «wholesale» вы можете задать минимум 50 штук, а для розницы — 2. Правило роли перекроет любые товарные и категорийные настройки.

Настройка шага количества и кратности покупки

Часто нужно продавать не поштучно, а упаковками. Если товар упакован по 6 штук, задайте поле Group of значение 6. Тогда покупатель сможет добавить 6, 12, 18 — но не 7 или 9. Это же поле в плагине называется Quantity Steps. В Min Max Quantities оно находится там же, где и минимум с максимумом.

Учтите правило: минимальное количество должно быть кратно шагу. Если минимум 5, а шаг 6 — получите конфликт, и корзина не пропустит ни одного значения. Такая логика работает и для сумм: можно задать шаг 1000 для суммы заказа в PRO-версии.

Минимальная сумма заказа

Минимальная сумма заказа — отдельный сценарий. Она защищает от невыгодных мелких заказов и повышает средний чек интернет-магазина. В Min Max Quantities эта возможность доступна только в PRO-версии. Если не готовы платить, используйте отдельный бесплатный плагин Order Minimum/Maximum Amount for WooCommerce.

Через плагин

Установите Order Minimum/Maximum Amount for WooCommerce. В его настройках задайте минимальную сумму заказа, например 3000 рублей, и текст сообщения об ошибке. Покупатель увидит предупреждение на странице корзины и в checkout, пока сумма не достигнет порога.

Без плагина: код в functions.php

Если не хотите ставить лишние расширения, добавьте в functions.php дочерней темы такой фрагмент. Он проверяет сумму корзины перед оформлением заказа и не даёт завершить покупку.

add_action('woocommerce_checkout_process', 'site_min_order_amount');
function site_min_order_amount() {
    $minimum = 3000;
    $subtotal = WC()->cart->subtotal;
    if ($subtotal < $minimum) {
        wc_add_notice(sprintf('Минимальная сумма заказа: %s ₽. Сейчас в корзине %s ₽.', $minimum, $subtotal), 'error');
    }
}

Функция сработает только на checkout. Если хотите блокировать и корзину, повесьте аналогичный обработчик на хук woocommerce_before_cart.

Разные минимумы для оптовых и розничных клиентов

B2B-магазины часто дают оптовикам один порог, а рознице — другой. В Min Max Quantities PRO это делается через правила по ролям пользователей. Создайте роль «wholesale» и задайте для неё минимальное количество и минимальную сумму заказа отдельно.

Без плагина можно расширить проверку суммы по ролям своим кодом. Добавьте в functions.php:

add_action('woocommerce_checkout_process', 'site_role_min_order');
function site_role_min_order() {
    if (!is_user_logged_in()) return;
    $user = wp_get_current_user();
    $role = $user->roles[0];
    $min = ($role === 'wholesale') ? 10000 : 2000;
    if (WC()->cart->subtotal < $min) {
        wc_add_notice(sprintf('Минимальная сумма для вашей роли: %s ₽.', $min), 'error');
    }
}

Аналогично можно проверять количество каждого товара в корзине, если не хочется ставить платный плагин.

Проверка правил: страница товара, корзина, checkout

После настройки пройдите весь путь покупателя: страницу товара, добавление в корзину, мини-корзину, страницу корзины и checkout. Минимум нужен на каждом этапе. Откройте магазин в режиме инкогнито — кеш страниц часто отдаёт старые версии, и правило «не работает» на деле просто скрыто кешем.

Если используете кастомную тему, AJAX-корзину или блоковый checkout, дополнительно проверьте совместимость плагина. Min Max Quantities заявляет совместимость с HPOS и темами на блоковом движке, но сторонние решения могут перехватывать добавление в корзину. Валидацию в таком случае стоит продублировать хуком на woocommerce_add_to_cart_validation.

Можно ли обойтись без плагинов?

Можно! Вы можете добавить этот код в functions.php или в плагин Code Snippets. Ниже — 5 независимых вариантов. Используйте только те блоки, которые вам нужны, остальные можно удалить или закомментировать.

<?php
/**
 * =====================================================================
 * WOOCOMMERCE — МИНИМАЛЬНОЕ КОЛИЧЕСТВО ТОВАРА В КОРЗИНЕ
 * =====================================================================
 */


/**
 * ---------------------------------------------------------------------
 * ВАРИАНТ 1. Единое минимальное количество для ВСЕХ товаров магазина
 * ---------------------------------------------------------------------
 * Меняет значение поля "Количество" на странице товара и в корзине
 * так, чтобы нельзя было купить меньше $min_qty штук.
 */
add_filter( 'woocommerce_quantity_input_args', 'wcsnippet_global_min_qty', 10, 2 );
function wcsnippet_global_min_qty( $args, $product ) {

    $min_qty = 3; // <-- задайте нужный минимум здесь

    $args['min_value']     = $min_qty;
    // Если текущее количество меньше минимума — подставляем минимум по умолчанию
    $args['input_value']   = max( $min_qty, $args['input_value'] );

    return $args;
}

// Проверка при добавлении в корзину (на случай, если поле обошли — например, через AJAX/API)
add_filter( 'woocommerce_add_to_cart_validation', 'wcsnippet_global_min_qty_validate', 10, 3 );
function wcsnippet_global_min_qty_validate( $passed, $product_id, $quantity ) {

    $min_qty = 3; // должно совпадать со значением выше

    if ( $quantity < $min_qty ) {
        wc_add_notice(
            sprintf( 'Минимальное количество для заказа — %d шт.', $min_qty ),
            'error'
        );
        $passed = false;
    }

    return $passed;
}


/**
 * ---------------------------------------------------------------------
 * ВАРИАНТ 2. Индивидуальный минимум для КОНКРЕТНОГО товара по ID
 * ---------------------------------------------------------------------
 * Удобно, если минимальное количество нужно только для нескольких SKU
 * (например, товар продаётся только упаковками).
 */
add_filter( 'woocommerce_quantity_input_args', 'wcsnippet_min_qty_by_id', 10, 2 );
function wcsnippet_min_qty_by_id( $args, $product ) {

    // Формат: ID товара => минимальное количество
    $min_quantities = array(
        123 => 5,
        456 => 10,
    );

    $product_id = $product->get_id();

    if ( isset( $min_quantities[ $product_id ] ) ) {
        $min = $min_quantities[ $product_id ];
        $args['min_value']   = $min;
        $args['input_value'] = max( $min, $args['input_value'] );
    }

    return $args;
}

add_filter( 'woocommerce_add_to_cart_validation', 'wcsnippet_min_qty_by_id_validate', 10, 3 );
function wcsnippet_min_qty_by_id_validate( $passed, $product_id, $quantity ) {

    $min_quantities = array(
        123 => 5,
        456 => 10,
    );

    if ( isset( $min_quantities[ $product_id ] ) && $quantity < $min_quantities[ $product_id ] ) {
        wc_add_notice(
            sprintf( 'Для этого товара минимальный заказ — %d шт.', $min_quantities[ $product_id ] ),
            'error'
        );
        $passed = false;
    }

    return $passed;
}


/**
 * ---------------------------------------------------------------------
 * ВАРИАНТ 3. Минимум + ШАГ количества (например: от 6 шт., кратно 6)
 * ---------------------------------------------------------------------
 * Полезно для товаров, которые продаются "упаковками" (ящиками, паками).
 * step определяет, на сколько можно увеличивать/уменьшать количество.
 */
add_filter( 'woocommerce_quantity_input_args', 'wcsnippet_min_qty_with_step', 10, 2 );
function wcsnippet_min_qty_with_step( $args, $product ) {

    $min_qty  = 6;
    $step_qty = 6; // шаг — кратность (например, коробка = 6 штук)

    $args['min_value']   = $min_qty;
    $args['step']        = $step_qty;
    $args['input_value'] = max( $min_qty, $args['input_value'] );

    return $args;
}

add_filter( 'woocommerce_add_to_cart_validation', 'wcsnippet_min_qty_with_step_validate', 10, 3 );
function wcsnippet_min_qty_with_step_validate( $passed, $product_id, $quantity ) {

    $min_qty  = 6;
    $step_qty = 6;

    if ( $quantity < $min_qty ) {
        wc_add_notice( sprintf( 'Минимальный заказ — %d шт.', $min_qty ), 'error' );
        $passed = false;
    } elseif ( $quantity % $step_qty !== 0 ) {
        wc_add_notice(
            sprintf( 'Количество должно быть кратно %d (например: %d, %d, %d...).', $step_qty, $step_qty, $step_qty * 2, $step_qty * 3 ),
            'error'
        );
        $passed = false;
    }

    return $passed;
}


/**
 * ---------------------------------------------------------------------
 * ВАРИАНТ 4. Минимум по КАТЕГОРИИ товара
 * ---------------------------------------------------------------------
 * Все товары в указанной категории получают одинаковый минимум.
 */
add_filter( 'woocommerce_quantity_input_args', 'wcsnippet_min_qty_by_category', 10, 2 );
function wcsnippet_min_qty_by_category( $args, $product ) {

    $category_slug = 'optom'; // slug категории (например, "Оптовые товары")
    $min_qty       = 20;

    if ( has_term( $category_slug, 'product_cat', $product->get_id() ) ) {
        $args['min_value']   = $min_qty;
        $args['input_value'] = max( $min_qty, $args['input_value'] );
    }

    return $args;
}

add_filter( 'woocommerce_add_to_cart_validation', 'wcsnippet_min_qty_by_category_validate', 10, 3 );
function wcsnippet_min_qty_by_category_validate( $passed, $product_id, $quantity ) {

    $category_slug = 'optom';
    $min_qty       = 20;

    if ( has_term( $category_slug, 'product_cat', $product_id ) && $quantity < $min_qty ) {
        wc_add_notice(
            sprintf( 'Товары этой категории продаются от %d шт.', $min_qty ),
            'error'
        );
        $passed = false;
    }

    return $passed;
}


/**
 * ---------------------------------------------------------------------
 * ВАРИАНТ 5. Индивидуальный минимум ЧЕРЕЗ ПОЛЕ В АДМИНКЕ (гибкий способ)
 * ---------------------------------------------------------------------
 * Добавляет поле "Мин. количество" на вкладку "Инвентарь" в редакторе
 * товара. Менеджер магазина сможет сам задавать минимум для каждого
 * товара без изменения кода.
 */

// 5.1 — добавляем поле в админку товара
add_action( 'woocommerce_product_options_inventory_product_data', 'wcsnippet_add_min_qty_field' );
function wcsnippet_add_min_qty_field() {
    woocommerce_wp_text_input( array(
        'id'                => '_wcsnippet_min_qty',
        'label'             => 'Мин. количество для заказа',
        'placeholder'       => '1',
        'desc_tip'          => true,
        'description'       => 'Оставьте пустым, если минимальное количество не требуется.',
        'type'              => 'number',
        'custom_attributes' => array(
            'min'  => '1',
            'step' => '1',
        ),
    ) );
}

// 5.2 — сохраняем значение поля
add_action( 'woocommerce_process_product_meta', 'wcsnippet_save_min_qty_field' );
function wcsnippet_save_min_qty_field( $post_id ) {
    $min_qty = isset( $_POST['_wcsnippet_min_qty'] ) ? absint( $_POST['_wcsnippet_min_qty'] ) : '';
    update_post_meta( $post_id, '_wcsnippet_min_qty', $min_qty );
}

// 5.3 — применяем минимум на фронтенде (страница товара / корзина)
add_filter( 'woocommerce_quantity_input_args', 'wcsnippet_apply_min_qty_field', 10, 2 );
function wcsnippet_apply_min_qty_field( $args, $product ) {

    $min_qty = get_post_meta( $product->get_id(), '_wcsnippet_min_qty', true );

    if ( $min_qty && $min_qty > 1 ) {
        $args['min_value']   = (int) $min_qty;
        $args['input_value'] = max( (int) $min_qty, $args['input_value'] );
    }

    return $args;
}

// 5.4 — проверяем минимум при добавлении в корзину
add_filter( 'woocommerce_add_to_cart_validation', 'wcsnippet_validate_min_qty_field', 10, 3 );
function wcsnippet_validate_min_qty_field( $passed, $product_id, $quantity ) {

    $min_qty = get_post_meta( $product_id, '_wcsnippet_min_qty', true );

    if ( $min_qty && $min_qty > 1 && $quantity < $min_qty ) {
        $product = wc_get_product( $product_id );
        wc_add_notice(
            sprintf(
                'Минимальное количество для товара "%s" — %d шт.',
                $product->get_name(),
                (int) $min_qty
            ),
            'error'
        );
        $passed = false;
    }

    return $passed;
}

/**
 * =====================================================================
 * ВАЖНЫЕ ЗАМЕЧАНИЯ
 * =====================================================================
 * 1. woocommerce_quantity_input_args меняет только интерфейс (поле
 *    "Количество"), но НЕ защищает от прямого запроса. Поэтому валидация
 *    через woocommerce_add_to_cart_validation обязательна — иначе
 *    ограничение можно обойти через API, AJAX или изменённый HTML.
 *
 * 2. Если используете несколько вариантов одновременно (например,
 *    Вариант 4 "по категории" и Вариант 5 "по полю в админке"),
 *    убедитесь, что фильтры не перезаписывают друг друга — используйте
 *    max() между значениями или логику приоритета.
 *
 * 3. Для страницы корзины (изменение количества в самой корзине)
 *    те же хуки woocommerce_quantity_input_args работают автоматически,
 *    т.к. WooCommerce использует их и на странице /cart/.
 *
 * 4. Готовые плагины-альтернативы (если не хочется работать с кодом):
 *    "Min/Max Quantities" (от WooCommerce) или "YITH WooCommerce
 *    Minimum/Maximum Quantity". Они дают похожий функционал через UI.
 * =====================================================================
 */

Частые ошибки и как их избежать

Правило минимального количества не срабатывает на странице товара — проверьте поля в самой вариации. Значение 0 в настройках min-max не работает как правило: если минимум нулевой, он игнорируется. Задавайте 0 только когда хотите отключить ограничение.

Шаг количества конфликтует с минимумом, если минимум не кратен шагу. Перед сохранением пересчитайте значения. А если кеш страниц отдаёт старый вариант без новых полей, просто очистите кеш и проверьте инкогнито-режимом.

Мини-корзина и AJAX-кнопки «В корзину» могут игнорировать правила, если они не отправляют стандартные запросы WooCommerce. В таких случаях добавьте проверку через JavaScript или используйте дополнительную валидацию на сервере.

Вопросы про минимум в WooCommerce

Только через functions.php с хуком woocommerce_add_to_cart_validation. Для простого ограничения напишите функцию, которая проверяет количество каждого товара и не даёт добавить меньше минимума. Но плагин min max quantities делает то же самое без программирования, поэтому для продуктового магазина быстрее использовать его.

Проверьте кеш, AJAX-корзину и кастомную тему. Откройте магазин в инкогнито, отключите кеш страниц и убедитесь, что плагин совместим с вашим checkout. Также посмотрите, не перекрывает ли другое расширение стандартный обработчик добавления в корзину.

Задайте шаг количества: в Min Max Quantities это поле Group of, в других плагинах — Quantity Step. Например, Group of = 6 позволяет добавить 6, 12, 18, но не 7. Следите, чтобы минимальное количество было кратно шагу.

Было полезно?

Пожалуйста, расскажите об этом друзьям!

VK
Pinterest
OK
Telegram
Linkedin
WhatsApp
Viber
Reddit

* Meta / Facebook — сервисы, предоставляемые организацией, признанной экстремистской

Готовы получать больше клиентов?

Ваш сайт может быть не просто визиткой, а полноценным инструментом продаж — работать 24/7, привлекать заявки и усиливать доверие к вашему бизнесу. Оставьте заявку — и мы подскажем, какое решение подойдёт именно вам.

Вам может быть интересно

Telegram Почта info@pureseo.ru Телефон +7 (903) 757-15-01