我可以找到很多相关问题,但给出的解决方案已经过时并且不再有效。我能找到的最常见的解决方案是:
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);
by (这里以“COD”为例):
$default_gateway_id = 'cod';
无论如何,在单选按钮上,默认行为始终是显示选中的第一项。取消选中所有单选按钮是不寻常的事情。