我正在构建一个使用Backbone.js
作为CMS的WordPress
网站。 Backbone
应用程序配置为使用WP REST API中的JSON。我想通过从WP主题输出JSON来为初始页面加载引导帖子JSON。我能够做的就是这样:
$postsJSON = [];
$restResponse = new WP_REST_Response();
$restRequest = new WP_REST_Request();
while (have_posts()) { the_post();
$postsJSON[] = apply_filters('rest_prepare_post', $restResponse, $post, $restRequest);
}
echo "<script type='application/json'>[" . join(",", $postsJSON) . "</script>";
但是这段代码不起作用。我只是得到一个空的WP_REST_Response
。有没有更简单的方法将$post
对象转换为REST-API格式的JSON?
答案 0 :(得分:0)
我想出了这个。这种方法仍有改进的余地,但现在它对我来说运作得很好:
<?php
$postsJSON = [];
$restControllers = [];
$restRequest = new WP_REST_Request();
while (have_posts()) { the_post();
if (!isset($restControllers[$post->post_type])) {
$restControllers[$post->post_type] = new WP_REST_Posts_Controller($post->post_type);
}
$preparedPost = $restControllers[$post->post_type]->prepare_item_for_response($post, $restRequest);
$postsJSON[] = json_encode($preparedPost->data);
}
?>
<script id="data-posts" type="application/json">
[<?php echo join(",", $postsJSON); ?>]
</script>
这种方法的潜在顾虑:
WP_REST_Posts_Controller
。WP_REST_Request
的空实例可能会产生意想不到的后果。