9

我一直在寻找一段时间,但我找不到如何以编程方式删除 woocommerce 优惠券。

我正在尝试根据购物车总数进行折扣。我需要申请删除优惠券,因为如果您有价值 1000 欧元的产品(应用了 15% 的优惠券)并删除了产品并只留下价值 50 欧元的产品,您仍然可以获得 15% 的折扣,因为我的代码没有删除已经应用的优惠券.

所以这是我现在的代码:

    add_action( 'woocommerce_before_cart', 'apply_matched_coupons' );

function apply_matched_coupons() {
    global $woocommerce;

$coupon_code5 = '5p'; // your coupon code here
$coupon_code10 = '10p'; // your coupon code here
$coupon_code15 = '15p'; // your coupon code here
$coupon_code20 = '20p'; // your coupon code here
$coupon_code25 = '25p'; // your coupon code here

   if ( $woocommerce->cart->has_discount( $coupon_code ) ){ 
return;
}

   if ( $woocommerce->cart->cart_contents_total >= 4000 ) {
        $woocommerce->cart->add_discount( $coupon_code25 );
        $woocommerce->show_messages();
    }
else if ( $woocommerce->cart->cart_contents_total >= 2000 ) {
        $woocommerce->cart->add_discount( $coupon_code20 );
        $woocommerce->show_messages();
    }
else if ( $woocommerce->cart->cart_contents_total >= 1000 ) {
        $woocommerce->cart->add_discount( $coupon_code15 );
        $woocommerce->show_messages();
    }
else if ( $woocommerce->cart->cart_contents_total >= 500 ) {
        $woocommerce->cart->add_discount( $coupon_code10 );
        $woocommerce->show_messages();
    }
else if ( $woocommerce->cart->cart_contents_total >= 200 ) {
        $woocommerce->cart->add_discount( $coupon_code5 );
        $woocommerce->show_messages();
    }
}
4

2 回答 2

10

要使用优惠券代码从购物车中删除单个优惠券,请使用WC_Cart->remove_coupon( $code )

要从购物车中删除您将使用的所有优惠券WC_Cart->remove_coupons( $type )-$type默认null为全部,传入“购物车”以删除税前优惠券,“订购”以删除税后优惠券。

要获取购物车中的所有优惠券,array您可以循环访问并选择删除,请使用WC_Cart->get_coupons().

foreach ( WC()->cart->get_coupons() as $code => $coupon ){
   $valid = ? // decide to remove or not
   if ( ! $valid ){
       WC()->cart->remove_coupon( $code );
   }
}
于 2014-10-26T21:14:16.030 回答
8

购物车方法 remove_coupons() 已经更新,不再需要类型。现在,要删除所有优惠券,这将起到作用:

WC()->cart->remove_coupons();

有关更多信息,请在此处查看WC_Cart 类的文档。

于 2015-03-26T16:24:17.003 回答