因此,结帐页面有Cash On Delivery&直接银行转账付款方式。在检查COD payment_method
无线电时,目标是不提供运输方法或使免费送货成为唯一可用的方法。为了实现这一目标,我需要取消现有的jne_shipping
送货方式。
我将回调添加到payment_method
无线电更改事件:
$('input[name=payment_method]').change(function() {
// request update_checkout to domain.com/checkout/?wc-ajax=update_order_review
$('body').trigger('update_checkout');
});
和php中的钩子:
add_filter( 'woocommerce_available_shipping_methods', 'freeOnCOD', 10, 1 );
function freeOnCOD($available_methods)
{
if ( isset( $_POST['payment_method'] ) && $_POST['payment_method'] === 'cod' ) {
unset( $available_methods['jne_shipping'] );
}
return $available_methods;
}
但是这个过滤器钩子甚至都没有运行。我也尝试woocommerce_package_rates
但仍无效果。
当然,我还检查了WooCommerce的钩子文档,但无法确定在update_checkout
或update_order_review
上运行的正确钩子
Anyhelp赞赏
答案 0 :(得分:5)
触发的操作是 woocommerce_checkout_update_order_review
您可以像这样运行自定义逻辑:
function name_of_your_function( $posted_data) {
global $woocommerce;
// Parsing posted data on checkout
$post = array();
$vars = explode('&', $posted_data);
foreach ($vars as $k => $value){
$v = explode('=', urldecode($value));
$post[$v[0]] = $v[1];
}
// Here we collect chosen payment method
$payment_method = $post['payment_method'];
// Run custom code for each specific payment option selected
if ($payment_method == "paypal") {
// Your code goes here
}
elseif ($payment_method == "bacs") {
// Your code goes here
}
elseif ($payment_method == "stripe") {
// Your code goes here
}
}
add_action('woocommerce_checkout_update_order_review', 'name_of_your_function');
我希望这有帮助!