不包括类别的WP-REST API不起作用

时间:2015-12-21 16:16:00

标签: wordpress wp-api

我使用此semi-official plugin启用API调用。

但我无法找到排除类别的方法。例如,如果我有mysite.com/wp-json/wp/v2/posts?filter[category__not_in]=10,它将忽略过滤器并显示所有最新帖子。

有没有办法从API调用中排除类别?

2 个答案:

答案 0 :(得分:2)

使用Rest API,某些过滤器仅适用于已登录的用户:

  

此外,在以用户身份验证时,以下内容可用   与edit_posts

     

[...]

     

category__not_in

这取自Rest API 1.0 documentation

这意味着您需要以编辑器(具有edit_posts功能的用户)登录。为了以一种干净的方式做到这一点,我建议为REST用户创建一个只有你需要的功能的最小角色,如下所示:

add_role(
    'rest_user',
    __( 'REST User' ),
    array(
        'read'         => true,
        'edit_posts'   => true,
        'delete_posts' => false
    )
);

然后使用以下内容将您的查询作为经过身份验证的用户执行:

$response = wp_remote_request('http://example.com/wp-json/wp/v2/posts?filter[category__not_in]=10', array(
    'method' => 'GET',
    'headers' => array(
        'Authorization' => 'Basic ' . base64_encode('login:password')
    )
));

感谢您分享的this article,您似乎需要将过滤器名称声明为查询变量,因此在这种情况下:

add_filter('query_vars', function($query_vars) {
    $query_vars[] = 'category__not_in';
    return $query_vars;
});

这是有道理的,因为Wordpress正在删除任何未声明的GET参数,但我不明白为什么所有过滤器都没有在WP Core中声明为查询变量...

答案 1 :(得分:-1)

对于WP API V2,请使用减号,例如:

http://yourwpwebsite/wp-json/wp/v2/posts/&filter[cat]=1,2,-3

将检索ID = 1且id = 2的所有类别的帖子,但不包括ID为3的任何类别的帖子