Я пытаюсь реализовать специальное правило скидки на корзину. В основном есть WooCommerce и на сайте продаются футболки. В настоящее время действует акция, согласно которой, если вы покупаете 3 футболки, вам нужно заплатить только за 2, а за одну с самой низкой ценой вы получаете бесплатно.
Я создал специальную функцию, используя крючок woocommerce_cart_calculate_fees
и пока он работает.
Вот мой код:
add_action( 'woocommerce_cart_calculate_fees', 'iom_add_custom_discount', 10, 1 );
function iom_add_custom_discount( $wc_cart ){
$discount = 0;
$product_ids = array();
$item_prices = array();
$in_cart = true;
foreach ( $wc_cart->get_cart() as $cart_item_key => $cart_item ) {
$cart_product = $cart_item['data'];
if ( has_term( 'detski-bodita', 'product_cat', $cart_product->get_id() ) ) {
$in_cart = true;
}else {
$product_ids[] = $cart_product->get_id();
$item_prices[$cart_product->get_id()] = $cart_product->get_price();
}
}
if( $in_cart ) {
$count_ids = count($product_ids);
asort( $item_prices ); //Sort the prices from lowest to highest
$count = 0;
if( $count_ids == 3 ) {
foreach( $item_prices as $id => $price ) {
if( $count >= 1 ) {
break;
}
//$product = wc_get_product( $id );
//$price = $product->get_price();
$discount -= ($price * 100) / 100;
$count++;
}
}
}
if( $discount != 0 ){
$wc_cart->add_fee( 'Отстъпка', $discount, true );
# Note: Last argument in add_fee() method is related to applying the tax or not to the discount (true or false)
}
}
Скидка отображается и применяется. Но, похоже, это работает, только если у меня в корзине 3 разных продукта. Если у меня есть 1 продукт с количеством 2 и 1 продукт с количеством 1, он не работает.
Как настроить функцию, чтобы вместо этого она работала для подсчета количества предметов?
Вот скриншот страница корзины:
введите описание изображения здесь
Изменить:
Объяснение категорий товаров в скидке:
Скидка применяется только в том случае, если 3 товара из той же категории находятся в корзине.
Например, по категориям футболки и худи. Если у меня в корзине 3 футболки, должна действовать скидка. Если у меня 2 футболки и 1 капюшон ie, скидка не применяется.