如何在WooCommerce 4的结帐中防止默认付款网关

问题描述

我可以找到许多相关的问题,但是给定的解决方案已经过时,不再起作用。我能找到的最常见的解决方案是:

add_filter( 'pre_option_woocommerce_default_gateway' . '__return_false',99 );

但这不适用于最新版本的WooCommerce。

我还试图在WooCommerce会话中设置一个空值:

WC()->session->set( 'chosen_payment_method','' );

这也不起作用,woocommerce仍将认选择结帐中列出的第一个网关...

解决方法

由于pre_option_woocommerce_default_gateway钩不再存在,您也可以尝试以下操作,这会将所选的支付网关重置为第一个显示的支付方式:

add_action( 'wp_footer','default_payment_gateway' );
function default_payment_gateway() {
    if( is_checkout() && ! is_wc_endpoint_url() ) :

    $available_gateways     = WC()->payment_gateways->get_available_payment_gateways();
    $available_gateways_ids = array_keys($available_gateways);
    $default_gateway_id     = reset($available_gateways_ids);

    ?>
    <script language="javascript">
    jQuery( function($){
        var a = '<?php echo $default_gateway_id; ?>',b = 'input[name="payment_method"][value="'+a+'"]';

            $(b).prop('checked',true);
            $(document.body).trigger('update_checkout');
    });
    </script>
    <?php
    endif;
}

代码进入活动子主题(或活动主题)的functions.php文件中。适用于2.5.x以后的所有WooCommerce版本。

或者您可以设置默认的特定付款方式,替换为:

    $available_gateways     = WC()->payment_gateways->get_available_payment_gateways();
    $available_gateways_ids = array_keys($available_gateways);
    $default_gateway_id     = reset($available_gateways_ids);

通过(例如此处为“ COD”)

    $default_gateway_id = 'cod';

无论如何,在单选按钮上,默认行为始终是显示选中的第一项。取消选中所有单选按钮是不寻常的。