如何在 WooCommerce 4 结账时防止默认支付网关

问题描述 投票:0回答:1

我可以找到很多相关问题,但给出的解决方案已经过时并且不再有效。我能找到的最常见的解决方案是:

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

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

我还尝试在 WooCommerce 会话中设置空值:

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

这也不起作用,woocommerce 无论如何都会默认选择结帐中列出的第一个网关...

php jquery wordpress woocommerce checkout
1个回答
1
投票

由于

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);

by (这里以“COD”为例)

$default_gateway_id = 'cod';

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.