WP REST API仅返回部分用户列表

时间:2018-04-17 作者:MakeCodeNotWar

第一次开始使用WP REST API。我们的最终目标是根据当前登录的用户动态加载UI元素。然而,我试图列出所有用户的列表却遇到了麻烦——在运行基本http请求时,我只能返回五个用户中的两个:

http://portal.alliedbuildings.com/wp-json/wp/v2/users

我试着包括其他参数,比如search 但只有当我正在搜索的用户是我已经得到的响应中的两个用户之一时,这才有效;它不会为其他三个用户返回任何数据。查看用户配置文件,没有任何独特的数据点或角色将返回的两个用户与其他三个用户区分开来。返回的两个都是管理员,但缺少的三个管理员中的一个也是管理员。

我到底错过了什么??

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

在大量阅读之后,我发现了为什么所有用户都没有返回针对WP REST API的直接HTTP请求的原因:

这是一个non-authenticated 因此,GET请求中只发布公开可用的用户数据。

***重要的是,如果您需要的某些数据不可用,您可能需要使用以下命令将这些字段添加到响应中register_api_fields (see docs for example usage), 到您的用户端点

我找到的最好的资源,给了我这个答案,是WP REST API from Torque (see pages 35-38). 有人需要给那个人买很多很多啤酒来写这么好的指南!!

SO网友:Abe Caymo

对于可能仍然遇到此问题的任何人,这里有一个清单:

确保您已通过身份验证AND 您的用户具有list_users 能力示例:添加自定义角色时,我确保添加list_users 能力。用户还应logged in (认证的含义)提出请求时。

默认情况下,请求仅返回已发布帖子的用户。要禁用此功能,可以删除has_published_posts 从查询参数中,如下所示:

Add normally

add_filter(\'rest_user_query\', \'remove_has_published_posts_from_api_user_query\', 10, 2);
function remove_has_published_posts_from_api_user_query($prepared_args, $request)
{
    unset($prepared_args[\'has_published_posts\']);

    return $prepared_args;
}

or within namespace

add_filter(\'rest_user_query\', __NAMESPACE__ . \'\\remove_has_published_posts_from_api_user_query\', 10, 2);
function remove_has_published_posts_from_api_user_query($prepared_args, $request)
{
    unset($prepared_args[\'has_published_posts\']);

    return $prepared_args;
}

SO网友:Jordan Ramstad

我认为这取决于你寻找什么的具体情况,你可以通过使自己的路线变得艰难来获得最大的控制权,用户路线更倾向于列出用户,而不是确切地搜索他们,因为你可能想根据大量的信息来搜索,而要通过参数进行搜索可能会很困难。

我并不是说这是不可能的,我只是个人发现,比起努力获得一条遵循您的用例的路线,构建自定义路线更容易。

以下是一个示例:

// namespace is like app/v1 rather then wp/v2
register_rest_route($namespace, \'/users\', array(
    \'methods\'             => WP_REST_Server::READABLE,
    \'callback\'            => \'get_user_list\',
    \'show_in_rest\' => true
));
那么对于函数get_user_list

function get_user_list($request) {
   //below you can change to a WQ_Query and customized it to ensure the list is exactly what you need
   $results = get_users();

   //Using the default controller to ensure the response follows the same structure as the default route
   $users = array();
   $controller = new WP_REST_Users_Controller();
   foreach ( $results as $user ) {
        $data    = $controller->prepare_item_for_response( $user, $request );
        $users[] = $controller->prepare_response_for_collection( $data );
    }

   return rest_ensure_response( $users );
}
当然,还有更多信息(如分页)。

https://github.com/WordPress/WordPress/blob/master/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php将向您展示如何通过get_items 作用根据您要查询的内容,它还可以告诉您需要查询的选项(如果使用默认路由)。

我给出如此复杂答案的唯一原因是,它可以帮助您了解ins及其工作原理,以及RESTAPI的哪些应用程序可以满足您的需要。

结束

相关推荐

WP REST API-如何在Java中将嵌入式转换为JSON对象

我想通过我的帖子从WordPress Rest api获取嵌入图像。我发现我应该添加_embed 或_embed=true 作为我的请求的查询参数。结果有额外的_embedded 部分如下:我将名为\\u embedded的embeddedDto放在主json文件中,并创建其他需要的DTO来处理此问题。图像中的突出显示点似乎有问题wp:featuremedia, 我应该如何将其解析为json?我创建了一个具有featuremedia dto的类wp。我说得对不对?您可以在此处看到其他DTO:public