Wordpress REST API V2 return all posts
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;}
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;}