This is a simple question regarding Wordpress API /wp-json. I am querying some data filtered with certain category in Wordpress. My questions is how can I control amount of result that gets returned from my Get request... The default returns seems to return around 11 most recent results. Is there any way I can make it return only 1 (most recent), or like 100 posts. What is the minimum and maximum amount I can return. And what is the syntax for it. This is the default request I have:
http://thisismywebsitewherewordpresslives.com/wp-json/posts?fiter[category_name]=Some Category Name I want to query&filter[order]=ASC
If you're using v2 of the WordPress REST API, it looks like the current method of controlling the number of results returned is:
website.com/wp-json/wp/v2/posts/?per_page=100
Replace 100 with the desired count.
If you're using a custom post type, replace posts with the custom post type. Also make sure to set 'show_in_rest' => true
when configuring the custom post type.
Add the filter[posts_per_page] parameter to the query to restrict the number of results returned by the API.
http://thisismywebsitewherewordpresslives.com/wp-json/posts?filter[posts_per_page]=2&fiter[category_name]=Some Category Name I want to query&filter[order]=ASC
The above query should return only 2 results. The list of query parameters are present here https://github.com/WP-API/WP-API/blob/master/docs/routes/routes.md#retrieve-posts
As another said : (v2)
http://example.com/wp-json/wp/v2/posts?per_page=10
But If you want to get more next posts : (paged)
http://example.com/wp-json/wp/v2/posts?per_page=10&page=2
Docs : http://v2.wp-api.org/reference/posts/ (Scroll to List Posts)
Currently the API imposes a 99 post limit return. So the max is website.com/wp-json/wp/v2/posts/?&per_page=99
, that said it seems like you can modify to allow for additional posts. There's a discussion on that here: https://github.com/WP-API/WP-API/issues/2914
My recommendation above is no longer correct. Now you'll want to use:
website.com/wp-json/wp/v2/posts/?filter[posts_per_page]=100
Change the number to retrieve more or fewer posts. Change "posts" to your custom post type if necessary and make sure to set 'show_in_rest' => true
when registering the custom post type.
Note: While setting the posts_per_page value to -1 worked in earlier beta versions of the plugin (2.0-beta13.1), it does not seem to work in the most recent versions. Now it seems you must define a value in the endpoint.
The arg in V2 is "per_page" - http://v2.wp-api.org/reference/posts/
I'm surprised no one mentioned using the native filters WordPress has created for situations exactly like this.
I was able to achieve returning a desired amount of posts by default, while still allowing the $_GET['per_page']
param to work like so:
/**
* Default to all posts being returned rather than the default 10 posts per
* page. Also, do not get in the way of the native $_GET['per_page'] setting.
* @param {int} $newDefault The new default amount of posts to return per paginated page
* @var {void}
*/
function setRestApiPostsPerPage($newDefault) {
foreach (get_post_types() as $i => $postType) {
add_filter( "rest_{$postType}_query", function ($args, $request) {
if (! isset($_GET['per_page'])) {
// new default to overwrite the default 10
$args['posts_per_page'] = $newDefault;
}
return $args;
}, 15, 2);
}
}
I did find out you can't set $args['posts_per_page'] = -1;
That results in an error being thrown which you can see here.
You can throw any logic within the closure/callback/filter to set the $args['posts_per_page']
however you'd like to.