如何将WooCommerce注册、账单页邮箱字段设置为非必填项
WooCommerce 邮箱字段设为非必填解决方案
你之前尝试的代码存在两个核心问题:1. 使用的钩子woocommerce_register_form不匹配字段修改场景,2. 代码中用到的$key、$registration_fields变量未提前定义,无法生效。同时仅修改前端required属性不够,WooCommerce后端默认仍会校验邮箱必填,需要同步取消后端校验规则。
以下代码添加到你当前主题的functions.php文件或自定义功能插件中即可生效,同时覆盖注册页、账单地址页两个场景的前端属性修改+后端校验取消:
// 1. 修改注册页邮箱字段为非必填 add_filter( 'woocommerce_register_fields', 'wc_remove_email_required', 999 ); function wc_remove_email_required( $fields ) { $fields['account']['account_email']['required'] = false; return $fields; } // 2. 取消注册页后端邮箱必填校验 add_filter( 'woocommerce_registration_errors', 'wc_remove_email_required_validation', 999, 3 ); function wc_remove_email_required_validation( $errors, $username, $email ) { if ( isset( $errors->errors['empty_email'] ) ) { unset( $errors->errors['empty_email'] ); } return $errors; } // 3. 修改账单地址页邮箱字段为非必填 add_filter( 'woocommerce_billing_fields', 'wc_remove_billing_email_required', 999 ); function wc_remove_billing_email_required( $fields ) { $fields['billing_email']['required'] = false; return $fields; } // 4. 取消账单地址提交时后端邮箱必填校验 add_filter( 'woocommerce_process_checkout_errors', 'wc_remove_billing_email_validation', 999 ); function wc_remove_billing_email_validation( $errors ) { if ( isset( $errors->errors['billing_email_required'] ) ) { unset( $errors->errors['billing_email_required'] ); } return $errors; }
注意事项
- 若你站点有自定义的注册/结账模板,需要检查模板中是否硬写了
required属性,若有手动删除即可 - 你已搭建SMS发送密码、到店核验身份的机制,无需担心无邮箱导致的账号通知、身份校验问题
内容的提问来源于stack exchange,提问作者RawalD
相关产品推荐
相关产品推荐

