исключить категорию из скидки woocommerce

Следующий рабочий код - это скидка для корзины с минимум 3 товарами, не включая товары со скидкой. Теперь мне нужно игнорировать категорию «подарок» (если она есть в корзине) из этой скидки:

//10% discount at minimum 3 items in cart not for sale items
add_action('woocommerce_cart_calculate_fees' , 'custom_cart_discount', 20, 1);
function custom_cart_discount( $cart ){
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Limitations: Only when there is 5 or more non on sale items in cart
$starting_limit = 3;
// Initialising variables
$not_on_sale_subtotal = $discount = $items_count = 0;
// Iterating through each item in cart
foreach( $cart->get_cart() as $cart_item ){
// For cart items is not on sale
if( ! $cart_item['data']->is_on_sale() ){
    $not_on_sale_subtotal += (float) $cart_item['line_subtotal'];
    $items_count += $cart_item['quantity'];
}
}
// Discount calculation
$discount = $not_on_sale_subtotal * 0.1;
// Applied discount only cart items that are not on sale
if( $discount && $items_count >= $starting_limit )
$cart->add_fee( 'הנחת כמות 10%', -$discount );

person Arie B    schedule 11.12.2019    source источник


Ответы (1)


Я бы порекомендовал работать с другим подходом. Купоны WooCommerce дают вам полный контроль над тем, чего вы хотите достичь.

Сначала создайте купон в админке WC со скидкой 10%. Затем используйте настройки купона, чтобы применить его к корзине или только к определенным товарам / категориям. Вы можете увидеть в ограничениях купона, как именно ограничить скидку определенными категориями (с включением / исключением) или применить скидку только к товарам, которые не продаются, и т. Д.

Наконец, все, что вам нужно сделать, это просто попросить или побудить клиента применить купон или автоматически применить его самостоятельно за кулисами с помощью:

WC()->cart->apply_coupon('YouCouponCodeGoesHere');

בהצלחה!

person Shir Gans    schedule 12.12.2019