2015-12-21 4 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? API-интерфейс Rest теперь является частью ядра. – vard

+0

@vard О, я уже обновил до 4.4, но я думаю, что он все еще нуждается в плагине. – hrsetyono

+0

Mmh это не должно быть, есть ли у вас какие-либо ошибки, когда вы деактивируете его и попытаетесь использовать остальные api? (Я не уверен, что по умолчанию он использует версию API 2.0 или 1.0, но ее можно установить через конфигурацию) – vard

ответ

2

С API Rest некоторые фильтры доступны только для зарегистрированных пользователей:

Кроме того, доступны следующие, когда проверка подлинности как пользователь с 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? – 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 

будет получать все сообщения в категориях с идентификатором = 1 и ид = 2, но исключая любые сообщения в категории с идентификатором = 3