如何修改WordPress昵称默认设置 从取值用户名改为取值姓名
问题原因
你之前测试无效的代码是「User Registration」第三方注册插件的专属钩子,只有安装启用该插件时才会触发,不适用于WordPress原生注册/用户编辑场景,且代码中取值为first_name和last_name拼接,和你要调用的name字段不匹配。
可行解决方案
以下代码均为WordPress核心原生钩子实现,不依赖第三方插件,添加到当前主题functions.php文件末尾即可生效。
1. 新用户注册时自动设置nickname为name字段值
add_action( 'user_register', 'auto_set_nickname_from_name', 10, 1 ); function auto_set_nickname_from_name( $user_id ) { $user_name = get_user_meta( $user_id, 'name', true ); // name字段为空时可自定义回退规则,这里默认回退为显示名称/用户名 if ( empty( $user_name ) ) { $user = get_user_by( 'id', $user_id ); $user_name = $user->display_name ? $user->display_name : $user->user_login; } update_user_meta( $user_id, 'nickname', $user_name ); }
2. 后台用户编辑页自动填充nickname默认值
实现打开用户编辑页时,默认将nickname输入框内容替换为name字段值,无需等待保存后才生效:
add_filter( 'get_user_metadata', 'set_nickname_edit_default', 10, 4 ); function set_nickname_edit_default( $value, $user_id, $meta_key, $single ) { if ( is_admin() && $meta_key === 'nickname' && $single ) { $raw_nickname = get_metadata_raw( 'user', $user_id, 'nickname', true ); $user = get_user_by( 'id', $user_id ); // 仅当nickname为默认生成的用户名时才替换 if ( $raw_nickname === $user->user_login ) { $user_name = get_user_meta( $user_id, 'name', true ); return $user_name ? $user_name : $value; } } return $value; }
3. 批量更新已有用户的nickname
如果需要给历史注册的用户统一更新nickname,添加以下代码,登录后台刷新一次页面即可完成更新,更新后直接删除这段代码即可:
add_action( 'admin_init', 'batch_update_old_users_nickname' ); function batch_update_old_users_nickname() { if ( ! current_user_can( 'manage_options' ) ) return; $all_users = get_users( array( 'number' => -1 ) ); foreach ( $all_users as $user ) { $user_name = get_user_meta( $user->ID, 'name', true ); if ( ! empty( $user_name ) && get_user_meta( $user->ID, 'nickname', true ) !== $user_name ) { update_user_meta( $user->ID, 'nickname', $user_name ); } } add_action( 'admin_notices', function() { echo '<div class="notice notice-success"><p>所有历史用户nickname批量更新完成,可删除当前批量更新代码</p></div>'; } ); }
注意事项
- 如果你的
name字段是自定义字段,需要将代码中get_user_meta的第二个参数name替换为对应自定义字段的真实meta key - 建议修改代码前先备份网站数据库,避免误操作导致数据异常
- 若担心主题更新覆盖
functions.php修改,可使用代码片段类插件存放自定义代码
内容的提问来源于stack exchange,提问作者parisa parvizi
相关产品推荐
相关产品推荐

