【问题标题】:Wordpress API JSON return limitWordpress API JSON 返回限制
【发布时间】:2015-03-20 16:52:53
【问题描述】:

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

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

【问题讨论】:

    标签: json wordpress


    【解决方案1】:

    如果您使用的是 WordPress REST API 的 v2,则当前控制返回结果数量的方法是:

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

    将 100 替换为所需的计数。

    如果您使用的是自定义帖子类型,请将帖子替换为自定义帖子类型。还要确保在配置自定义帖子类型时设置'show_in_rest' => true

    【讨论】:

    • 仅供参考,过去你可以使用任何数字,但现在外部限制是 100,这是 IMO 的糟糕政策。它正在扼杀我们自己的 API 开发计划。
    • 此方法不再适用于最新版本的 API 插件(可能很快成为 WordPress 核心的一部分,不再是插件)。请稍后在此线程中查看我的updated answer
    • 但这仍然限制在 100 个。我想要 5,000 个项目。不要问我为什么。不要告诉我最佳实践,这就是我想要的!
    • 在 WordPress 5.0.3 上仍然像魅力一样工作。谢谢!
    【解决方案2】:

    在查询中添加 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

    【讨论】:

    • 这就是我尝试过的,但没有奏效。它仍在查询所有数据。
    • 这里一样,查询返回所有数据
    【解决方案3】:

    正如另一个人所说: (v2)

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

    但如果你想获得更多下一篇文章 : (paged)

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

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

    【讨论】:

      【解决方案4】:

      我上面的建议不再正确。现在你要使用:

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

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

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

      【讨论】:

        【解决方案5】:

        目前,API 规定了 99 的后期限制返回。所以最大值是website.com/wp-json/wp/v2/posts/?&per_page=99,这表示您似乎可以修改以允许更多帖子。这里有一个讨论:https://github.com/WP-API/WP-API/issues/2914

        【讨论】:

          【解决方案6】:

          你可能会改变:

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

          并在获取网址中添加?per_page=500

          示例:https://domain.pl/wp-json/wp/v2/books?per_page=500

          【讨论】:

          • CPT 是您的自定义帖子类型 slug(例如 rest_books_params)。我没有在 v3 中测试。
          • 我现在在 codex 中找到了这个过滤器 - developer.wordpress.org/reference/hooks/…
          • 正如你所说,这确实是正确的,你只需要在“add_action”中做“add_filter”
          【解决方案7】:

          V2 中的参数是“per_page” - http://v2.wp-api.org/reference/posts/

          【讨论】:

            【解决方案8】:

            我很惊讶没有人提到使用 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; 这会导致一个错误被抛出which you can see here

            你可以在闭包/回调/过滤器中抛出任何逻辑来设置$args['posts_per_page'],但是你愿意。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-08-06
              • 2012-02-11
              • 2016-06-24
              • 1970-01-01
              • 1970-01-01
              • 2015-10-10
              • 1970-01-01
              • 2012-12-14
              相关资源
              最近更新 更多