创建订单时触发功能以从父订阅中删除优惠券

Fire function on order creation to remove coupons from parent subscription

我有以下功能,我希望它在每次创建订阅订单时触发。

然后我希望它从父订阅中删除商店信用优惠券(因为续订订单将包含优惠券)。

我遇到错误:

"PHP message: PHP Fatal error: Uncaught Error: Call to undefined method WC_Order_Item_Coupon::get_discount_type()".

我哪里错了?

是否以正确的方式传递父订阅项?

   function remove_store_credit($subscription) {
    
      $coupons = $subscription->get_items( 'coupon' );
      foreach ( $coupons as $coupon ) {
        if($coupon->get_discount_type() == "smart_coupon"){
          $subscription->remove_coupon( $coupon->get_code() );
        }
      }
    
    }
    add_action('woocommerce_subscription_payment_complete','remove_store_credit',10,1);

方法 get_discount_type() 属于 WC_Coupon Class 但不属于 WC_Order_Item_Coupon Class.

所以尝试在foreach循环的优惠券项目中获取WC_Coupon的实例对象。

function remove_store_credit( $subscription ) {
    // Loop through order coupon items
    foreach ( $subscription->get_items( 'coupon' ) as $item ) {
        $coupon = new WC_Coupon( $item->get_code() ); // get an instance of the WC_Coupon Object 

        if( $coupon->get_discount_type() == "smart_coupon" ){
            $subscription->remove_coupon( $item->get_code() );
        }
    }
}
add_action('woocommerce_subscription_payment_complete', 'remove_store_credit', 10, 1);

应该可以解决这个错误。