增加WordPress REST API的页面大小

时间:2017-07-07 作者:robbintt

客户端将WordPress REST JSON API与一些WordPress数据模型一起使用。我们需要从前端访问WordPress API并检索几百篇自定义帖子。

Wordpress有一个hard limit of 100 custom posts.

对于这个用例,我想将这个限制更改为一个更高的数字。我读到你不能在PHP中使用monkey补丁。

有没有办法调整per_page->maximum 价值,比如说,10000?

3 个回复
SO网友:kero

在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();

SO网友:Nabil Freeman

这在2020年仍然是一个问题,所以我只是在我们的服务器上编辑了Wordpress源代码。

https://core.trac.wordpress.org/browser/trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-controller.php

如果您搜索;100英寸;您可以轻松找到配置。我把我的换成了500。

我认为Wordpress是对的,这可能会导致前端速度问题,但对于我们这些运行Wordpress作为无头CMS来呈现另一个应用程序(在我们的例子中是静态站点)的人来说,这真的很烦人,你无法轻松编辑它。

SO网友:Jake Gillikin

有一个钩子可以操纵每页的最大值。钩子名称的动态部分$post\\U type表示post类型slug

function increase_per_page_max($params){
    $params[\'per_page\'][\'maximum\'] = 1000;
    return $params;
}

add_filter(\'rest_{$post_type}_collection_params\', \'increase_per_page_max\');
贷记至https://wildwolf.name/how-to-increase-per_page-limit-in-wordpress-rest-api/

结束

相关推荐

如何将json数据发送到jQuery

我有一个问题,我想发送一些数组到jquery,一旦有人点击了特定的元素,我可以看到我不能向任何输入添加数组,所以我决定用json编码数组。但我被困在那里,因为我无法从jquery的输入字段中获取json数据。我使用字段类名在jquery中获取json数据。请有人帮忙,因为我正在构建一个WP短代码,我想将所有属性发送到jquery。提前感谢