在订单处理之前删除计算费用操作

时间:2017-03-20 18:14:15

标签: woocommerce hook-woocommerce

我有一个自定义功能,用于向Cart Totals添加/删除自定义费用。在购物车阿贾克斯计算期间,该费用正常,但由于某种原因,结账​​后仍然会收取费用。如何在处理订单之前将其删除?以下是我目前要计算的费用:

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' );

问题是,一旦用户退房,即使他们提供增值税号(我的自定义字段),也会始终添加费用。

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

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');

我相信我可能正在使用错误的钩子woocommerce_before_checkout_process,因为它似乎没有被解雇。

任何想法会发生什么?谢谢!

1 个答案:

答案 0 :(得分:0)

我能够通过为$woocommerce->cart->add_fee添加一些控制流来解决这个问题。事实证明,在感谢页面之前再次运行calculate_totals函数

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 );
          }