【发布时间】:2017-06-08 19:22:46
【问题描述】:
我有一个具有 2 种运输方式和 3 个支付网关的 eshop。我设法配置了它们的依赖关系,因此它们的工作方式如下:
- local_pickup 只允许“警察”
- wbs 允许“cod”和“bacs”
- “cod”仅适用于我的国家/地区,因此对于其他国家/地区 wbs 仅允许“bacs”
“cod”有一个固定的附加费用,当我点击“cod”时会正确应用。当我将付款从“cod”切换到“bacs”时,费用会按预期从购物车中删除。当客户选择了“cod”并从 wbs 切换到 local_pickup 或当他在选择“cod”时切换国家时会出现问题。购物车已刷新,但费用仍然存在。我试图为$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');
【问题讨论】:
-
我刚刚回答了我的问题,但我仍然愿意接受另一种解决此行为的方法
标签: php woocommerce hook-woocommerce