WordPress API JSON返回限制

ih99xse1  于 2023-02-14  发布在  WordPress
关注(0)|答案(9)|浏览(131)

这是一个关于WordPress API /wp-json的简单问题。我正在查询WordPress中某个类别过滤的一些数据。我的问题是我如何控制从我的获取请求返回的结果数量...默认返回似乎返回大约11个最近的结果。有什么方法可以让它只返回1(最近),或者像100个帖子。我可以返回的最小和最大金额是多少?它的语法是什么?这是我的默认请求:

http://thisismywebsitewherewordpresslives.com/wp-json/posts?fiter[category_name]=Some Category Name I want to query&filter[order]=ASC
kx1ctssn

kx1ctssn1#

如果您使用的是WordPress REST API的v2版本,那么当前控制返回结果数量的方法似乎是:

website.com/wp-json/wp/v2/posts/?per_page=100

将100替换为所需的计数。
如果你使用的是自定义帖子类型,请用自定义帖子类型替换帖子。另外,在配置自定义帖子类型时,请确保设置'show_in_rest' => true

jc3wubiy

jc3wubiy2#

将filter[posts_per_page]参数添加到查询中,以限制API返回的结果数量。

http://thisismywebsitewherewordpresslives.com/wp-json/posts?filter[posts_per_page]=2&fiter[category_name]=Some Category Name I want to query&filter[order]=ASC

上述查询应仅返回2个结果。查询参数列表显示在https://github.com/WP-API/WP-API/blob/master/docs/routes/routes.md#retrieve-posts

q1qsirdb

q1qsirdb3#

正如另一个人所说:v2

http://example.com/wp-json/wp/v2/posts?per_page=10

但是如果你想获得更多的下一个职位:(* 页码 *)

http://example.com/wp-json/wp/v2/posts?per_page=10&page=2

文档:http://v2.wp-api.org/reference/posts/(滚动到列出帖子

6jjcrrmo

6jjcrrmo4#

我上面的建议不再正确。现在您需要用途:

website.com/wp-json/wp/v2/posts/?filter[posts_per_page]=100

更改数字以检索更多或更少的帖子。如有必要,将“帖子”更改为您的自定义帖子类型,并确保在注册自定义帖子类型时设置'show_in_rest' => true

**注意:**在插件的早期测试版本(2.0-beta13.1)中,posts_per_page的值设置为-1,但在最新版本中似乎不起作用。现在看来,您必须在端点中定义一个值。

0h4hbjxa

0h4hbjxa5#

目前API强制返回99个帖子的限制。所以最大值是website.com/wp-json/wp/v2/posts/?&per_page=99,也就是说,看起来你可以修改以允许更多的帖子。这里有一个关于这个的讨论:https://github.com/WP-API/WP-API/issues/2914

gev0vcfq

gev0vcfq6#

您可以更改:

add_action( 'rest_YOUR_CPT_params', function($params){
    if ( isset( $params ) AND isset( $params[ 'per_page' ] ) ) {
        $params[ 'per_page' ][ 'maximum' ] = 500;
    }
    return $params;
});

在获取url中添加?per_page=500
示例:https://domain.pl/wp-json/wp/v2/books?per_page=500

eanckbw9

eanckbw98#

我很惊讶没有人提到使用WordPress为这种情况创建的本地过滤器。
我能够在默认情况下返回所需数量的帖子,同时仍然允许$_GET['per_page']参数像这样工作:

/**
 * Default to all posts being returned rather than the default 10 posts per
 * page. Also, do not get in the way of the native $_GET['per_page'] setting.
 * @param {int} $newDefault  The new default amount of posts to return per paginated page
 * @var {void}
 */
function setRestApiPostsPerPage($newDefault) {
    foreach (get_post_types() as $i => $postType) {
        add_filter( "rest_{$postType}_query", function ($args, $request) {
            if (! isset($_GET['per_page'])) {
                // new default to overwrite the default 10
                $args['posts_per_page'] = $newDefault; 
            }

            return $args;
        }, 15, 2);
    }
}

我确实发现你不能设置$args['posts_per_page'] = -1;,这会导致一个错误被抛出 *,你可以在这里看到 *。
您可以在闭包/回调/过滤器中抛出任何逻辑来设置$args['posts_per_page']

7fyelxc5

7fyelxc59#

在提到亚伦Nusselbaum回答,但纠正了几件事:

  • add_filter而不是add_action
  • 筛选器名称必须包含其他“_collection”,因此“rest_YOUR_CPT_collection_params”

例如:

add_filter( 'rest_comment_collection_params', function($params){
    if ( isset( $params ) AND isset( $params[ 'per_page' ] ) ) {
        $params[ 'per_page' ][ 'maximum' ] = 500;
    }
    return $params;
});

相关问题