WP_REST_REQUEST: 如何在请求参数中添加“_embed”

WP_REST_REQUEST: how to add "_embed" to request parameters

我将此功能添加到我的 wordpress REST API 以拥有自定义端点

function getSettimanaEventi(){
$request = new WP_REST_Request( 'GET', '/wp/v2/tribe_events' );
$request['_embed'] = '1';
$request['filter[meta_query][0][key]'] = '_EventStartDate';
$request['filter[meta_query][0][value][0]'] = '2017-07-03 00:00:00';
$request['filter[meta_query][0][value][1]'] = '2017-07-09 00:00:00';
$request['filter[meta_query][0][compare]'] = 'BETWEEN';
$request['filter[meta_query][0][type]'] = 'DATE';


$response = rest_do_request( $request );
return $response;

我收到了回复,但没有嵌入的内容。

我知道以“_”开头的参数是私有的,但我需要嵌入内容。 我该怎么办?

我发现的唯一方法是将“_embed”参数添加到 url(例如当您从 Postman 调用它时)并从请求参数中删除它

(更新 - 这似乎不起作用。如果我弄明白了,我会更新。)

你必须像这样在超级全局中设置它:

function getSettimanaEventi () {
  // Set super global to simulate request param
  $_GET['_embed'] = 1;
  $request = new WP_REST_Request( 'GET', '/wp/v2/tribe_events' );
  $request['filter[meta_query][0][key]'] = '_EventStartDate';
  $request['filter[meta_query][0][value][0]'] = '2017-07-03 00:00:00';
  $request['filter[meta_query][0][value][1]'] = '2017-07-09 00:00:00';
  $request['filter[meta_query][0][compare]'] = 'BETWEEN';
  $request['filter[meta_query][0][type]'] = 'DATE';
  $response = rest_do_request( $request );
  // cleanup after
  unset($_GET['_embed']);
  return $response;
}

我在 WP-API 的这张票中找到了这个信息: https://github.com/WP-API/WP-API/issues/2857

这非常适合我

global $wp_rest_server;
$request = new WP_Rest_Request('GET', '/wp/v2/posts');
$response = rest_do_request($request);
$response = $wp_rest_server->response_to_data($response, true);