【问题标题】:Add a custom bundle cart discount for non discounted items by a coupon通过优惠券为非打折商品添加自定义捆绑购物车折扣
【发布时间】:2017-09-07 18:59:19
【问题描述】:

我有 Woocommerce 购物车,并且我成功添加了“捆绑”折扣,如果购物车数量为 5 个或更多,购物车中的每件商品可享受 7 美元的折扣。

我还想为某些产品启用优惠券。但我不想将捆绑折扣和优惠券折扣叠加在一起。

这是我目前添加捆绑折扣的方式:

add_action( 'woocommerce_cart_calculate_fees','wc_cart_quantity_discount', 10, 1 );
function wc_cart_quantity_discount( $cart_object ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
    return;

$discount = 0;
$cart_item_count = $cart_object->get_cart_contents_count();

if( $cart_item_count > 4 )
    $percent = 25;


$discount -= $cart_object->get_cart_contents_count() * 7;

if( $percent > 0 )
    $cart_object->add_fee( __( "Bundle discount", "woocommerce" ), $discount, true);
}   

例如:
我的购物车中有 5 件商品,其中 1 件商品已使用优惠券打折,可享受 35% 的折扣。
有没有办法通过应用的优惠券让我的捆绑折扣仅适用于 4 件非打折商品?

我不想叠加 7 美元和 35% 的折扣。我只希望优惠券在应用时具有优先权,而不会失去我其他 4 件商品的折扣。

【问题讨论】:

    标签: php wordpress woocommerce cart discount


    【解决方案1】:

    这里是钩子函数代码,当购物车中至少有 5 件商品时,它将为每个非打折购物车商品添加折扣$7

    add_action( 'woocommerce_cart_calculate_fees','wc_cart_quantity_discount', 10, 1 );
    function wc_cart_quantity_discount( $cart_object ) {
        if ( is_admin() && ! defined( 'DOING_AJAX' ) )
            return;
    
        $cart_total_count = $cart_object->get_cart_contents_count();
        $cart_items_count = 0;
    
        // Counting non discounted cart items (by a coupon discount)
        foreach( $cart_object->get_cart() as $cart_item_key => $cart_item )
            if( $cart_item['line_subtotal'] == $cart_item['line_total'] )
                $cart_items_count += $cart_item['quantity']; 
    
        if( $cart_total_count > 4 ){
            $discount = $cart_items_count * 7;
            $cart_object->add_fee( __( "Bundle discount", "woocommerce" ), -$discount, true);
        }
    }
    

    代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件中。

    此代码已经过测试并且可以工作。

    【讨论】:

    • 伙计,这正是我所需要的。我从没想过比较总计和小计来创建新的数量计数。非常感谢。
    • 这太棒了,但我刚刚意识到一些事情。如果并且当我进行退款时,它会退还产品的全部价格,因为折扣仅适用于购物车,而不适用于单个商品。因此,我需要从每件商品的价格中减去 7 美元,而不是 cart_item_count * 7。这样,当我进行退款时,它将退还正确的金额并正确显示在报告中。
    • @Nick 这越来越复杂了……您也可以正常退还订单行“捆绑折扣”……
    猜你喜欢
    • 2011-06-21
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    相关资源
    最近更新 更多