WP $ post对象可以从主题文件输出为REST-API格式的JSON吗?

时间:2017-02-28 02:50:18

标签: php json wordpress rest wordpress-rest-api

我正在构建一个使用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?

1 个答案:

答案 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>

这种方法的潜在顾虑:

  1. 在某些情况下可能需要使用其他WP_REST_Posts_Controller
  2. 使用WP_REST_Request的空实例可能会产生意想不到的后果。