如何修改自定义WordPress REST API返回结构,加入分页字段实现目标JSON
修改方案
你只需要调整myspace_get_posts_by_tag函数中返回数据的组装逻辑,将已有的分页参数插入数组即可,修改后的完整代码如下:
add_action( 'rest_api_init', function () { register_rest_route( 'myspace/v1/', 'get-by-tag/(?P<slug>[a-z0-9]+(?:-[a-z0-9]+)*)/(?P<page>[1-9]{1,2})', array( 'methods' => WP_REST_Server::READABLE, 'callback' => 'myspace_get_posts_by_tag', 'args' => array( 'slug' => array( 'required' => true ), 'page' => array( 'required' => true ), ) )); }); function myspace_get_posts_by_tag(WP_REST_Request $request) { $slug = $request['slug']; // 转成整型,保证JSON输出为数字格式 $page = (int)$request['page']; $term = get_term_by('slug', $slug, 'post_tag'); $posts_per_page = 1; $args = array( 'tag__in' => $term->term_id, 'posts_per_page' => $posts_per_page, 'paged' => $page, 'orderby' => 'date', 'order' => 'desc', ); $query = new WP_Query( $args ); $max_pages = (int)$query->max_num_pages; $total = $query->found_posts; $posts = $query->posts; $controller = new WP_REST_Posts_Controller('post'); // 提前初始化返回结构,避免无查询结果时字段缺失 $data = [ 'items' => [ 'currentPage' => $page, 'pageCount' => $max_pages, 'posts' => [] ] ]; foreach ( $posts as $post ) { $data["items"]["posts"][] = array( // 其他自定义字段可继续在此处扩展 "title" => $post->post_title ); } $response = new WP_REST_Response($data, 200); $response->header( 'X-WP-Total', $total ); $response->header( 'X-WP-TotalPages', $max_pages ); return $response; }
修改后返回的JSON结构完全符合你的需求,同时兼容无查询结果的边界场景。
内容的提问来源于stack exchange,提问作者la_petite_kozel
相关产品推荐
相关产品推荐

