使用 WP REST API 创建一个新用户并声明元对象

Create a new user using WP REST API and declare meta object

我在这里遇到一个问题。我正在用这个 JSON 数据发送一个 POSThttp://localhost/wp-json/v2/wp/users/

{
    "username" : "johndoe",
    "email": "jondoe@gmail.com",
    "password": "qwerty",
    "meta": {
        "icq": "11223344"
    }

}

但是我去看结果的时候,meta对象是空白的。我使用插件实现了目标,但是这个插件使用 cookie 进行身份验证,我还有另一个使用 JWT 进行身份验证的插件,所以我认为一个插件太多了单个任务。

有人遇到同样的问题吗?甚至在插件的官方文档中我也没有找到解决方案。

刚刚在Stack Overflow的另一个问题中找到了解决方案。使用函数 register_meta():

register_meta('user', 'icq', array(
  "type" => "string",
  "show_in_rest" => true
));

现在我可以使用以下方式发出请求:

{
    "username" : "johndoe",
    "email": "jondoe@gmail.com",
    "password": "qwerty",
    "meta": {
        "icq": "11223344"
    }

}

响应是:

{
    "id": 49,
    "username": "johndoe",
    "name": "johndoe",
    "first_name": "",
    "last_name": "",
    "email": "johndoe@gmail.com",
    "url": "",
    "description": "",
    "link": "http://localhost/author/johndoe/",
    "locale": "en_US",
    "nickname": "johndoe",
    "slug": "johndoe",
    "roles": [
        "subscriber"
    ],
    "registered_date": "2018-01-13T11:53:57+00:00",
    "capabilities": {
        "read": true,
        "level_0": true,
        "subscriber": true
    },
    "extra_capabilities": {
        "subscriber": true
    },
    "avatar_urls": {
        "24": "http://2.gravatar.com/avatar/29a1df4646cb3417c19994a59a3e022a?s=24&d=mm&r=g",
        "48": "http://2.gravatar.com/avatar/29a1df4646cb3417c19994a59a3e022a?s=48&d=mm&r=g",
        "96": "http://2.gravatar.com/avatar/29a1df4646cb3417c19994a59a3e022a?s=96&d=mm&r=g"
    },
    "meta": {
        "icq": [
            "11223344"
        ]
    },
    "_links": {
        "self": [
            {
                "href": "http://localhost/wp-json/wp/v2/users/49"
            }
        ],
        "collection": [
            {
                "href": "http://localhost/wp-json/wp/v2/users"
            }
        ]
    }
}

如果我想在 /wp-admin/ 中 show/edit 我也只使用这个函数:

function more_contactmethods( $contactmethods ) {
    $contactmethods['icq'] = 'ICQ';
    return $contactmethods;
}

add_filter( 'user_contactmethods', 'more_contactmethods' );