在WordPress中,对于默认请求,您无法超过每个请求100篇帖子的限制。仍然检索所有帖子的一种方法是查询该接口,直到您拥有所有帖子。另一个是自定义端点。
如果可以,我建议您创建自己的REST端点。这将已经起作用并返回所有帖子
add_action(\'rest_api_init\', \'my_more_posts\');
function my_more_posts() {
register_rest_route(\'myplugin/v1\', \'/myposts\', array(
\'methods\' => \'GET\',
\'callback\' => \'my_more_posts_callback\',
));
}
function my_more_posts_callback( WP_REST_Request $request ) {
$args = array(
\'posts_per_page\' => -1,
);
return get_posts($args);
}
有关的详细信息
creating your own endpoint can be found here, 鉴于
arguments of get_posts()
are explained here.
对于前端的纯JavaScript解决方案,您可以使用x-wp-totalpages
页眉,指示总页数。除非到达此页面,否则我们知道需要再次查询。这样一个基本的递归版本可以工作:
var allPosts = [];
function retrievePosts(opt) {
if (typeof opt === \'undefined\')
opt = {};
var options = $.extend({
per_page: 100,
page: 1
}, opt);
var url = \'https://example.com/wp-json/wp/v2/posts\';
var uri = url + \'?per_page=\' + options.per_page + \'&page=\' + options.page;
$.getJSON(uri, function(data, status, jqXHR) {
var totalpages = jqXHR.getResponseHeader(\'x-wp-totalpages\');
allPosts = allPosts.concat( data );
// here the magic happens
// if we are not done
if (options.page < totalpages) {
// request again, but for the next page
retrievePosts({
per_page: options.per_page,
page: options.page + 1
});
} else {
// WE ARE DONE
// posts are in allPosts
}
});
};
retrievePosts();