GET_POST($postID)返回的数据具有与wp-json/wp/v2/post/{postID}不同的密钥

时间:2017-07-28 作者:Shubham Agarwal

WordPress开发人员。我是WordPress和Web开发的新手。到目前为止,WordPress RESTAPI v2运行良好。我正在使用以下函数为我的项目编写一个自定义API/路由/端点。

 get_post($postId);
这里作为响应返回的键主要是ID、post\\u author、post\\u date、post\\u date\\gmt、post\\u content、post\\u title、post\\u摘录、post\\u status、comment\\u status

但是,密钥从http://techdevfan.com/wp-json/wp/v2/posts 与自定义API post对象不同,主要是iddate、date\\u gmt、guid、modified、status、link、title

序列化这两个响应完全没有问题。我只想知道,除了在自定义端点的$post对象中重命名键之外,是否还有其他方法可以解决此问题,以便这两种情况下的键没有歧义。

2 个回复
最合适的回答,由SO网友:Johansson 整理而成

您可以在JSON响应数组中设置自己的密钥。它可以是任何东西。看看这个简单的例子:

add_action( \'rest_api_init\', function () {
    register_rest_route( \'shubham\', \'/get_the_post/\', array(
            \'methods\' => \'GET\', 
            \'callback\' => \'get_posts_by_rest\' 
    ) );
});
// Callback function
function get_posts_by_rest( ){
    // Get the post id from the URL and validate it
    if( isset( $_REQUEST[\'post_id\'] ) && filter_var( $_REQUEST[\'post_id\'] , FILTER_VALIDATE_INT ) ) {
        $id = abs( $_REQUEST[\'post_id\'] );
    } else {
        return __(\'Please enter a post ID.\',\'text-domain\');
    }
    // Fetch the post
    $post = get_post( $id );
    // Check if the post exists
    if( $post ) {
        // Now, form our own array
        $data = array();
        $data[\'id\'] = $post->ID;
        $data[\'date\'] = $post->post_date;
        $data[\'date_gmt\'] = $post->post_date_gmt;
        $data[\'guid\'] = $post->guid;
        $data[\'modified\'] = $post->post_modified 
        $data[\'modified_gmt\'] = $post->post_modified_gmt;
        $data[\'slug\'] = $post->post_name;
        $data[\'status\'] = $post->post_status;
        $data[\'title\'] = $post->post_title;
        $data[\'content\'] = $post->post_content;
        $data[\'excerpt\'] = $post->post_excerpt;
        // Add the rest of your content

        // Return the response
        return $data;
    } else {
        return __(\'Invalid post ID\',\'text-domain\');
    }
}
现在通过访问/wp-json/shubham/get_the_post?post_id=123 您将看到与默认结构相同的结构wp-json/wp/v2/posts 对于ID为123的帖子。

SO网友:Mark Kaplun

除了@jack的回答之外,我还建议如果wordpress core JSON API不完全符合您的需要,就不要使用它。编写自己的端点并不复杂,它可以确保您以完全相同的方式格式化数据,而不会干扰核心API,因为核心API可能有其他客户机希望响应为“vanila”形式。

结束

相关推荐

Php致命错误:无法将WP_REST_RESPONSE类型的对象用作wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php中

我向WordPress添加了一个自定义端点,如下所示: add_action( \'rest_api_init\', function () { register_rest_route( \'menc/v1\', \'/crosscat/(?P[\\w-]+)/(?P[\\w-]+)\', array( \'methods\' => \'GET\', \'callback\' => \'dept_cat_api\',&#x