WordPress REST API注册用户时姓名字段未保存问题
解决WordPress REST API注册用户时名字和姓氏不生效的问题
你遇到的问题是:通过自定义REST API端点注册用户时,注册流程能正常完成,但提交的first_name和last_name参数无法同步到WordPress后台的用户名字和姓氏字段。
问题根源
wp_create_user()函数仅支持3个必填参数:$username、$password、$email,你传入的第4、5个参数($firstname和$lastname)不会被该函数处理,因此名字和姓氏不会被自动保存到用户元数据中。
解决方案
用户创建成功后,需要通过update_user_meta()函数单独设置first_name和last_name的用户元数据。修改后的完整代码如下:
add_action('rest_api_init', 'wp_rest_user_endpoints'); /** * 注册REST API端点用于用户注册 * * @return void **/ function wp_rest_user_endpoints() { register_rest_route('wp/v2', 'users/register', array( 'methods' => 'POST', 'callback' => 'wc_rest_user_endpoint_handler', 'args' => array(), )); } function wc_rest_user_endpoint_handler($request = null) { $response = array(); $parameters = $request->get_json_params(); $username = sanitize_text_field($parameters['username']); $email = sanitize_text_field($parameters['email']); $firstname = sanitize_text_field($parameters['first_name']); $lastname = sanitize_text_field($parameters['last_name']); $password = sanitize_text_field($parameters['password']); $error = new WP_Error(); if (empty($username)) { $error->add(400, __("Username field 'username' is required.", 'wp-rest-user'), array('status' => 400)); return $error; } if (empty($email)) { $error->add(401, __("Email field 'email' is required.", 'wp-rest-user'), array('status' => 400)); return $error; } if (empty($password)) { $error->add(404, __("Password field 'password' is required.", 'wp-rest-user'), array('status' => 400)); return $error; } $user_id = username_exists($username); if (!$user_id && email_exists($email) == false) { // 注意:wp_create_user仅接受3个参数 $user_id = wp_create_user($username, $password, $email); if (!is_wp_error($user_id)) { // 设置用户角色 $user = get_user_by('id', $user_id); $user->set_role('subscriber'); if (class_exists('WooCommerce')) { $user->set_role('customer'); } // 保存名字和姓氏到用户元数据 if (!empty($firstname)) { update_user_meta($user_id, 'first_name', $firstname); } if (!empty($lastname)) { update_user_meta($user_id, 'last_name', $lastname); } $response['code'] = 200; $response['message'] = __("User '" . $username . "' Registration was Successful", "wp-rest-user"); } else { return $user_id; } } else { $error->add(406, __("Email already exists, please try 'Reset Password'", 'wp-rest-user'), array('status' => 400)); return $error; } return new WP_REST_Response($response, 200); // 将状态码改为标准的200,符合REST API规范 }
关键修改点
- 移除
wp_create_user()中多余的$firstname和$lastname参数,遵循函数的参数定义。 - 在用户创建成功后,通过
update_user_meta()分别将名字和姓氏存入对应用户元数据字段。 - 优化返回状态码:将原代码中的123改为标准的200,符合REST API响应规范。
内容的提问来源于stack exchange,提问作者Brittany
相关产品推荐
相关产品推荐

