私は2つの配送方法と3つの支払いゲートウェイを持つエポックを持っています。私はその依存関係を設定するために管理するので、次のように、彼らは働く:配送方法の変更に関するウーココマスの更新料金
- local_pickupは「警官」が可能になりますは「タラ」と「BACS」
- 「タラ」することができますのみ
- 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');
私はちょうど私の質問に答えましたが、私はまだこの動作を修正する別の方法 – moped