$slug = sanitize_title($nickname);
if (username_exists($slug) || get_user_by('slug', $slug)) {
  $slug .= '-' . wp_rand(100, 999);
}
wp_update_user(array('ID' => $uid, 'user_nicename' => $slug));

两个用户都叫小林,第二个注册成功后,第一个的作者页打开变成了第二个人的文章,链接里都是同一个拼音别名。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:作者页按 user_nicename 取人,这个字段从昵称生成,重名时后一个拿到带数字的别名,但主题里拼链接用的是昵称原文。链接和实际别名对不上,就指到了别处。

围绕「昵称唯一性校验」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。监控和日志的时间要对上,时区不一致会多绕很大一圈。

处理上按这个顺序:注册时检查昵称是否已存在,重名让用户换一个或自动加后缀;作者页链接统一用 get_author_posts_url 生成,别手工拼昵称;存量重名账号批量检查一遍,把别名和链接对齐;注册两个同名账号,分别点开作者页看是否指向自己。

确认没问题再收工,两个同名用户的作者页各自独立,文章列表不串。

作者 9823189