Wordpress REST API V2返回所有帖子

Wordpress REST API V2返回所有帖子,wordpress,rest,Wordpress,Rest,我缺少通过使用获取所有帖子(或CPT)的功能 example.com/wp-json/wp/v2/country/?per_page=-1 或者任何类似的人。本文档提供了以下信息: 每页:结果集中返回的最大项目数 默认值:10 在大约每页中,我们了解到允许的范围是1到100 在我的情况下,我需要得到的职位数量有限,但大约是200-300个。除了每页获取所有内容并将其缝合在一起之外,是否还有其他解决方法可以将它们全部获取 其他信息(如果有关系):我正在使用angular.js尝试此方法进行分页。

我缺少通过使用获取所有帖子(或CPT)的功能

example.com/wp-json/wp/v2/country/?per_page=-1
或者任何类似的人。本文档提供了以下信息:

每页:结果集中返回的最大项目数

默认值:10

在大约每页中,我们了解到允许的范围是1到100

在我的情况下,我需要得到的职位数量有限,但大约是200-300个。除了每页获取所有内容并将其缝合在一起之外,是否还有其他解决方法可以将它们全部获取


其他信息(如果有关系):我正在使用angular.js

尝试此方法进行分页。它返回我网站上的所有帖子

http://example.com/wp-json/wp/v2/posts/?filter[类别名称]=国家/地区和筛选器[每页发布]=-1

我得到的回报超过100时,输入这样,可以上限为111等。
http://example.com/wp-json/wp/v2/posts/?filter[类别名称]=国家/地区和筛选器[每页发布]=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;
}

使用该语法无法获取超过10个。已尝试
http://example.com/wp-json/wp/v2/posts?per_page=100
和最大值为100。

从WP 4.7开始,您可以通过连接到以下筛选器来增加WP REST API请求的上限:

这段代码应该对帖子起到作用:

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
将立即响应错误(因此钩子没有帮助)。在上面的代码中,我们可以使用
自定义每页
(您可以使用任何其他单词)

分类法的类似过滤器

例如:

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;
}

如果计划使用其他参数执行此操作,还可以添加类别等。例如:

https://www.website.com/wp-json/wp/v2/posts?categories=61&per_page=100

在WordPress4.9.6中,我必须使用


吼叫的方法对我有效。我能够从一个有79246个帖子的站点检索帖子。我用过。在一个循环中,从1到TotalPages可用。请参见文档的链接

http://mydomain/wp-json/wp/v2/posts?_embed&per_page=100&page=793
每页=100:表示每页最多可检索100篇文章

页面=793:意味着我有793页,每页100篇文章。最后一页只有46篇文章


然后,可以用您选择的语言使用循环。

遵守协议的一种更简单的方法是按顺序收集所有响应, 并执行单个setState()调用。如下所示:(为了可读性,省略了错误处理)

componentDidMount(){

var-uri=”http://your-server";
var totalPages=0;
var-allResults=[];
获取(uri)
。然后(响应=>{
totalPages=response.headers.get('X-WP-totalPages');
返回response.json()})
。然后(结果=>{
所有结果=结果;
//log('Got results from server',results.length);
for(设i=2;i{return response.json()})
。然后(更多结果=>{
allResults=allResults.concat(更多结果);
});
}
this.setState({responses:allResults});
});

}

确实有可能获得100多篇文章或术语(标签、类别)。
您应该使用
rest{$this->post\u type}\u查询
hook(用于帖子)或
rest{$this->taxonomy}\u查询
hook(用于术语)。
但您必须知道,
GET
请求中,不可能以大于100的值传递
每页
arg
WP API
将立即抛出错误(钩子不会有帮助):
每页必须介于1(包含)和100(包含)
(具有400 http状态)。
要解决此问题,您应该在另一个
get
参数中为每页传递
值。然后在钩子中跟踪该值。
因此,代码是:

职位 条件 当然,要使其工作,您必须在
GET
请求中传递
s976_每页
(任何值如50099999)参数。


我已经成功地使用了这段“s976_per_page”代码,非常感谢,但它只返回“publish”标记的帖子,…
我如何才能获取所有状态,或者仅获取状态的一组/子集
非常感谢

JMB和javascript为我工作。

根据文档,最多可以得到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 ++;
}
$i=0;
$check\u for\u more=true;
while($check\u了解更多信息){
$offset=$i*100;
$url=network\u site\u url(“/wp json/wp/v2/office?order=asc&orderby=title&per\u page=100&offset={$offset}”);
$offices=json_decode(wp_remote_retrieve_body(wp_remote_get($url));
如有的话(办公室){
如果(计算($办公室)<100){
$check\u for\u more=false;
}
foreach($key=>$office的办公室){
//做你想做的
}
}否则{
$check\u for\u more=false;
}
$i++;
}

有人能确认此语法仍然有效吗?我正在尝试,但没有任何效果。您现在不能,但是/wp json/wp/v2/posts/?filter[category\u name]=country&per\u page=99返回了我的99。不再工作了。有没有办法获得100条以上的信息?如果不写你自己的端点,返回的信息现在被限制在100条以内,否则通过它们分页是你唯一的选择。增加可以检索的帖子数量的代码应该放在哪里?@linuxfan我想最正确的位置应该放在插件目录下,因为这是一个逻辑上的调整,而不是演示(主题)。要使它成为一个插件,你可以遵循以下简单的指南,阅读和实现它不会超过10-20分钟:谢谢@jgangso!这样做的目的不是将允许的上限从100增加到200,而是将200设置为默认限制(而不是10),并允许在
?自定义每页
中传递任何更高的数字。(因为它需要值200和get参数中的较大值
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 });
});
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;
}
$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 ++;
}