您所在位置:
如果您的 WooCommerce 商店偶尔会提供免费产品–无论是作为促销、免费试用还是导购磁铁的一部分–您可能已经注意到,默认结账仍会显示所有账单(和送货)字段。这给客户带来了不必要的麻烦,因为他们并不需要为了免费而输入完整的地址或付款信息。
值得庆幸的是,有一种简单的方法可以自定义这种行为,只显示您真正需要的结账字段。只需几行代码,您就可以在不需要付款时有条件地减少结账表单。这将改善用户体验,提高转化率,并保持整洁和相关性。
在本例中,当购物车总额为零时,我们将只保留账单电子邮件和账单姓名字段。您可以根据自己的需要,轻松调整该代码段以包含任何其他字段。
下面是实现的方法。

PHP 代码段: 删除 WooCommerce 免费结账时不必要的字段
此代码段连接到 woocommerce_checkout_fields 过滤器,检查当前购物车是否需要付款。如果不需要,即购物车中的所有内容都是免费的,那么它就会用有限的选择来替换完整的账单字段列表。在本例中,只保留了 billing_email 和 billing_first_name 字段。
您可以调整 in_array() 列表,以包含或排除任何您想要的字段。例如,如果还需要电话号码或自定义字段,只需将其添加到数组(’billing_phone’等)中即可。
这种方法有助于简化零成本订单的结账流程,提高可用性,并在不影响常规付费结账的情况下提高赠品转化率。
add_filter( 'woocommerce_checkout_fields', 'bbloomer_free_checkout_display_only_these_fields', 99999999 ); function bbloomer_free_checkout_display_only_these_fields( $fields ) { if ( WC()->cart && ! WC()->cart->needs_payment() ) { $free_fields = []; foreach ( $fields['billing'] as $key => $value ) { if ( in_array( $key, [ 'billing_email', 'billing_first_name' ] ) ) { $free_fields['billing'][$key] = $value; } } return $free_fields; } return $fields; }
在哪里添加自定义代码?
您应将自定义 PHP 代码放在子主题的 functions.php 中,将自定义 CSS 代码放在 style.css 中。