2017-03-20 8 views
0

私はカート集計にカスタム料金を追加/削除するカスタム機能を持っています。手数料はカート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'); 

問題は、ユーザーがチェックアウトした後、料金は常に彼らはVAT番号(私のカスタムフィールド)を提供しても、追加されていることです。

だから私は、注文が処理されますが、これはどちらか動作するようには思えないの前に完全にアクションを削除するには、このスニペットを追加してみました:

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を使用することができると信じて、それはdoesnのため発砲しているようだ。

何が起こっている可能性がありますか?ありがとう!

答えて

0

私はそれがインクルードページ

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); 
      } 
ありがとう前calculate_totals機能を再度実行していることが判明し $woocommerce->cart->add_feeためのいくつかの制御フローを追加することによってこの問題を解決することができました
関連する問題