我错过了通过使用获取所有帖子(或CPT)的功能
example.com/wp-json/wp/v2/country/?per_page=-1
Run Code Online (Sandbox Code Playgroud)
或任何类似的.文档提供了与此相同的信息:
per_page:结果集中要返回的最大项目数.
默认值:10
在关于per_page的另一个问题中,我们了解到允许的范围是1到100.
在我的情况下,我需要获得有限数量的帖子,但它将在200-300左右.除了每页抓取所有页面并将其拼接在一起之外,是否还有其他方法可以解决这些问题?
如果它重要的附加信息:我使用angular.js
Tom*_*ard 10
请尝试使用此选项进行分页.它返回我网站上的所有帖子.
http://example.com/wp-json/wp/v2/posts/?filter[category_name]=country&filter[posts_per_page]=-1
当这样输入时,我得到100以上的回报并且可以将它们限制在111等.
http://example.com/wp-json/wp/v2/posts/?filter[category_name]=country&filter[posts_per_page]=111
对于现代WP场景,以下函数将允许您返回大于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;
}
Run Code Online (Sandbox Code Playgroud)
从WP 4.7开始,您可以通过挂钩以下过滤器来增加WP REST API请求的上限:
rest_{$this->post_type}_collection_params
此代码段应该可以完成发布操作:
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;
}
Run Code Online (Sandbox Code Playgroud)
注意:您不能per_page在请求中使用标准参数(值大于100)- wp api将立即响应错误(因此该钩子无济于事)。这就是上面的代码中所使用的custom_per_page(您可以使用其他任何单词)。
分类法的类似过滤器:rest_{$this->taxonomy}_query
例:
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;
}
Run Code Online (Sandbox Code Playgroud)
波纹管方法对我有用。我能够从一个包含 79 246 个帖子的站点中检索帖子。我使用了分页参数。在一个循环中,从 1 到 TotalPages 可用。请参阅文档的链接。
http://mydomain/wp-json/wp/v2/posts?_embed&per_page=100&page=793
Run Code Online (Sandbox Code Playgroud)
per_page = 100 :表示每页最多可检索 100 个帖子
page = 793 :表示我有 793 页,每页 100 个帖子。最后一页只有 46 个帖子
然后可以在您选择的语言中使用循环。
符合协议的一种更简单的方法是按顺序收集所有响应,并执行单个 setState()调用。如下:(为了可读性省略了错误处理)
componentDidMount() {
var uri = "http://your-server";
var totalPages = 0;
var allResults = [];
fetch(uri)
.then(response => {
totalPages = response.headers.get('X-WP-TotalPages');
return response.json()})
.then(results => {
allResults = results;
//console.log('Got results from server', results.length);
for (let i = 2; i <= totalPages ; i++){
fetch(uri + "?page=" + i)
.then(response => {return response.json()})
.then( moreresults => {
allResults = allResults.concat( moreresults );
});
}
this.setState({responses: allResults });
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27032 次 |
| 最近记录: |