WooCommerce购物车仅提供第二个普通项目的折扣

问题描述 投票:1回答:2

我在stackoverflow上发现了这段代码,它满足了我的需要,只不过我在购物车中添加了2种产品后需要为每种产品应用-5€折扣。

示例:

  • 对于购物车中的1产品,用户将获得0€折扣
  • 对于购物车中的2种产品,用户将获得5欧元的折扣
  • 对于购物车中的3产品,用户将获得10€折扣
  • 对于购物车中的4产品,用户将获得15€折扣
  • 对于购物车中的5种产品,用户将获得20欧元的折扣

依此类推...

add_action('woocommerce_cart_calculate_fees' , 'custom_discount', 10, 1);
function custom_discount( $cart ){
    if ( is_admin() && ! defined( 'DOING_AJAX' ) && ! is_user_logged_in() )
    // if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;
    // Only when there is 2 or more items in cart
    if( $cart->get_cart_contents_count() >= 2):

        // 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 ##
        // fixed reduction price
        $reduction = 5;


        ## Applied discount (no products on sale) ##
        if(!$is_on_sale )
            $cart->add_fee( '-5€ à partir du 2ème article commandé', -$reduction);

    endif;
}

感谢您的任何帮助。

php wordpress woocommerce cart discount
2个回答
0
投票

你是如此亲密。您知道购物车$cart->get_cart_contents_count()中的项目数量,并且希望从第一个产品开始就开始折扣。

替换$reduction = 5;

带有此$reduction = 5*($cart->get_cart_contents_count() - 1);

您的完整代码应如下所示:

add_action('woocommerce_cart_calculate_fees' , 'custom_discount', 10, 1);
function custom_discount( $cart ){
    if ( is_admin() && ! defined( 'DOING_AJAX' ) && ! is_user_logged_in() )
    // if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;
    // Only when there is 2 or more items in cart
    if( $cart->get_cart_contents_count() >= 2):

        // 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 ##
        // fixed reduction price
        $reduction = 5*($cart->get_cart_contents_count() - 1);


        ## Applied discount (no products on sale) ##
        if(!$is_on_sale )
            $cart->add_fee( '-5€ à partir du 2ème article commandé', -$reduction);

    endif;
}

0
投票

您最好使用以下内容,该内容将仅计算常规商品(不包括“正在销售”的商品),并将根据从第二项开始的特定数量应用折扣:

add_action('woocommerce_cart_calculate_fees' , 'progressive_fixed_discount', 10, 1);
function progressive_fixed_discount( $cart ){
    if ( is_admin() && ! defined( 'DOING_AJAX' ) && ! is_user_logged_in() )
    // if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Initialising variable
    $regular_items_count = -1;

    // Iterating through each item in cart
    foreach( $cart->get_cart() as $cart_item ){

        // Count only on regular items (not "on sale" items)
        if( ! $cart_item['data']->is_on_sale() ){
            $regular_items_count += $cart_item['quantity'];
        }
    }

    // Only for regular items starting on the 2nd item (not "on sale" items)
    if ( $regular_items_count > 0 ) {

        // Progressive fixed discount calculation on regular items only
        $discount = 5 * $regular_items_count;


        // Apply a discount for "on sale" items only 
        $cart->add_fee( __("-5€ à partir du 2ème article commandé", "woocommerce"), -$discount );
    }
}

代码进入您的活动子主题(或活动主题)的function.php文件。经过测试和工作。


一些相关的similar answers threads

© www.soinside.com 2019 - 2024. All rights reserved.