WordPress如何校验已存在user_login并程序化创建带序号后缀新用户
问题原因
你现有代码的核心问题是每次循环时直接修改了原始的用户名变量,导致第二次循环时会在已经追加过序号的用户名基础上再次拼接新序号,最终出现first-last-1-2-3这类连续叠加序号的问题。另外你最早封装函数的版本还存在变量作用域问题,函数内部无法直接读取外部的$new_username变量,也会导致逻辑失效。
修复后的代码
// 生成不带序号的基础用户名,全程不修改该变量 $base_username = strtolower(str_replace(' ', '', $_POST['first_name']) . '-' . str_replace(' ', '', $_POST['last_name'])); $new_username = $base_username; $count = 1; // 循环检测用户名是否存在,存在则基于基础用户名追加序号 while (username_exists($new_username)) { $new_username = $base_username . '-' . $count; $count++; } // 此时$new_username即为可用的唯一用户名,可直接传入wp_create_user使用 echo $new_username;
逻辑说明
- 首先将拼接好的姓名前缀单独存储为
$base_username,后续所有序号拼接都基于这个固定的基础版本生成,避免在已加序号的用户名上重复拼接 - 序号从1开始自增,每次循环生成全新的带后缀用户名再做存在性检测,最终生成的用户名格式完全符合你要求的
first-last、first-last-1、first-last-2规则
内容的提问来源于stack exchange,提问作者theKing
相关产品推荐
相关产品推荐

