удалить товары категории из общего кол-ва корзины woocommerce

Я строю свою электронную коммерцию для продажи вина с WordPress 4.2.2 и WooCommerce 2.3.11.
Я создал пользовательскую функцию для завершения заказа только с бутылками, кратными 6.
До этого у меня не было никаких проблем, но у меня есть 2 категории с упаковками по 6 бутылок, поэтому я хочу, чтобы эти 2 категории не учитывались в общем количестве товаров в корзине.
Я не разбираюсь в php, поэтому я пытаюсь создать функцию, которая проверяет, находится ли каждый элемент внутри категории, и если принадлежит одной категории пакета, вычтите один элемент.
Это хорошо работает, только если есть один элемент из этих 2 категорий, но если я добавлю 2 пакета в корзину, будет вычтена только одна.

add_action( 'woocommerce_check_cart_items', 'woocommerce_check_cart_quantities' );
function woocommerce_check_cart_quantities() {
$total_products = WC()->cart->cart_contents_count;
$multiples = 6;
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
$prodotti = $values['data'];
$terms = get_the_terms ($prodotti->id, 'product_cat');
foreach ($terms as $term){
$categoria = $term->term_id;
}

if (($categoria == 169) || ($categoria == 152)) {
$pacchetti = $values ['quantity'];
$totale = ($total_products-$pacchetti);
} else {
$totale = $total_products;
}
}
echo $totale;
if ( ( $totale % $multiples ) > 0 )
wc_add_notice( sprintf( __('You need to buy in quantities of 6 products', 'woocommerce'), $multiples ), 'error' );

}

Желаемый счет:

Экран 1 - Правильный подсчет

Существующий подсчет

Экран 2 - Неправильный подсчет

Я открыт для любого решения, чтобы сделать это работает.

Спасибо большое!

3

Решение

Ваш код выглядит довольно хорошо для меня. Я думаю, что вам не хватает только has_term() функция для более надежного тестирования, какие продукты входят в две ваши специальные категории.

add_action( 'woocommerce_check_cart_items', 'woocommerce_check_cart_quantities' );
function woocommerce_check_cart_quantities() {
$total_products = WC()->cart->cart_contents_count;
$multiples = 6;
$totale = 0;
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
$prodotti = $values['data'];

if( ! has_term( array( 169, 152 ), 'product_cat', $prodotti->id ) ){
$totale += $values['quantity'];
}

}
echo $totale;
if ( ( $totale % $multiples ) > 0 ){
wc_add_notice( sprintf( __('You need to buy in multiples of %d products', 'your-textdomain'), $multiples ), 'error' );
}

}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]