【问题标题】:Output JSON for WordPress postsWordPress 帖子的输出 JSON
【发布时间】:2017-03-03 06:16:59
【问题描述】:

我正在为 WordPress 使用 JSON-API 插件,并且我正在创建一个自定义控制器,该控制器从帖子类型返回帖子列表。我想要的输出是这样的:

[{
    "id": 1,
    "title": "Sample Post Title"
},
{
    "id": 2,
    "title": "Sample Post Title"
},
....
]

这是我的自定义控制器:

class JSON_API_Custom_Controller {

 public function get_posts_type() {
    global $json_api;

    $posts_all     = array();

    $args = array( 'post_type' => 'shopping', 'posts_per_page' => -1);
    $loop = new WP_Query( $args );
    if ( $loop->have_posts() ) {
      while ( $loop->have_posts() ) : $loop->the_post();
        $post_id = get_the_ID();
        $post_title = get_the_title($post_id);

        $posts_all []= array(
         'id' => $post_id,
         'title' => $post_title
        );

      endwhile;
    }

   return $posts_all;

  }

}

但输出是:

{  
   "status":"ok",
   "0":{  
      "id":1,
      "title":"sample title"
   },
   "1":{  
      "id":2,
      "title":"sample title"
   }
}

我怎样才能像期望的输出一样输出对象的 json 数组?

【问题讨论】:

  • 哇,好像投反对票的家伙在这里毫无理由地投反对票!

标签: php json wordpress


【解决方案1】:

我想在 json 响应中添加 status:ok 是插件的一个功能。

所以,你可以修改你的函数以一键返回一个数组:

// not this 
//return $posts_all;

// but this
return array('posts' => $posts_all);

之后,您的 json 响应中仍然会有 status 键,但您也会有 posts 键,您可以对其进行迭代。

更新: 我想,过滤器json_api_encode 可能会对您有所帮助。您可以在此处取消设置status 键:

add_filter('json_api_encode', 'remove_status');

function remove_status($response) {
    unset($response['status']);

    return $response;
}

【讨论】:

  • api 实际上返回了编码的 json,我只需要确保它的格式正确。无论如何我可以删除ok 和posts 吗?
  • awesome :) 感谢您阅读文档以找到问题的解决方案。不知道为什么有人对问题和所有答案投了反对票,但我将回复标记为答案:)
【解决方案2】:

希望下面的代码能为您做到这一点。

 return json_encode($posts_all);

要获得示例输出中的“状态”,您需要在代码中添加相同的内容。

【讨论】:

  • 这个api实际上返回的是编码后的json,这个没必要
  • Rain,请过一遍代码,希望你能明白我想告诉你的,123,'post_title'= >'测试'); $arr[1]=array('id'=>124,'post_title'=>'test1');回声 json_encode($arr); ?>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-04
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
  • 1970-01-01
相关资源
最近更新 更多