2015-12-21 32 views
2

我使用此semi-official plugin來啓用API調用。不包括類別的WP-REST API不起作用

但我找不到排除類別的方法。例如,如果我有mysite.com/wp-json/wp/v2/posts?filter[category__not_in]=10,它將忽略過濾器並顯示所有最新帖子。

有沒有方法從API調用中排除類別?

+0

不能升級到4.4類別的所有帖子? Rest API現在是核心的一部分。 – vard

+0

@vard哦我已經升級到4.4,但我認爲它仍然需要插件。 – hrsetyono

+0

Mmh它不應該,當你停用它,並嘗試使用其餘的API時,你有任何錯誤? (我不確定它是否默認使用API​​的2.0或1.0版本,但可以通過config來設置) – vard

回答

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核心內的查詢變量...

+0

我已經以管理員身份登錄,當我直接進入URL時,它仍然顯示所有未過濾的最新帖子。也許這是v2的bug? – hrsetyono

+0

也許 - 我引用的文本來自v1文檔 - 我沒有在v2文檔中看到任何對此過濾器值的引用。我建議嘗試使用1.0版本,看看它是否有幫助。 – vard

+0

我在他們的回購中加入了一個錯誤報告,並得到了[相同的答案](https://github.com/WP-API/WP-API/issues/1884#issuecomment-166351516)。讓我們等待他們的下一個答覆。 – hrsetyono

0

對於WP API V2,使用負號,例如:

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

將檢索與ID = 1和ID = 2,但與ID類別排除任何職位= 3