我错过了使用
获取所有帖子(或CPT)的功能example.com/wp-json/wp/v2/country/?per_page=-1
或任何类似的。文档提供了与此相同的信息:
per_page:结果集中要返回的最大项目数。
默认值:10
在关于per_page的another question中,我们了解到允许的范围是1到100。
在我的情况下,我需要获得的帖子数量有限,但它将在200-300左右。除了每页抓取所有页面并将其拼接在一起之外,是否有任何变通方法可以获得它们?
附加信息是否重要:我正在使用angular.js
答案 0 :(得分:6)
尝试使用此选项进行分页。它会返回我网站上的所有帖子。
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;
}
答案 1 :(得分:5)
从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;
}
注意:您不能在请求中使用标准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;
}
答案 2 :(得分:4)
使用该语法无法获得超过10个。尝试了http://example.com/wp-json/wp/v2/posts?per_page=100
并且努力达到了100个。
答案 3 :(得分:2)
波纹管方法为我工作。我能够从具有79 246个帖子的站点检索帖子。我使用了pagination parameters。在一个循环中,从1到TotalPages可用。请参阅文档链接。
http://mydomain/wp-json/wp/v2/posts?_embed&per_page=100&page=793
每页 = 100:表示每页最多可检索100个帖子
页面 = 793:意味着我有793页,每页100个帖子。最后一页只有46个帖子
然后可以使用您选择的语言来使用循环。
答案 4 :(得分:1)
This solution和javascript对我有用。
答案 5 :(得分:0)
如果您计划使用其他参数执行此操作,您也可以添加类别等。 EG:
https://www.website.com/wp-json/wp/v2/posts?categories=61&per_page=100
答案 6 :(得分:0)
在WordPress 4.9.6中,我不得不使用rest_{$this->post_type}_query
/* change amount of posts returned by REST API to 100 */
function rest_posts_per_page( $args, $request ) {
$max = max( (int)$request->get_param( 'per_page' ), 100 );
$args['posts_per_page'] = $max;
return $args;
}
add_filter( 'rest_post_query', 'rest_posts_per_page', 10, 2 );
答案 7 :(得分:0)
一种更简单的符合协议的方法是依次收集所有个响应, 并执行 single 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 });
});
}
答案 8 :(得分:0)
真的有可能获得100多个帖子或术语(标签,类别)。
您应该使用rest_{$this->post_type}_query
钩子(用于帖子)或rest_{$this->taxonomy}_query
钩子作为术语。
但是您必须知道,不可能在您的per_page
请求中传递GET
arg值超过100的参数。 WP API
将立即引发错误(该钩子无济于事):per_page must be between 1 (inclusive) and 100 (inclusive)
(具有400个http状态)。
要解决此问题,您应该在另一个per page
参数中传递一个get
值。然后在您的钩子中跟踪此值。
所以代码是:
add_filter( 'rest_post_query', 's976_rest_post_per_page', 2, 10 );
function s976_rest_post_per_page( array $args, WP_REST_Request $request ) {
$post_per_page = $request->get_param('s976_per_page') ? $request->get_param('s976_per_page') : 10;
$args['posts_per_page'] = $post_per_page;
return $args;
}
add_filter( 'rest_category_query', 's976_rest_cats_per_page', 2, 10 );
function s976_rest_cats_per_page( array $prepared_args, WP_REST_Request $request ){
$cats_per_page = $request->get_param('s976_per_page') ? $request->get_param('s976_per_page') : 10;
$prepared_args['number'] = $cats_per_page;
return $prepared_args;
}
当然,要使此方法有效,您必须在s976_per_page
请求中传递GET
参数(具有500、99999等值)。
答案 9 :(得分:0)
非常感谢,我一直在成功使用此's976_per_page'代码,但是它只返回带有'publish'标签的帖子,..
如何获取所有状态,或者只能获取状态的一组/子集
非常感谢
JMB
答案 10 :(得分:0)
根据文档,最多可以获取 100 个。如果您想要更多,请使用偏移量和多个请求。示例:
$i = 0;
$check_for_more = true;
while ( $check_for_more ) {
$offset = $i * 100;
$url = network_site_url( "/wp-json/wp/v2/office?order=asc&orderby=title&per_page=100&offset={$offset}" );
$offices = json_decode( wp_remote_retrieve_body( wp_remote_get( $url ) ) );
if ( $offices ) {
if ( count( $offices ) < 100 ) {
$check_for_more = false;
}
foreach ( $offices as $key => $office ) {
// Do what you want
}
} else {
$check_for_more = false;
}
$i ++;
}
答案 11 :(得分:0)
我希望这会有所帮助,我正在使用 axios 但其他的也是一样的
private fun saveImage(bitmap: Bitmap, name: String) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val resolver = contentResolver
val contentValues = ContentValues()
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, name)
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/png")
contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, "DCIM/" + "YOUR_FOLDER")
val imageUri =
resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)
val fos = resolver.openOutputStream(imageUri!!)
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos)
fos!!.flush()
fos.close()
toast("Saved to gallery")
} else {
if (isPermissionGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
val imagesDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DCIM
).toString() + File.separator + "YOUR_FOLDER"
if (!file.exists()) {
file.mkdir()
}
val image = File(imagesDir, "$name.png")
val fos = FileOutputStream(image)
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos)
fos.flush()
fos.close()
} else {
// ask for permission
}
}
}