【问题标题】:How to apply pagination for custom endpoint request in wordpress?如何在 wordpress 中为自定义端点请求应用分页?
【发布时间】:2021-05-17 11:12:53
【问题描述】:

我在 WordPress 中创建了一个自定义的 RESTful API 端点,它返回带有唯一必填字段的 JSON。

所以当我访问 example.com/wp-json/wl/posts 时,它会返回 5 个帖子,因为我限制了帖子的数量。

function wl_posts() {
    $args = [
        'numberposts' => 99999,
        'post_type' => 'post'
    ];

    $posts = get_posts($args);

    $data = [];
    $i = 0;

    foreach($posts as $post) {
        $data[$i]['id'] = $post->ID;
        $data[$i]['title'] = $post->post_title;
        $data[$i]['content'] = $post->post_content;
        $data[$i]['slug'] = $post->post_name;
        $data[$i]['featured_image']['thumbnail'] = get_the_post_thumbnail_url($post->ID, 'thumbnail');
        
        $i++;
    }

    return $data;
}


add_action('rest_api_init', function() {
    register_rest_route('wl/v1', 'posts', [
        'methods' => 'GET',
        'callback' => 'wl_posts',
    ]);

});

但我还想添加分页,所以如果我添加 ?page=2 ,它应该会返回另外 5 个帖子。

如何存档?

【问题讨论】:

    标签: json wordpress api rest


    【解决方案1】:

    访问/?rest_route=//wp-json/wp/v2/pages 时,您可以深入了解 ie。 wp/v2/pages/endpoints/0/args 然后检查 pageper_page

    curl http://YOUR-SITE/wp-json/wl/v1/posts/?per_page=1&page=2
    

    发布参数供参考

    我们可以将这些定义和发布为参数。这不是必需的,但它们现在与帖子和页面一致

    add_action('rest_api_init', function() {
      register_rest_route('wl/v1', 'posts', [
        'methods' => 'GET',
        'callback' => 'wl_posts',
        'args' => [
          'page' => [
            'description' => 'Current page',
            'type' => "integer",
          ],
          'per_page' => [
            'description' => 'Items per page',
            'type' => "integer",
          ]
        ],
      ]);
    });
    

    获取参数

    由于get_posts 有自己的逻辑,它最终使用WP_Query,让我们使用WP_Query 更好。

    function wl_posts() {
      $args = [];
    
      if (isset($_REQUEST['per_page'])) {
        $args['posts_per_page'] = (int) $_REQUEST['per_page'];
      }
      if (isset($_REQUEST['page'])) {
        $args['page'] = (int) $_REQUEST['page'];
      }
    
      $args['post_type'] = 'post';
    
      $get_posts = new WP_Query;
      $posts= $get_posts->query( $args );
    
      $data = [];
      $i = 0;
    
      foreach($posts as $post) {
        $data[$i]['id'] = $post->ID;
        $data[$i]['title'] = $post->post_title;
        $data[$i]['content'] = $post->post_content;
        $data[$i]['slug'] = $post->post_name;
        $data[$i]['featured_image']['thumbnail'] = 
          get_the_post_thumbnail_url($post->ID, 'thumbnail');
    
        $i++;
      }
    
      return $data;
    }
    

    【讨论】:

    • 谢谢@Clemens_Tolboom,但是从自定义表(而不是 wp 帖子)获取数据呢?
    猜你喜欢
    • 2020-08-24
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 2021-12-30
    • 2015-09-21
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    相关资源
    最近更新 更多