Wordpress REST API V2 return all posts

2020-02-23 08:09发布

I am missing the function to get ALL the posts (or CPT) by using

example.com/wp-json/wp/v2/country/?per_page=-1

or any similiar. The documentation gives as much info as this:

per_page: Maximum number of items to be returned in result set.

Default: 10

And in another question about the per_page we learn that the allowed range is 1 to 100.

In my case there will be a limited number of posts I need to get, but it will be around 200-300. Are there any workarounds to get them all other than fetching everything page per page and stitching it together?

Additional info if it does matter: I am using angular.js

9条回答
孤傲高冷的网名
2楼-- · 2020-02-23 08:28


I have been using this 's976_per_page' bit of code successfully so many thanks,but It only returns the 'publish' tagged posts,..
How could I get this to grab ALL statuses, or, alternatively, only a set / subset of statuses
Many Thanks
JMB

查看更多
再贱就再见
3楼-- · 2020-02-23 08:33

If you are planning on doing this with other parameters, you can also add categories etc as well. EG:

https://www.website.com/wp-json/wp/v2/posts?categories=61&per_page=100
查看更多
三岁会撩人
4楼-- · 2020-02-23 08:38

As of WP 4.7 you can increase the upper limit of WP REST API requests by hooking into the following filter:

rest_{$this->post_type}_collection_params

This snippet should do the trick for posts:

add_filter( 'rest_post_query', 'se35728943_change_post_per_page', 10, 2 );

function se35728943_change_post_per_page( $args, $request ) {
    $max = max( (int) $request->get_param( 'custom_per_page' ), 200 );
    $args['posts_per_page'] = $max;    
    return $args;
}

Note: you can not use standard per_page argument (with value more then 100) in request - wp api will respond with error immediately (so the hook will not help). That's in the above code wee use custom_per_page (you can use any another word).

Similar filter for taxonomies: rest_{$this->taxonomy}_query

Example:

add_filter( 'rest_tags_query', 'se35728943_change_terms_per_page', 2, 10 );

function se35728943_change_terms_per_page( $prepared_args, $request ){
    $max = max( 200, (int) $request->get_param( 'custom_per_page' ) );

    $prepared_args['number'] = $max;
    return $prepared_args;
}
查看更多
三岁会撩人
5楼-- · 2020-02-23 08:39

Try this instead for pagination. It returns all the posts on my site.

http://example.com/wp-json/wp/v2/posts/?filter[category_name]=country&filter[posts_per_page]=-1

I get returns above 100 when entered like that and can cap them at 111 etc. http://example.com/wp-json/wp/v2/posts/?filter[category_name]=country&filter[posts_per_page]=111

For the modern WP scenarios the following function will allow you to give returns great than 99.

add_filter( 'rest_post_collection_params', 'big_json_change_post_per_page', 10, 1 );
function big_json_change_post_per_page( $params ) {
    if ( isset( $params['per_page'] ) ) {
        $params['per_page']['maximum'] = 200;
    }
    return $params;
}
查看更多
相关推荐>>
6楼-- · 2020-02-23 08:40

The bellow approch worked for me. I was able to retrieve posts from a site with 79 246 posts. I used pagination parameters . Within a loop, from 1 to TotalPages available. See the link for doc.

http://mydomain/wp-json/wp/v2/posts?_embed&per_page=100&page=793

per_page = 100 : means 100 posts max to be retrieved per page

page = 793 : means i have 793 pages with 100 posts per page. the last page had only 46 posts

A loop can then be used in a language of your choice.

查看更多
一纸荒年 Trace。
7楼-- · 2020-02-23 08:42

Couldn't get more than 10 with that syntax. Tried http://example.com/wp-json/wp/v2/posts?per_page=100 and worked up to 100.

查看更多
登录 后发表回答