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

Логический код

У нас есть правило, что каждый заказ должен быть минимум 6 или кратным 6 (например, 6, 12, 18, …).

function digitalnoir_minimum_order_check() {
	$cart_content = WC()->cart->cart_contents;
	$qty = 0;
	if(is_array($cart_content)){
		foreach($cart_content as $product){
			$qty += $product['quantity'];
			
		}
	}
    if (  $qty % 6 != 0 ) {
		return false;
	}
	
	return true;
		
}

Добавить сообщение о количестве по умолчанию

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

add_action( 'woocommerce_before_cart_table' , 'digitalnoir_minimum_order_message' );
function digitalnoir_minimum_order_message(){
	$is_valid = digitalnoir_minimum_order_check();
	if(!$is_valid){
		echo 'The order must be in multiples of 6 bottles
'; } }

Перенаправить, если правило не соблюдается

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

add_action( 'template_redirect' , 'digitalnoir_minimum_order_validation_redirect' );
function digitalnoir_minimum_order_validation_redirect(){
	if(is_checkout()){
		$is_valid = digitalnoir_minimum_order_check();
		if(!$is_valid){
			wp_safe_redirect( get_permalink( get_option('woocommerce_cart_page_id') ) );
			exit;
		}
	}
}

Это базовая пользовательская проверка количества WooCommerce без плагина. Вы можете расширить эту функцию, чтобы она соответствовала вашим правилам проверки количества. В нашем случае у нас есть «смешанный случай», что означает, что каждый 1 продукт считается как 12 бутылок.

Чтобы справиться с этим, мы можем создать собственный тип записи с именем «product_type», затем нам нужно будет отредактировать наш логический код.

function digitalnoir_minimum_order_check() {
	$cart_content = WC()->cart->cart_contents;
	$qty = 0;
	if(is_array($cart_content)){
		foreach($cart_content as $product){
			$product_id = $product['product_id'];
			$is_mixed = get_post_meta($product_id, 'product_type', true);
			if($is_mixed){
				$qty += ( $product['quantity'] * 12);
			}else{
				$qty += $product['quantity'];
			}
			
		}
	}
    if (  $qty % 6 != 0 ) {
		return false;
	}
	
	return true;
		
}

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

Первоначально опубликовано на www.digital-noir.com 31 октября 2019 г.