2017-06-08 7 views
0

私は2つの配送方法と3つの支払いゲートウェイを持つエポックを持っています。私はその依存関係を設定するために管理するので、次のように、彼らは働く:配送方法の変更に関するウーココマスの更新料金

  1. local_pickupは「警官」が可能になりますは「タラ」と「BACS」
  2. 「タラ」することができますのみ
  3. WBSであります唯一の私の国のために利用できる、「BACS」のみ

「代金引換」は、私はC」をクリックしたときに正しく適用される固定追加料金を、持っているためWBSができます他の人のためになりますod "。支払いを「cod」から「bacs」に切り替えると、料金はカートの期待どおりに取り除かれます。この問題は、お客様が「cod」を選択し、wbsからlocal_pickupに切り替えるか、「cod」が選択されている状態でcoutryを切り替えると発生します。カートはリフレッシュされますが、料金はまだあります。私は$woocommerce->session->feesの空の配列を設定しようとしましたが、それは役に立ちません。私はそれが更新されていないセッション値によって引き起こされたと感じています。ブラウザのリフレッシュで料金が消えるからです。ここで

は支払いゲートウェイの条件のため、追加料金のため、両方の私のコードです:だから

function wc_local_available_payment_gateways($gateways) { 
    global $woocommerce; 
    $chosen_shipping_rates = $woocommerce->session->get('chosen_shipping_methods'); 
    $country = $woocommerce->customer->get_country(); 

    if($country == "SK") { 
    $method = (is_array($chosen_shipping_rates)) ? $chosen_shipping_rates : 
    array($chosen_shipping_rates); 
    if (in_array('local_pickup:1', $chosen_shipping_rates)) { 
     unset($gateways['bacs']); 
     unset($gateways['cod']); 
    } 
    } 
    else { 
    unset($gateways['cod']); 
    } 
    return $gateways; 
} 
add_filter('woocommerce_available_payment_gateways', 'wc_local_available_payment_gateways'); 

function add_extra_cart_fee($cart_object) { 
    global $woocommerce; 
    $payment = $woocommerce->session->get('chosen_payment_method'); 
    $spfee = 0.60; 
    if($payment == "cod") $woocommerce->cart->add_fee('Extra fee', $spfee, false); 
} 
add_action('woocommerce_cart_calculate_fees', 'add_extra_cart_fee' ,10,1); 

function print_autoload_js(){ 
    ?><script type="text/javascript"> 
    jQuery(document).ready(function($){ 
     $(document.body).on('change', 'input[name="payment_method"]', function() { 
     $('body').trigger('update_checkout'); 
     $.ajax($fragment_refresh); 
    }); 
    $(document.body).on('change', 'input[name="shipping_method"]', function() { 
     $('body').trigger('update_checkout'); 
     $.ajax($fragment_refresh); 
    }); 
    }); 
    </script><?php 
} 
add_action('woocommerce_review_order_after_submit' , 'print_autoload_js'); 
+0

私はちょうど私の質問に答えましたが、私はまだこの動作を修正する別の方法 – moped

答えて

0

、この問題で苦労した後、私は「汚いハック」のビットである、非常に簡単な解決策に来て、それはここで我々が行くので、動作します..

最初に、jQueryコードは、 "支払いのための支払い"料金に使用されるプラグインから取られました。その後、$.ajaxの部分が必要なくなり、全く機能していないことが分かりました。

第2に、プラグインを削除したときにカートが更新されるように、shipping_method部分が追加されました。 。入力名がshipping_method[0]であることが判明しました(これは、決済ゲートウェイが文字列の場合、配送方法は常に配列になっているためです)

最後に、すべての調査結果を組み合わせた後、 Woocommerceは正しいゲートウェイが選択されていると考えて(実際には現在のビューには存在しませんが)、codゲートウェイの料金を取り除くように、カートを更新する前に支払いゲートウェイを単純に「偽造」します。

$(document.body).on('change', 'input[name="shipping_method[0]"], #shipping_country, #billing_country', function() { 
    if($('#shipping_method_0_local_pickup1').is(':checked')) { 
    $('#payment_method_bacs').val('cp').prop('checked', true); 
    } 
}); 
関連する問題