2

I used this semi-official plugin to enable API call.

But I can't find a way to exclude category. For example if I have mysite.com/wp-json/wp/v2/posts?filter[category__not_in]=10, it will ignores the filter and show all latest posts.

Is there a way to exclude category from the API call?

4

2 回答 2

2

使用 Rest API,一些过滤器仅对登录用户可用:

此外,以下内容在作为具有以下内容的用户进行身份验证时可用edit_posts

[...]

category__not_in

这取自Rest API 1.0 文档

这意味着您需要以编辑者(有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')
    )
));

感谢您分享的这篇文章,您似乎需要将过滤器名称声明为查询变量,所以在这种情况下:

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

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

于 2015-12-21T17:08:57.450 回答
-2

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

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

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

于 2016-08-23T03:01:38.073 回答