You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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规范
}

关键修改点

  1. 移除wp_create_user()中多余的$firstname和$lastname参数,遵循函数的参数定义。
  2. 在用户创建成功后,通过update_user_meta()分别将名字和姓氏存入对应用户元数据字段。
  3. 优化返回状态码:将原代码中的123改为标准的200,符合REST API响应规范。

内容的提问来源于stack exchange,提问作者Brittany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 00:21:41