WooCommerce注册时如何设置用户名取姓名或邮箱前缀而非完整邮箱
WooCommerce自定义自动生成用户名规则实现方案
方案1:自动生成用户名仅取邮箱@前缀
将以下代码添加到当前主题的functions.php文件,或者自定义代码片段插件中即可生效:
add_filter('woocommerce_new_customer_username', 'custom_woocommerce_username_from_email_prefix', 10, 2); function custom_woocommerce_username_from_email_prefix($username, $email) { // 截取邮箱@之前的部分 $email_prefix = current(explode('@', $email)); $username = sanitize_user($email_prefix); // 处理重名情况,自动添加数字后缀 $suffix = 1; $original_username = $username; while(username_exists($username)) { $username = $original_username . $suffix; $suffix++; } return $username; }
方案2:优先使用姓名组合作为用户名,无姓名时用邮箱前缀
如果注册表单收集了用户的姓名信息,可以使用该方案优先生成基于姓名的用户名:
add_filter('woocommerce_new_customer_username', 'custom_woocommerce_username_from_name', 10, 3); function custom_woocommerce_username_from_name($username, $email, $new_customer_data) { // 优先取注册时提交的姓名组合 if(!empty($new_customer_data['first_name']) && !empty($new_customer_data['last_name'])) { $name_base = $new_customer_data['first_name'] . $new_customer_data['last_name']; } elseif(!empty($new_customer_data['first_name'])) { $name_base = $new_customer_data['first_name']; } elseif(!empty($new_customer_data['last_name'])) { $name_base = $new_customer_data['last_name']; } else { // 没有提交姓名时降级使用邮箱前缀 $name_base = current(explode('@', $email)); } $username = sanitize_user($name_base); // 处理重名情况,自动添加数字后缀 $suffix = 1; $original_username = $username; while(username_exists($username)) { $username = $original_username . $suffix; $suffix++; } return $username; }
注意事项
- 上述代码仅对新注册的用户生效,已注册用户的用户名不会被批量修改
- 可在WordPress后台「用户」编辑页面手动调整已有用户的用户名
- 代码内置了重名冲突处理逻辑,遇到相同用户名时会自动在末尾叠加数字后缀,保证用户名唯一
内容的提问来源于stack exchange,提问作者Kim ten Bras
相关产品推荐
相关产品推荐

