以编程方式从订阅/订单中删除优惠券

时间:2021-02-03 16:20:00

标签: php woocommerce

如何以编程方式从订阅/订单中删除优惠券?

这是我试过的,但是运行的时候好像没有去掉优惠券,我哪里错了?

    $subscription = new WC_Subscription( $_REQUEST['sub_id'] );
    $coupon_code = $_REQUEST['voucher_code'];
    $coupon = new WC_Coupon( $coupon_code );
    $subscription->remove_coupon( $coupon );

另一方面是添加了一张效果很好的优惠券:

      $subscription->add_coupon( $coupon_code,$coupon_amount,'0' );
      $subscription->set_total( $subscription->get_total() - $coupon_amount );
      $subscription->save();

2 个答案:

答案 0 :(得分:1)

remove_coupon 方法参数是优惠券代码,而不是对象。

试试这个:

$subscription->remove_coupon( 'coupon_code' );

其中 coupon_code 是客户应用于购物车或结帐的优惠券名称。

您可以在此处找到文档:https://woocommerce.github.io/code-reference/files/woocommerce-includes-abstracts-abstract-wc-order.html#source-view.1187

答案 1 :(得分:1)

我找到了解决这个问题的方法,我只需要遍历每张优惠券:

      $coupons = $subscription->get_items( 'coupon' );

      // Remove the coupon line.
      $strcode = strtolower($coupon_code);
        foreach ( $coupons as $coupon ) {
        if($coupon->get_code() == $strcode){
          $subscription->remove_coupon( $coupon->get_code() );
        }
      }