WP-REST API 排除类别不起作用
WP-REST API excluding category doesn't work
我用这个 semi-official plugin 启用了 API 调用。
但我找不到排除类别的方法。例如,如果我有 mysite.com/wp-json/wp/v2/posts?filter[category__not_in]=10
,它将忽略过滤器并显示所有最新帖子。
有没有办法从 API 调用中排除类别?
其余 API 某些过滤器仅适用于登录用户:
In addition, the following are available when authenticated as a user
with 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 中声明为查询变量...
对于 WP API V2 使用减号,例如:
http://yourwpwebsite/wp-json/wp/v2/posts/&filter[cat]=1,2,-3
将检索 id= 1 和 id = 2 类别中的所有帖子,但不包括 id= 3 类别中的所有帖子
我用这个 semi-official plugin 启用了 API 调用。
但我找不到排除类别的方法。例如,如果我有 mysite.com/wp-json/wp/v2/posts?filter[category__not_in]=10
,它将忽略过滤器并显示所有最新帖子。
有没有办法从 API 调用中排除类别?
其余 API 某些过滤器仅适用于登录用户:
In addition, the following are available when authenticated as a user with
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 中声明为查询变量...
对于 WP API V2 使用减号,例如:
http://yourwpwebsite/wp-json/wp/v2/posts/&filter[cat]=1,2,-3
将检索 id= 1 和 id = 2 类别中的所有帖子,但不包括 id= 3 类别中的所有帖子