WooCommerce: установка минимальной суммы заказа для отдельных товаров с проверкой

Проблема: как задать минимальную сумму заказа для отдельных товаров в WooCommerce

В стандартном WooCommerce есть настройка минимальной суммы заказа, но она действует на весь заказ целиком. Часто требуется ограничить минимальную сумму заказа не для всего корзины, а для отдельных товаров или категорий товаров. Например, чтобы клиент не мог купить дешевый товар поштучно, а только от определенной суммы. В этой статье разберем, как реализовать такое требование программно с проверкой и сообщением об ошибке.

Диагностика задачи

Стандартные опции WooCommerce не позволяют задать минимальную сумму заказа по отдельным товарам. Плагины с похожим функционалом часто слишком громоздкие или не удовлетворяют требованиям точечной настройки. Поэтому необходимо добавить кастомный PHP-код в файл темы functions.php или в плагин для сайта.

Главные вопросы, на которые нужно ответить:

  • Как определить сумму корзины с учетом только выбранных товаров?
  • Как вывести понятное сообщение пользователю при несоответствии?
  • Как проверить, что ограничение не мешает заказу, если товаров с ограничением нет?

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

Реализуем проверку на этапе оформления заказа с помощью хука woocommerce_checkout_process. Для примера ограничим минимальную сумму заказа для товаров категории с ярлыком min-order в размере 3000 рублей.

add_action('woocommerce_checkout_process', 'check_min_order_sum_for_category');
function check_min_order_sum_for_category() {
    $min_sum = 3000; // минимальная сумма для категории
    $category_slug = 'min-order';

    $cart = WC()->cart->get_cart();
    $category_sum = 0;

    foreach ( $cart as $cart_item ) {
        $product = $cart_item['data'];
        if ( has_term( $category_slug, 'product_cat', $product->get_id() ) ) {
            $category_sum += $cart_item['line_total'];
        }
    }

    if ( $category_sum > 0 && $category_sum < $min_sum ) {
        wc_add_notice( sprintf('Минимальная сумма заказа для товаров категории "%s" должна быть не менее %d рублей. Текущая сумма: %d рублей.', $category_slug, $min_sum, $category_sum), 'error' );
    }
}

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

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

Для нескольких категорий используйте массив:

    $categories = ['min-order', 'premium'];
    foreach ( $cart as $cart_item ) {
        $product = $cart_item['data'];
        foreach ($categories as $category_slug) {
            if ( has_term( $category_slug, 'product_cat', $product->get_id() ) ) {
                $category_sum[$category_slug] = ($category_sum[$category_slug] ?? 0) + $cart_item['line_total'];
            }
        }
    }

    foreach ($categories as $category_slug) {
        if (isset($category_sum[$category_slug]) && $category_sum[$category_slug] < $min_sum) {
            wc_add_notice(sprintf('Минимальная сумма заказа для товаров категории "%s" должна быть не менее %d рублей.', $category_slug, $min_sum), 'error');
        }
    }

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

1. Добавьте в корзину товары из категории min-order на сумму меньше 3000 рублей — при попытке оформить заказ должна появиться ошибка и блокировка.

2. Попробуйте добавить товаров на сумму от 3000 рублей — оформление должно пройти без ошибок.

3. Добавьте товары из других категорий — ошибки не должно быть.

4. Очистите корзину, убедитесь, что ошибки нет.

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

  • Ошибка: сообщение не выводится, оформление заказа проходит даже если сумма меньше. Проверьте, что код добавлен в functions.php активной темы или в подключенный плагин. Хук woocommerce_checkout_process должен срабатывать.
  • Проверка не срабатывает для вариаций товаров. Для вариаций используйте $product->get_parent_id() в has_term для проверки категории родителя.
  • Минимальная сумма не учитывает скидки. В коде используется line_total — это цена после скидки, что обычно правильно. Если хотите цену до скидок, используйте line_subtotal.
  • Пользователь не понимает ошибку. Обеспечьте понятный текст и, если нужно, добавьте ссылку на каталог товаров категории.

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

  • Код выполняется только на этапе оформления заказа, не влияет на загрузку страниц.
  • Не используйте дорогие запросы к базе — все данные берутся из объекта корзины.
  • Выводите ошибки через wc_add_notice — это стандартный способ WooCommerce.
  • Если много категорий, кешируйте результаты проверки.

Сравнение вариантов реализации

ВариантПлюсыМинусы
Код в functions.phpГибкость, контроль, нет лишних плагиновТребуется навыки программирования
Плагин с ограничениямиПростота настройки, готовые функцииИзбыточность, нагрузка, затраты на лицензии
Компромисс: кастомный плагинЛегче переносить, можно делиться с командойНужно поддерживать и обновлять
Как удалить автоматическое перенаправление в WordPress
26.01.2026
Как автоматизировать удаление спам-комментариев в WordPress
22.02.2026
WooCommerce: установка минимальной суммы заказа по регионам с проверкой
17.04.2026
Как использовать хуки для оптимизации WordPress
09.12.2025
WooCommerce: как автоматически отключать товары после распродажи
23.06.2026