在WooCommerce中修复最高优惠券折扣购物百分比

时间:2017-05-10 08:50:18

标签: php woocommerce cart coupon discount

我在woocommerce中有优惠券代码(XYZ25),其中包括25%折扣,最高折扣为250卢比。

如果他们以25%的折扣优惠券代码XYZ25,我如何限制用户获得超过250卢比的折扣。

2 个答案:

答案 0 :(得分:3)

  

自Woocommerce 3.2或3.3以来,此代码不再起作用

  1. 您可以根据** FIX250 固定购物车折扣设置额外优惠券RS.250代码(没有税)并且 Minimun花费(4 x 250) = RS.1000

  2. 然后在下面的脚本的帮助下,如果客户应用您的 XYZ25 优惠券代码,如果购物车总额达到1000卢比,它将取代 XYZ25 优惠券 FIX250 同时显示明确的通知......

  3. 以下是代码:

    add_action( 'woocommerce_calculate_totals', 'coupon_discount_max_switch', 10, 1);
    function coupon_discount_max_switch( $cart_obj ) {
    
        if ( is_admin() && ! defined( 'DOING_AJAX' ) )
            return;
    
        // Set HERE your 2 coupons slugs  <===  <===  <===  <===  <===  <===  <===  <===  <===
        $coupon_25_percent = 'xyz25';
        $coupon_25_fixed = 'fix250';
    
        // Set HERE the limit amount  <===  <===  <===  <===  <===  <===  <===  <===  <===  <===
        $limit = 250; // Without VAT
    
        $total_discount = $cart_obj->get_cart_discount_total(); // Total cart discount
    
        // When 'xyz25' is set and the total discount is reached
        if( $cart_obj->has_discount( $coupon_25_percent ) && $limit_icl_vat <= $total_discount ){
            // Remove the 'xyz25' coupon
            $cart_obj->remove_coupon( $coupon_25_percent );
            // Checking that the fixed dicount is not already set.
            if( ! $cart_obj->has_discount( $coupon_25_fixed ) ){
                // Add the 'fix250' coupon
                $cart_obj->add_discount( $coupon_25_fixed );
    
                // Displaying a custom message
                $message = __( "The cart discount limit of Rs.$limit is reached", "woocommerce" );
                wc_add_notice( $message, 'notice' );
            }
        } 
    }
    

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

    此工作代码在WooCommerce版本2.6.x和3.0 +上进行了测试。

答案 1 :(得分:2)

@LoicTheAztec指出。这是固定折扣或百分比折扣。

以下是代码:

android:theme="@android:style/Theme.Translucent.NoTitleBar" 

这样做也是使用“固定购物车折扣”逻辑计算折扣;并使用add_filter( 'woocommerce_coupon_get_discount_amount', 'woocommerce_coupon_get_discount_amount', 20, 5 ); function woocommerce_coupon_get_discount_amount( $discount, $discounting_amount, $cart_item, $single, $coupon ) { $max_discount = 250; // coupon limit $coupon_code = 'XYZ25'; // coupon to check. if ( ( $coupon->get_code() == $coupon_code ) && ! is_null( $cart_item ) && WC()->cart->subtotal_ex_tax ) { $cart_item_qty = is_null( $cart_item ) ? 1 : $cart_item['quantity']; if ( wc_prices_include_tax() ) { $discount_percent = ( wc_get_price_including_tax( $cart_item['data'] ) * $cart_item_qty ) / WC()->cart->subtotal; } else { $discount_percent = ( wc_get_price_excluding_tax( $cart_item['data'] ) * $cart_item_qty ) / WC()->cart->subtotal_ex_tax; } $_discount = ( $max_discount * $discount_percent ) / $cart_item_qty; $discount = min( $_discount, $discount ); } return $discount; } 作为计算的优惠券金额。然后两者中较小的一个用完了。

简单地说,让我们以$max_discount为例。 min( A, B )是最大折扣,A是折扣百分比计算的结果。

min(250,100)= 100
min(250,150)= 150
min(250,250)= 250
min(250,300)= 250
min(250,600)= 250

因此总能获得所需的最大折扣 I have written more code relating to this here.

<强>更新 另一种方式,但同样的结果。

B