【问题标题】:WooCommerce - Deselect Default Payment MethodWooCommerce - 取消选择默认付款方式
【发布时间】:2021-01-27 16:54:16
【问题描述】:

我正在尝试让 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();
    });
});

【问题讨论】:

  • 嘿@Alex:你有网址可以看吗?很多时候,所有正在运行的脚本的全貌会很有帮助。
  • @ChrisHeney link :)

标签: javascript php ajax wordpress woocommerce


【解决方案1】:

请使用以下代码进行测试。您需要在“?wc-ajax=update_order_review”ajax 调用后使用“updated_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 选择第一个支付网关作为默认值,但使用上述 2 个代码块,您可以完全改变行为。希望这会对你有所帮助。

【讨论】:

  • 您好!谢谢您的答复。我刚刚添加了两个 sn-ps 对此进行了测试。我可以确认没有选择付款方式,但是,当我随后选择一种方式时,它似乎“加载”但实际上并未选择该方式。
  • 我在发布答案之前已经测试了代码,它运行良好。我刚刚重新测试并确认代码在我这边工作正常。请检查您的其他代码,如果问题仍然存在,请直接联系我,以便我帮助您解决问题。谢谢
  • 我刚刚提供了一个链接,如果它有助于调试。我已经让你的两个 sn-ps 都在运行。 link
  • 嗨,Alex,这似乎与自定义代码和 woocommerce js 代码之间的脚本运行顺序有关。请加我skype rsm0128@hotmail.com,我可以和你一起调试问题。
【解决方案2】:
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 );
            }
        }

【讨论】:

  • 您好,抱歉,请完整阅读问题。默认情况下,WooCommerce 已经选择了一个网关,其想法是删除它,因此客户必须自己选择一个,而不会自动选择第一个。
猜你喜欢
  • 2015-11-05
  • 2019-02-01
  • 2018-12-26
  • 1970-01-01
  • 1970-01-01
  • 2018-08-30
  • 2016-10-15
  • 2018-10-28
相关资源
最近更新 更多