如何将用户自定义字段添加到REST API响应?

时间:2016-04-10 作者:Cedon

我正在编写一个WordPress主题,它使用以下函数将几个自定义字段添加到用户配置文件中

function add_contact_methods( $profile_fields ) {
// Add Social Media Fields
$profile_fields[\'facebook\']  = esc_html_e( \'Facebook URL\', \'jldc\' );
);

return $profile_fields;
}
add_filter( \'user_contactmethods\', \'add_contact_methods\' );
如何将其挂接到REST API(使用插件的v2-ßeta13),以便该字段的值将在服务器的JSON响应中返回?

我找到了一个关于它的教程,最后得到了代码:

function facebook_add_user_data() {
register_api_field( \'user\',
    \'facebook\',
    array(
        \'get_callback\'  => \'facebook_get_user_field\',
        \'update_callback\'   => null,
        \'schema\'            => array(
                                        \'description\'   => \'User Facebook URL\',
                                        \'type\'          => \'string\',
                                        \'context\'       => array( \'view\' ),
                                ),
     )
);
}

add_action( \'rest_api_init\', \'facebook_add_user_data\' );

function facebook_get_user_field( $user, $field_name, $request ) {
    return get_user_meta( $user->id, $field_name);
}
当我运行请求(../wp-json/wp/v2/users/2)时,字段不会出现。

你是如何把这些田里的水勾起来的?

1 个回复
最合适的回答,由SO网友:Cedon 整理而成

我明白了。原来我看的教程很旧,我使用了错误的WP函数。我在使用register_api_field 但正确的方法是register_rest_field.

事情是这样的。。。

function facebook_add_user_data() {
register_rest_field( \'user\',
    \'facebook\',
    array(
        \'get_callback\'  => \'rest_get_user_field\',
        \'update_callback\'   => null,
        \'schema\'            => null,
     )
);
}
add_action( \'rest_api_init\', \'facebook_add_user_data\' );

function rest_get_user_field( $user, $field_name, $request ) {
    return get_user_meta( $user[ \'id\' ], $field_name, true );
}
我尝试了一下,服务器的响应包括“facebook”字段和用户档案中的URL。

此外facebook_get_user_field 函数实际上可以重用,所以我重命名了它rest_get_user_field 并用另一个字段名nad对其进行了测试,它也在响应中生成了该数据。