Хотите проверить способ оплаты на странице оформления заказа после подтверждения

Я работаю над проектом Woocommerce, и мой клиент спросил меня о двух вещах:

  1. Не хочет снимать все способы оплаты, доступные на странице оформления заказа.
  2. Хочет показать всплывающее подтверждение (<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
}
Другие вопросы по тегам