确认后想在结帐页面上检查付款方式
want to check payment method on checkout page after a confirmation
我在做一个 Woocommerce 项目,我的客户问了我两件事:
- 不想取消选中结帐页面上所有可用的付款方式。
- 想要在点击 'no' 或 'cancel' 在确认弹窗上更改支付方式为在线支付或其他人接受 'cod'.
如有任何帮助,我们将不胜感激。
我已经设法实现了你所需要的。我不知道这是否是正确的方法。
add_action( 'woocommerce_review_order_before_payment', 'refresh_payment_methods' );
function refresh_payment_methods(){
?>
<script type="text/javascript">
(function($){
$( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function(event) {
var payment_method = $('form.checkout').find('input[name^="payment_method"]:checked').val();
if(payment_method == 'cod'){
var method_select = confirm('Are you sure ?');
if(!method_select){
$('form.checkout').find('input[name^="payment_method"]').each(function(index, el) {
if($(this).val() == 'cod'){
$(this).prop('checked',false);
}else{
$(this).prop('checked',true);
}
});
}else{
$('body').trigger('update_checkout');
}
}else{
$('body').trigger('update_checkout');
}
});
})(jQuery);
</script>
<?php
}
在更改带有名称 payment_method
的表单输入时,将采用选中的值并将其与可用的付款方式进行比较。如果付款方式是 cod
,则相应的复选框未选中。 (由于代码太紧迫,else部分没能完善)
上面的代码对我来说不能正常工作!
在下面的代码中,如果取消按钮被选中,单选按钮将return回到之前的状态。
正确执行了以下代码:
add_action( 'woocommerce_review_order_before_payment', 'refresh_payment_methods' );
function refresh_payment_methods(){
$chosen_payment_method = WC()->session->get('chosen_payment_method');
?>
<script type="text/javascript">
var j_method = <?='"'. $chosen_payment_method .'"'?>;
(function($){
$( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function(event) {
var payment_method = $('form.checkout').find('input[name^="payment_method"]:checked').val();
if(payment_method == 'cod')
{
var method_select = confirm( 'Are you sure ?' );
if( method_select )//OK:
setTimeout(function(){$('body').trigger('update_checkout'); }, 250 );
else//Cancel:
$( '#payment_method_' + j_method ).prop('checked',true);
}else{
setTimeout(function(){$('body').trigger('update_checkout'); }, 250 );
}
//set new value
j_method = $('form.checkout').find('input[name^="payment_method"]:checked').val();
});
})(jQuery);
</script>
<?php
}
我在做一个 Woocommerce 项目,我的客户问了我两件事:
- 不想取消选中结帐页面上所有可用的付款方式。
- 想要在点击 'no' 或 'cancel' 在确认弹窗上更改支付方式为在线支付或其他人接受 'cod'.
如有任何帮助,我们将不胜感激。
我已经设法实现了你所需要的。我不知道这是否是正确的方法。
add_action( 'woocommerce_review_order_before_payment', 'refresh_payment_methods' );
function refresh_payment_methods(){
?>
<script type="text/javascript">
(function($){
$( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function(event) {
var payment_method = $('form.checkout').find('input[name^="payment_method"]:checked').val();
if(payment_method == 'cod'){
var method_select = confirm('Are you sure ?');
if(!method_select){
$('form.checkout').find('input[name^="payment_method"]').each(function(index, el) {
if($(this).val() == 'cod'){
$(this).prop('checked',false);
}else{
$(this).prop('checked',true);
}
});
}else{
$('body').trigger('update_checkout');
}
}else{
$('body').trigger('update_checkout');
}
});
})(jQuery);
</script>
<?php
}
在更改带有名称 payment_method
的表单输入时,将采用选中的值并将其与可用的付款方式进行比较。如果付款方式是 cod
,则相应的复选框未选中。 (由于代码太紧迫,else部分没能完善)
上面的代码对我来说不能正常工作!
在下面的代码中,如果取消按钮被选中,单选按钮将return回到之前的状态。
正确执行了以下代码:
add_action( 'woocommerce_review_order_before_payment', 'refresh_payment_methods' );
function refresh_payment_methods(){
$chosen_payment_method = WC()->session->get('chosen_payment_method');
?>
<script type="text/javascript">
var j_method = <?='"'. $chosen_payment_method .'"'?>;
(function($){
$( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function(event) {
var payment_method = $('form.checkout').find('input[name^="payment_method"]:checked').val();
if(payment_method == 'cod')
{
var method_select = confirm( 'Are you sure ?' );
if( method_select )//OK:
setTimeout(function(){$('body').trigger('update_checkout'); }, 250 );
else//Cancel:
$( '#payment_method_' + j_method ).prop('checked',true);
}else{
setTimeout(function(){$('body').trigger('update_checkout'); }, 250 );
}
//set new value
j_method = $('form.checkout').find('input[name^="payment_method"]:checked').val();
});
})(jQuery);
</script>
<?php
}