Хотите проверить способ оплаты на странице оформления заказа после подтверждения
Я работаю над проектом Woocommerce, и мой клиент спросил меня о двух вещах:
- Не хочет снимать все способы оплаты, доступные на странице оформления заказа.
- Хочет показать всплывающее подтверждение (
<script>confirm("Are you sure?")</script>
) выбрав "cod" в качестве способа оплаты, после нажатия "no" или "отмены" во всплывающем окне подтверждения измените способ оплаты, так как онлайн-платеж или другие принимают "cod".
Пожалуйста, любая помощь приветствуется.
2 ответа
Решение
Мне удалось добиться того, что вам нужно. Я не знаю, правильный ли это путь.
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
тогда соответствующий флажок снят. (Поскольку код был слишком срочным для вас, я не мог сделать остальную часть идеальной)
Приведенный выше код не работал у меня правильно!
В следующем коде, если выбрана кнопка отмены, радиокнопка вернется в предыдущее состояние.
Следующий код был выполнен правильно:
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 )//true:
setTimeout(function(){$('body').trigger('update_checkout'); }, 250 );
else
{
if( 'cod' == $('form.checkout').find('input[name^="payment_method"]').val() )
$(this).prop('checked',false);
else{
$( '#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
}