json - 自定义 Wordpress REST API JSON
问题描述
如何修改新的wp-json
REST API 发布数据?
我当前的 json 结构(/wp-json/myspace/v1/get-by-tag/test0/1):
{
"items":{
"posts":[
{
"title":"Stay up-to-date with the one latest tech [cloned]"
}
]
}
}
我只是为了举例而减少了数据......
PHP REST API 初始化和后查询:
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'];
$page = $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 = $query->max_num_pages;
$total = $query->found_posts;
$posts = $query->posts;
$controller = new WP_REST_Posts_Controller('post');
foreach ( $posts as $post ) {
//echo $max_pages;
//echo $page;
$data["items"]["posts"][] = array(
//extra post content goes here
"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;
}
$max_pages = 总页数
$page = 当前页码
如何将这些值推送到我的数组以实现以下 JSON 结构:
{
"items":{
"currentPage":1,
"pageCount":5,
"posts":[
{
"title":"Stay up-to-date with the one latest"
},
{
"title":"Stay up-to-date with the one latest"
}
]
}
}
解决方案
function my_posts() {
$posts_list = get_posts( array( 'type' => 'post' ) );
$post_data = array( "posts" => array());
foreach( $posts_list as $posts) {
$post_id = $posts->ID;
$post_title = $posts->post_title;
$post_data["posts"][] = array(
"id" => $post_id,
"title" => $post_title
);
}
wp_reset_postdata();
return rest_ensure_response( $post_data );
}
推荐阅读
- regex - 在 Vim 中 submatch 命令是如何工作的?
- reactjs - 无法通过浏览器地址行导航以使用路由反应组件
- puppeteer - 如何使用 puppeteer 选择单选按钮
- c# - 统一的相机旋转轴
- haskell - 如何检查树是完整的二叉树
- r - 总结一个数据框结构。行是变量
- ffmpeg - 添加音频时如何在ffmpeg中默认音轨?
- flutter - 当我们在flutter中更改其他文本字段时,如何自动更改标签值?
- python - TypeError:无法使用这些 str 类型的索引器 [2018-12-01] 在 Int64Index 上进行切片索引
- php - 在 PHP 中通过 rest API 获取数据