Скидка в корзине на основе количества товаров в корзине и только для товаров, которые не продаются


В WooCommerce я хотел бы предоставить скидку в размере 10% специально для тех товаров, которые не продаются. Если количество товаров в корзине составляет 5 или более товаров и они не продаются, я предоставляю скидку в размере 10%.

Я использую следующий код, чтобы получить скидку на основе ограничения количества товаров в корзине здесь:

add_action('woocommerce_cart_calculate_fees' , 'add_custom_fees');

/**
* Add custom fee if more than three article
* @param WC_Cart $cart
*/

function add_custom_fees( WC_Cart $cart ){
     if( $cart->cart_contents_count < 5 ){
         return;
     } 
    // Calculate the amount to reduce
    $discount = $cart->subtotal * 0.1;
    $cart->add_fee( '10% discount', -$discount);
} 

Но я не знаю, как применять скидку только для товаров, которые не продаются. Как я могу этого достичь?

Спасибо.

Author: LoicTheAztec, 2017-01-20

1 answers

Вот пользовательская функция подключения, которая будет применяться к корзине скидка , если в корзине 5 или более товаров и нет товаров в продаже:

add_action('woocommerce_cart_calculate_fees' , 'custom_discount', 10, 1);
function custom_discount( $cart ){

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Only when there is 5 or more items in cart
    if( $cart->get_cart_contents_count() >= 5):

        // Initialising variable
        $is_on_sale = false;

        // Iterating through each item in cart
        foreach( $cart->get_cart() as $cart_item ){
            // Getting an instance of the product object
            $product =  $cart_item['data'];

            // If a cart item is on sale, $is_on_sale is true and we stop the loop
            if($product->is_on_sale()){
                $is_on_sale = true;
                break;
            }
        }

        ## Discount calculation ##
        $discount = $cart->subtotal * -0.1;

        ## Applied discount (no products on sale) ##
        if(!$is_on_sale )
            $cart->add_fee( '10% discount', $discount);

    endif;
}

Этот код входит в function.php файл вашей активной дочерней темы (или темы) или также в любом файле плагина.

Этот код протестирован и отлично работает.

 4
Author: LoicTheAztec, 2018-04-10 12:38:21