Разрешаем покупку только упаковками в WooCommerce

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

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

С помощью кода ниже вы можете указать для ваших товаров что каждый товар является одной бутылкой вина, а затем заставить покупателя добавить различные 6 товаров в корзину прежде чем ему станет доступна оплата. Если же покупатель, к примеру, добавит только 5 бутылок в корзину и затем попытается оплатить, ему отобразится уведомление о том, что необходимо купить 6 бутылок.

woocommerce_multiple_quantities_checkout[2]

Можно даже реализовать это правило для товаров с определенным классом доставки, что позволит вам продавать бутылки поштучно, и в то же время по 6шт, главное грамотно всё разграничить.

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

<?php
// проверяем корзину на наличие в ней 6 товаров
add_action( 'woocommerce_check_cart_items', 'woocommerce_check_cart_quantities' );
function woocommerce_check_cart_quantities() {
global $woocommerce;
$multiples = 6;
$total_products = 0;
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$total_products += $values['quantity'];
}
if ( ( $total_products % $multiples ) > 0 )
$woocommerce->add_error( sprintf( __('Вам необходимо купить %s единиц товара', 'woocommerce'), $multiples ) );
}
 
// Ограничиваем товары в корзине определенным классом доставки для покупки "целым ящиком"
add_action( 'woocommerce_check_cart_items', 'woocommerce_check_cart_quantities_for_class' );
function woocommerce_check_cart_quantities_for_class() {
global $woocommerce;
$multiples = 6;
$class = 'bottle';
$total_products = 0;
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$product = get_product( $values['product_id'] );
if ( $product->get_shipping_class() == $class ) {
$total_products += $values['quantity'];
}
}
if ( ( $total_products % $multiples ) > 0 )
$woocommerce->add_error( sprintf( __('Вам необходимо купить бутылок в количестве %s', 'woocommerce'), $multiples ) );
}
?>

По всем вопросам и отзывам просьба писать в комментарии ниже.

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

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
  • Александра

    Здравствуйте! Спасибо за статью, нашла только у Вас что-то подобное.
    Подскажите пожалуйста, к каким полям я должна обращаться, чтобы запретить оформление заказа при сумме ниже 1000 рублей? Или где об этом можно почитать)
    Я имею в виду в строке:
    foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values )

    • Александра

      И ещё в догонку) Никак не могу понять, где должна быть эта функция, пробовала уже и в тему, и в отдельный плагин, никакой реакции((

      • http://web-devise.com/ ADv

        Вставлять ПОСЛЕ закрывающего тега PHP в файл functions.php, а можно вытереть в коде открывающий и закрывающий тег, и вставить после любой функции в тот же файл.

        • Александра

          А вы не могли бы написать мне путь до этого фала, прошу простить меня за мою тормознутость)

          • http://web-devise.com/ ADv

            wp-content/themes/НАЗВАНИЕ_ВАШЕЙ_ТЕМЫ/functions.php

          • Александра

            Большое спасибо, там и делаю, значит не ошиблась) Но почему-то всё равно не работает, даже просто ваш код) Никакой реакции, что есть, что нет.

          • http://web-devise.com/ ADv

            Какую версию WooCommerce используете?

          • Александра

            2.2.6

            Подозреваю, что я меняю всё-таки не там. Тут какая-то сложная заковыристая тема, в которой я нашла уже 2 файла functions.php. Всё дело в том, что писала сам сайт не я, я только дорабатываю, а с WP вообще первый раз контактирую…

          • Александа

            Проблема была в том, что некоторые пункты меню не переадресовались после переноса на другой домен и по сути мои попытки изменить что-то на одном домене, конечно же, никак не отражались на другом)
            Подскажите, пожалуйста, если не затруднит, как можно в корзине отсортировать товары по некоторому кастомному полю, или как хотя бы обратиться к нему?

    • http://web-devise.com/ ADv

      Код ограничивает только количество, но не цену. Сходу как поправить код сказать не смогу…

  • Дмитрий

    Woocommerce версия 2.3.9

    не работает, при добавлении товара в корзину Fatal error:

Scroll To Top