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

时间:2018-01-10 19:44:26

标签: php json wordpress wordpress-rest-api

我在这里挣扎着提问。我正在使用此POST数据向http://localhost/wp-json/v2/wp/users/发送JSON

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

}

但是当我去看结果时,meta对象是空白的。我使用插件完成了目标,但是此插件使用cookie进行身份验证,并且我有另一个使用JWT进行身份验证的插件,因此我认为对于一个插件有很多插件单一任务。

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

1 个答案:

答案 0 :(得分:1)

刚刚在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/中显示/编辑,我也只使用此功能:

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

add_filter( 'user_contactmethods', 'more_contactmethods' );