购物车add_fee()在结帐页面无效

时间:2017-01-31 19:09:55

标签: php wordpress woocommerce checkout cart

在WooCommerce中,我想在不使用优惠券的情况下进行折扣,折扣计算将基于产品价格,例如"以3的价格购买3个产品。

在我的有效主题的 function.php 中,我正在使用此代码:

function promo () {
    if (is_cart()) {
        $woocommerce->cart->add_fee( __('des', 'woocommerce'), -50.00`enter code here`, true, '');
    }
 }
add_action ('woocommerce_cart_calculate_fees', 'promo');

我的问题:此代码在结帐页面上无效 如果我强制执行审核订单,则会显示折扣,但总价值不会发生变化。我认为它不会节省费用。

如何使其发挥作用(在结帐页面上)?

由于

1 个答案:

答案 0 :(得分:2)

  

这个钩子是为购物车费(或折扣)所以你必须删除 if (is_cart()) { 条件,这就是为什么它不起作用......

这是正确的功能代码,以实现"买2拍3"折扣,将根据订单项数量进行折扣:

add_action('woocommerce_cart_calculate_fees' , 'discount_2_for_3', 10, 1);
function discount_2_for_3( $cart_object ){

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

    // Initialising variable
    $discount = 0;

    // Iterating through cart items
    foreach( $cart_object->get_cart() as $cart_item ){

        // Getting item data from cart object
        $item_id = $cart_item['product_id']; // Item Id or product ID
        $item_qty = $cart_item['quantity']; // Item Quantity
        $product_price = $cart_item['data']->price; // Product price
        $line_total = $cart_item['line_total']; // Price x Quantity total line item

        // THE DISCOUNT CALCULATION
        if($item_qty >= 3){
            // For each item quantity step of 3 we add 1 to $qty_discount
            for($qty_x3 = 3, $qty_discount = 0; $qty_x3 <= $item_qty; $qty_x3 += 3, $qty_discount++);
            $discount -= $qty_discount * $product_price;
        }
    }

    // Applied discount "2 for 3"
    if( $discount != 0 ){
        // Note: Last argument is related to applying the tax (false by default)
        $cart_object->add_fee( __('Des 2 for 3', 'woocommerce'), $discount, false);
    }

}
  

这适用于简单的产品,但不适用于产品变化......

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

代码经过测试并有效。