Woocommerce 删除订单处理前的计算费用操作

Woocommerce 删除订单处理前的计算费用操作,woocommerce,hook-woocommerce,Woocommerce,Hook Woocommerce,我有一个自定义功能,用于向购物车总额添加/删除自定义费用。在购物车Ajax计算期间,费用可以正常工作,但由于某些原因,在结帐后,费用仍然会计入订单。如何在处理订单之前删除此项?以下是我目前需要计算的费用: function woo_add_cart_fee() { global $woocommerce; if ( ! $_POST || ( is_admin() && ! is_ajax() ) ) { return; }

我有一个自定义功能,用于向购物车总额添加/删除自定义费用。在购物车Ajax计算期间,费用可以正常工作,但由于某些原因,在结帐后,费用仍然会计入订单。如何在处理订单之前删除此项?以下是我目前需要计算的费用:

function woo_add_cart_fee() {

  global $woocommerce;

        if ( ! $_POST || ( is_admin() && ! is_ajax() ) ) {
        return;
    }

            $checkout = WC()->checkout()->checkout_fields;

            parse_str( $_POST['post_data'], $post_data );

      // Add Fee if no VAT Number is Provided
            if($post_data['vat_number'] == '' OR strlen($post_data['vat_number']) < 1 OR empty($post_data['vat_number'])){

          $vat_total = 25; // $25.00 fee

                $woocommerce->cart->add_fee( __('VAT Fee', 'woocommerce'), $vat_total );

            }

}
add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' );
函数woo\u add\u cart\u fee(){
全球商业;
如果(!$_POST | |(is_admin()&&!is_ajax())){
返回;
}
$checkout=WC()->checkout()->checkout\u字段;
parse_str($_POST['POST_data'],$POST_data);
//如果未提供增值税编号,则增加费用
如果($post_数据['vat_编号]]=''或strlen($post_数据['vat_编号]])小于1或为空($post_数据['vat_编号]])){
$vat_总计=25;//$25.00费用
$woocommerce->cart->add_fee('VAT fee','woocommerce'),$VAT_total);
}
}
添加操作(“woocommerce\u cart\u calculate\u fees”、“woo\u add\u cart\u fee”);
问题是,一旦用户退房,费用总是会增加,即使他们提供了增值税编号(我的自定义字段)

因此,我尝试添加此代码段以在处理订单之前完全删除操作,但这似乎也不起作用:

function action_woocommerce_before_checkout_process( $array ) {

      if($_POST['vat_number'] == '' OR strlen($_POST['vat_number']) < 1 OR empty($_POST['vat_number'])){
        remove_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee', 1 );
      }
}

// add the action
add_action( 'woocommerce_before_checkout_process', 'action_woocommerce_before_checkout_process');
签出过程之前的函数操作($array){
如果($\u POST['vat\u number']=''或strlen($\u POST['vat\u number'])小于1或为空($\u POST['vat\u number'])){
删除操作('woocommerce\u cart\u calculate\u fees'、'woo\u add\u cart\u fee',1);
}
}
//添加操作
添加操作(“签出之前的操作”、“签出之前的操作”);
我相信我可能在结账前使用了错误的钩子,因为它似乎没有启动


知道会发生什么吗?谢谢

我可以通过为
$woocommerce->cart->add_fee
添加一些控制流来解决这个问题。结果是,在“谢谢”页面之前再次运行了“计算总计”功能

if(isset($_POST['vat_number'])){
            if($_POST['vat_number'] == '' OR empty($_POST['vat_number'])){
              $woocommerce->cart->add_fee( __($vat_label, 'woocommerce'), $vat_total );
            }
          } else {
            $woocommerce->cart->add_fee( __($vat_label, 'woocommerce'), $vat_total );
          }