如何让WordPress默认将显示名称设为用户名?代码尝试未生效
解决WordPress注册时强制显示名称为用户名的问题
我来帮你搞定这个问题~你的代码没生效的核心原因是:WordPress在user_register钩子触发后,还有内部逻辑会覆盖你设置的display_name值——比如用户填写了姓名信息时,系统会自动用姓名组合更新显示名称,直接冲掉你之前的设置。
推荐用wp_insert_user过滤器来实现,这个钩子是在用户数据写入数据库前触发的,能直接修改待保存的用户数据,从根源上避免被后续逻辑覆盖,可靠性更高:
add_filter('wp_insert_user_data', 'force_display_name_as_username', 10, 2); function force_display_name_as_username($data, $update) { // 只针对新用户注册操作,不影响已有用户更新资料 if (!$update && isset($data['user_login'])) { $data['display_name'] = $data['user_login']; } return $data; }
为什么这个方法更靠谱?
- 它在用户数据存入数据库前就修改了值,完全绕开了WordPress后续的默认显示名称生成逻辑
- 通过
$update参数精准区分新用户注册和老用户资料更新,不会干扰用户之后自己修改显示名称的操作
如果你坚持想用原来的user_register钩子,也可以试试把优先级调得更高(比如2000),同时改成从用户对象获取用户名(比依赖$_POST兼容性更好,比如后台创建用户的场景):
add_action('user_register', 'registration_save_displayname', 2000); function registration_save_displayname($user_id) { $user = get_user_by('id', $user_id); if ($user) { wp_update_user(array( 'ID' => $user_id, 'display_name' => $user->user_login )); } }
补充一下WordPress的默认规则:如果用户填写了名和姓,系统会用「名 姓」作为显示名称;只填一个就用那个字段;都没填才会用用户名。上面的代码会强制跳过这个规则,不管用户填不填姓名,显示名称都固定为用户名。
内容的提问来源于stack exchange,提问作者daro2013
相关产品推荐
相关产品推荐

