json - 如何在 wordpress 中为自定义端点请求应用分页?
问题描述
我在 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 个帖子。
那怎么存档?
解决方案
访问时/?rest_route=/
,/wp-json/wp/v2/pages
您也可以深入了解 ie。wp/v2/pages/endpoints/0/args
然后检查page
和per_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",
]
],
]);
});
获取参数
Asget_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;
}
推荐阅读
- swift - 使用 CAShapeLayer() 和 UIBezierPath 快速绘制和调整圆
- python - Python:在将矩阵转换为 JPG 格式之前确定矩阵的大小
- sql - 如何组合三个查询?
- java - 磁盘读取操作执行很慢 | Java 流
- rabbitmq - Spring AMQP - MessageListenerAdapter - 传递附加参数
- asp.net-core - 同一订阅者的 Azure 服务总线多个实例
- javascript - 获取 flexbox 定位元素的左侧和顶部
- android - 带有 Crosswalk 的 Ionic 应用程序编译、安装但无法打开
- r - 基于多个变量过滤数据
- c - 查找字符串中数字(0-9)的频率