Javascript WooCommerce-取消选择默认付款方式

Javascript WooCommerce-取消选择默认付款方式,javascript,php,ajax,wordpress,woocommerce,Javascript,Php,Ajax,Wordpress,Woocommerce,我试图让WooCommerce在结帐页面上不自动选择第一种付款方式 这将迫使客户自行选择付款方式,并整理结帐页面。目前,随着第一种付款方式的自动选择,与该方式相关的大量付款信息将显示给客户,并将其他付款方式推到页面下方。在手机上,这是一个问题,因为一些人认为这是由于堆叠而导致的唯一付款方式 下面的JS用于删除所选的默认付款方式 但是,当我尝试选择一种支付方式时,它最初会加载网关信息,但随后会消失并删除选择。我怀疑AJAX在这里引起了一个问题,这是因为本节是如何重新加载的。这使得无法选择付款方式

我试图让WooCommerce在结帐页面上不自动选择第一种付款方式

这将迫使客户自行选择付款方式,并整理结帐页面。目前,随着第一种付款方式的自动选择,与该方式相关的大量付款信息将显示给客户,并将其他付款方式推到页面下方。在手机上,这是一个问题,因为一些人认为这是由于堆叠而导致的唯一付款方式

下面的JS用于删除所选的默认付款方式

但是,当我尝试选择一种支付方式时,它最初会加载网关信息,但随后会消失并删除选择。我怀疑AJAX在这里引起了一个问题,这是因为本节是如何重新加载的。这使得无法选择付款方式

是否有人可以帮助扩展此代码以允许网关选择?非常感谢

jQuery(document).ready(function( $ ){
    $( document ).on( 'updated_checkout', function() {
        var $paymentCheckboxes = $( ".woocommerce-checkout-payment" ).find( '[name="payment_method"]');
        $paymentCheckboxes.attr('checked', false);
        $('.payment_box').hide();
    });
});

请使用以下代码进行测试。在“?wc ajax=update\u order\u review”ajax调用之后,您需要使用“updated\u checkout”事件重置支付网关表单

jQuery(document).ready(function ($) {
    function deselectDefaultGateway() {
        $('input[name="payment_method"]').each(function (index, item) {
            $(item).attr('checked', false);
        })
        $('.payment_box').hide();
    }

    $(document.body).on('updated_checkout', deselectDefaultGateway);

    $(document).on('click', '.wc_payment_method', function(e){
        if (e.originalEvent !== undefined) {
            $(document.body).off('updated_checkout', deselectDefaultGateway);
        }
    });
});
并且,为了供您参考,为了防止加载时进行默认选择,您可以使用如下代码

add_action( 'woocommerce_before_template_part', 'custom_before_template_part', 10, 4 );
function custom_before_template_part($template_name, $template_path, $located, $args) {
    if ( 'checkout/payment-method.php' == $template_name ) {
        $gateway = $args['gateway'];
        $gateway->chosen = false;
    }
}

Woocommerce选择第一个支付网关作为默认网关,但使用上述两个代码块,您可以完全更改行为。希望这能对您有所帮助。

您好!谢谢你的回复。我刚刚测试了这两个代码段。我可以确认没有选择任何付款方式,但是,当我选择一种方式时,它看起来是“加载”的,但实际上并没有选择该方式。我在发布答案之前已经测试了代码,它运行良好。我刚刚重新测试并确认代码在我这边正常工作。请检查您的其他代码,如果问题仍然存在,请直接与我联系,以便我可以帮助您解决问题。谢谢,我刚刚提供了一个链接,如果它有助于调试。我已经把你的两个片段都运行了。嗨,Alex,这似乎与自定义代码和woocommerce js代码之间的脚本运行顺序有关。请在skype上添加我rsm0128@hotmail.com,这样我就可以和你一起调试这个问题了。嘿@Alex:你有URL要看吗?很多时候,所有正在运行的脚本的全貌都会非常有用。@ChrisHeney:)您好,对不起,请完整阅读问题。WooCommerce已经默认选择了一个网关,其想法是删除该网关,以便客户必须自己选择一个网关,而不会自动选择第一个网关。
Try this code to select default method.
   
 add_action( 'template_redirect', 'define_default_payment_gateway' );
        function define_default_payment_gateway(){
            if( is_checkout() && ! is_wc_endpoint_url() ) {
                // HERE define the default payment gateway ID
                $default_payment_id = 'stripe';
        
                WC()->session->set( 'chosen_payment_method', $default_payment_id );
            }
        }