以REST API结果形式表示的WP_QUERY结果

时间:2018-01-17 作者:Janiis

这是一个简单的posts结果数组。

$query = new WP_Query( array( \'post_type\' => \'post\' ) );
$posts = $query->posts; // returns simple array of data
有没有办法从wp-json/wp/v2/posts/获取结果_嵌入而不向服务器发出额外请求以提取json,然后解码到php数组?

寻找类似的东西:

$posts = $query->rest_posts(); // for example ??

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

我认为我们可以通过以下方式简化:

$request  = new WP_REST_Request( \'GET\', \'/wp/v2/posts\' );
$response = rest_do_request( $request );
$data     = rest_get_server()->response_to_data( $response, true );
通过使用rest_do_request().

SO网友:Janiis

在深入研究源代码之后,最终得到了这个解决方案。对我有用,也可能对其他人有用。

function get_rest_items_query($post_type, $posts_per_page, $orderby = \'date\', $order = \'desc\') {

    $result = array();
    $args = array( \'post_type\' => $post_type, \'posts_per_page\' => $posts_per_page, \'orderby\' => $orderby, \'order\' => $order );
    $posts = get_posts($args);

    $ids = implode(\',\', wp_list_pluck($posts, \'ID\'));

    // request
    $restRequest = new WP_REST_Request(\'GET\', \'/wp/v2/\' . $post_type  );
    $restRequest->set_param(\'include\', $ids);
    // response
    $response = rest_do_request( $restRequest );
    // _embed
    $rest = rest_get_server()->response_to_data( $response, true );

    $result[\'posts\'] = $rest;

    return $result;
}

结束

相关推荐

向WP-JSON Root的响应添加数据

wp json/处的默认内容包含名称、描述、url等,但我想在此根级别添加一些其他内容。我看到了许多修改对象类型项目响应的方法,但我缺少如何修改主索引。似乎我想修改get_index wp的功能包括/rest-api/class-wp-rest-server。但是我不知道如何过滤/钩住它。