Wordpress API JSON return limit

2019-02-06 07:50发布

问题:

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

回答1:

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.



回答2:

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



回答3:

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)



回答4:

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



回答5:

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.



回答6:

The arg in V2 is "per_page" - http://v2.wp-api.org/reference/posts/



回答7:

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.