我正在使用Jeroen Sormani的https://gist.github.com/ishahak/d76d46ce1423f86982366ac325f5b59d作为运输方式,而KarolínaVyskočilová的Woocommerce Advanced Shipping plugin使用的是€5固定费用,用于“货到付款”付款方式。
使用高级运输插件,我还创建了一个称为“本地取货”的通用规则,以使客户始终可以看到它们。然后,当选择“本地取件”运输选项时,我需要隐藏“货到付款”付款方式。为此,我必须在我的functions.php文件中添加一些代码,以便在高级运输规则中标识特定的本地取货规则:
function my_custom_available_payment_gateways( $gateways ) {
$chosen_shipping_rates = WC()->session->get( 'chosen_shipping_methods' );
// When 'local pickup' (rule id 21828) has been chosen as shipping rate
if ( in_array( '21828', $chosen_shipping_rates ) ) :
// Unset 'cash on delivery'
unset( $gateways['cod'] );
endif;
return $gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'my_custom_available_payment_gateways' );
这是我的问题:在结帐页面上,当我切换到“本地取货”时,“货到付款”选项如前所述消失了,但是订单审核表中的€5费用仍停留在此。我必须再次手动更改付款方式(即从银行转帐到信用卡),以使费用消失。
我需要找到一些解决方案,以在选择本地取件时触发订单检查更新/刷新。
我尝试在结帐页面中插入以下脚本,但未成功
function woocommerce_add_update_cart() {
// Only on checkout page
if( ! is_checkout() ) return;
?>
<script type="text/javascript">
jQuery(document.body).trigger("update_checkout");
</script>
<?php
}
add_action( 'wp_footer', 'woocommerce_add_update_cart' );
答案 0 :(得分:2)
您可以添加以下代码段-
function refresh_checkout_on_payment_methods_change(){
?>
<script type="text/javascript">
(function($){
$( 'form.checkout' ).on( 'change', 'input[name^="shipping_method"]', function() {
$('body').trigger('update_checkout');
});
})(jQuery);
</script>
<?php
}
add_action( 'woocommerce_review_order_before_payment', 'refresh_checkout_on_payment_methods_change' );
答案 1 :(得分:0)
我设法解决了我的问题。 itzmekhokan建议的$('body').trigger('update_checkout');
功能无法正常运行,以便从更新的订单审核中删除额外费用。我必须模拟点击其中一种付款方式单选按钮以触发结帐更新。
对于结帐页面:
function woocommerce_add_update_checkout() {
// Only on checkout page
if( ! is_checkout() ) return;
?>
<script type="text/javascript">
(function($){
$('form.checkout').on( 'change', 'input[name^="shipping_method"]', function() {
document.getElementById("payment_method_bacs").checked = true;
});
})(jQuery);
</script>
<?php
}
add_action( 'wp_footer', 'woocommerce_add_update_checkout' );
关于购物车页面摘要:
function reset_payment_method() {
// Only on cart page
if( ! is_cart() ) return;
$payment_method = WC()->session->get( 'chosen_payment_method' );
if ( $payment_method = 'cod' ) :
WC()->session->set( 'chosen_payment_method', 'bacs' );
endif;
}
add_filter( 'woocommerce_before_shipping_calculator', 'reset_payment_method' );