2017-03-03 64 views
-1

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

[{ 
    "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数组像所需的输出?

+0

哇似乎下来投票人在这里下来投票没有理由的一切! –

回答

-1

我想加入status:ok来json响应是插件的一个特性。

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

// 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; 
} 
+0

api实际上会返回编码的json,我只需确保它是以正确的格式。无论如何,我可以删除'ok'和'posts'吗? –

+1

阅读手册后,我似乎找到了一种方法。查看更新。 –

+0

真棒:)感谢您通过文档查找问题的解决方案。不知道为什么有人倒投了这个问题和所有的答案,但我标记的答案作为答案:) –

-1

希望以下代码可以为您做到这一点。

return json_encode($posts_all); 

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

+0

该API实际上返回编码的JSON,没有必要为此 –

+0

雨,请通过代码,希望你可以理解我想告诉你什么, <?php $ arr [0] = array('id'=> 123,'post_title'=>'test'); $ arr [1] = array('id'=> 124,'post_title'=>'test1'); echo json_encode($ arr); ?> – Tristup