好几年没自己接触wordpress的WooCommerce商城插件了,最近因为疫情原因,为了写教程,自己折腾了一个Wordpress商城网站,用到了WooCommerce插件。

在下单结算页面,看了下WooCommerce默认带了邮箱地址,邮编,还是必须填写选项。不过这两项目前在国内很少用到吧,邮箱就不说吧,有的卖虚拟产品可能需要,邮编这个的确少了。

就找了下怎么删掉邮编这项,可以用代码解决也可以用插件解决。

如果用插件,推荐使用:Checkout Field Editor (Checkout Manager) for WooCommerce,这个插件是收费的,不过免费版本就够用了,我也没测试过,因为是在国外一个网站看见有人推荐的。

当然如果你不想用插件,那就用代码解决吧,把以下代码加到主题的functions.php文件里面:

2020年7月1日更新:

之前只用了woocommerce_billing_fields钩子,今天才发现用户自己在个人中心修改地址,还是会出来全部信息,然后又仔细看了下官方教程,原来有好几种情况。

  • woocommerce_billing_fields 只是开票页面地址
  • woocommerce_shipping_fields 只是运输页面地址
  • woocommerce_checkout_fields 只是结算付款页面地址
  • woocommerce_default_address_fields 这个才是总地址管理,也就是包括了上面2个

那为了方便减少代码,我们现在只需要用woocommerce_default_address_fields修改就行了。

//本地化woocommerce
add_filter( 'woocommerce_default_address_fields' , 'custom_override_default_address_fields' );
function custom_override_default_address_fields( $fields ) {
  unset($fields['postcode']);//删掉邮政编号
  unset($fields['city']);//删掉城市
  unset($fields['state']);//删掉省会
  unset($fields['last_name']);//删掉姓氏
  return $fields;
}

但是由于woocommerce_default_address_fields并不涉及邮箱,所以如果你不用邮箱,还是得用woocommerce_checkout_fields和woocommerce_billing_fields两个钩子。

woocommerce_checkout_fields这个是订单付款那个页面,不需要邮箱,前面带billing。

//Hook in 结算地址email
add_filter( 'woocommerce_checkout_fields' , 'custom_remove_billing_email_fields' );
function custom_remove_billing_email_fields( $fields ) {
  unset($fields['billing']['billing_email']);//删掉邮箱地址
  return $fields;
}

woocommerce_billing_fields这个是前台个人中心里面的地址,如果不用邮箱,不带billing。

// Hook in 个人中心地址email
add_filter( 'woocommerce_billing_fields' , 'custom_override_billing_fields' );
function custom_override_billing_fields( $fields ) {
unset($fields['billing_email']);
return $fields;
}

更新结束,更新之后个人中心修改地址:

付款页面地址:

如果不删,把改成选填:

// Hook in
add_filter( 'woocommerce_default_address_fields' , 'custom_override_default_address_fields' );

// Our hooked in function - $address_fields is passed via the filter!
function custom_override_default_address_fields( $address_fields ) {
     $address_fields['last_name']['required'] = false;//姓名选填

     return $address_fields;
}

woocommerce_default_address_fields默认的字段:

country
first_name
last_name
company
address_1
address_2
city
state
postcode

Billing 结算相关字段:

billing_first_name  //名字
billing_last_name  //姓氏
billing_company //公司
billing_address_1 //地址1
billing_address_2 //地址2
billing_city  //城市
billing_postcode //邮编
billing_country //国家
billing_state //这里可以理解为省会级别
billing_email //邮箱
billing_phone //电话

Shipping 运输相关字段:

shipping_first_name
shipping_last_name
shipping_company
shipping_address_1
shipping_address_2
shipping_city
shipping_postcode
shipping_country
shipping_state

account 账户相关字段:

account_username
account_password
account_password-2

Order 订单相关字段:

order_comments

记得去后台设置WooCommerce配送选项,改成“强制配送到顾客的账单地址”

其他的参考官方教程就行了:

https://docs.woocommerce.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/