Устанавливаем минимальное количество товара для заказа

Этот урок в какой-то степени похож на мой урок про минимальную сумму заказа. Ну в отличие от него, тут мы не только заблокируем возможность оформления заказа в случае, если в корзине есть целевой товар и его количество в ней недостаточно, но мы также при помощи хука установим минимальное значение товара в счётчике количества товара, который у нас присутствует не только в корзине, но и иногда на странице товара.

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

Хотите изучить WooCommerce на значительно более крутом уровне, чем на уровне вставки готовых сниппетов в functions.php? Тогда рекомендую вам мой видеокурс 🚀

1. Счётчики количества товара

Для того, чтобы заформить какое-то определённое минимальное значение для счётчиков товара мы можем использовать фильтр-хук woocommerce_quantity_input_min (ну и логично предположить что woocommerce_quantity_input_max – для максимального значения).

Устанавливаем минимальное количество товара в счётчиках товара
То есть, когда я пытаюсь уменьшить количество товара меньше 2 в этом поле – ничего не происходит.

1.1 По количеству единиц товара

/**
 * Для страницы товара
 */
add_filter( 'woocommerce_quantity_input_min', 'truemisha_min_kolvo', 20, 2 );
 
function truemisha_min_kolvo( $min, $product ){
 
	if ( 500 == $product->get_id() ) { // только для товара с ID 500
		$min = 2; // должно быть хотя бы 2 единицы товара в корзине
	}
	return $min;
}
 
/**
 * Для корзины
 */
add_filter( 'woocommerce_cart_item_quantity', 'truemisha_min_kolvo_cart', 20, 3 );
 
function truemisha_min_kolvo_cart( $product_quantity, $cart_item_key, $cart_item ) {
 
	$product = $cart_item['data'];
	$min = 0;
 
	if ( 500 === $product->get_id() ) { // товар с ID 500
		$min = 2;
	}
 
	return woocommerce_quantity_input(
		array(
			'input_name'   => "cart[{$cart_item_key}][qty]",
			'input_value'  => $cart_item['quantity'],
			'max_value'    => $product->get_max_purchase_quantity(),
			'min_value'    => $min,
			'product_name' => $product->get_name(),
		),
		$product,
		false
	);
 
 
}
  • Благодаря тому, что внутри функции хука мы получаем объект товара $product, то мы можем делать много всего, например проверять, что товар в определённой категории, проверять какие-то мета-поля товара и т.д.
  • Также если сразу после вставки кода, в корзине не заработало, то напоминаю вам про кэш AJAX фрагментов в WooCommerce.

1.2 По сумме

И небольшой бонус для вас – иногда нужно привязаться не к количеству единиц товара, а к сумме, то есть например, если вы добавили 2 единицы товара в корзину, но для того, чтобы по сумме получилось 1000 или больше, нужно добавить 3 единицы. Условие можно законнектить на этом.

Замените соответствующие строчки в коде выше.

if ( 500 == $product->get_id() )
	$min = ceil( 1000 / $product->get_price() ); // минимум на 1000 по сумме
}

и

if ( 500 === $product->get_id() ) {
	$min = ceil( 50 / $product->get_price() );
}

Ого, обе замены кода абсолютно одинаковы, нужно только сделать их на разных строчках! 😁

2. Не даём совершить заказ, если количество определённого товара меньше, чем нужно

Если вы не случайно тут оказались, а читаете мой блог, то вы однозначно уже знакомы с woocommerce_checkout_process, с которым мы поработали в одном из предыдущих уроков.

Даже несмотря на то, что мы уже запретили добавлять в корзину либо изменять количество на меньшее значение, чем допустимое у товара, нам всё равно лучше подстраховаться и добавить ещё одну проверку на шаге оформления заказа.

add_action( 'woocommerce_checkout_process', 'truemisha_min_tovar_qty' );
 
function truemisha_min_tovar_qty(){
 
	$qty = 0; // обязательно сначала ставим 0
 
	foreach ( WC()->cart->get_cart() as $cart_item ) { 
		if( 500 == $cart_item[ 'product_id' ] ){
			$qty = $cart_item[ 'quantity' ];
			break;
		}
	}
 
	if( $qty && $qty < 2 ) {
		wc_add_notice( 'Недостаточно товара для заказа!', 'error' );
	}
 
}

Если же нам нужно проверить именно по цене, то нужно лишь изменить пару строк!

$qty = $cart_item[ 'quantity' ];
$price = $cart_item['data']->get_price();

и

if( $qty && $qty < ceil( 1000 / $price ) ) {

Кстати говоря, условие if( $qty ) позволяет проверить, что товар вообще в корзине.

Сообщение о недостаточном количестве товара для заказа на странице оформления заказа
В итоге при нажатии на кнопку «Оформить заказ», у вас будет появляться такое сообщение, в случае, если целевого товара в корзине меньше чем нужно.

Миша

В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

Оставить комментарий

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, если же код – меньше одной строчки, то можно и в <code></code>.