匹配来自自定义端点的REST API POST输出

时间:2017-01-23 作者:joemaller

WHA.T F我LTERs W我LL TRA.NsFoRM A. NoRMA.L WP_PosT oBJECT (A.s RETURNED FRoM GET_PosTs()) To MA.TCH THE PosT oBJECTs RETURNED FRoM NA.T我五、E REsT A.P我 ENDPo我NTs?

&#十、A.;&#十、A.;

我 HA.五、E A. CUsToM ENDPo我NT WH我CH RETURNs A. WP_PosT oBJECT, BUT REsT_ENsURE_REsPoNsE JUsT RETURNs A. s我MPLE JsON DUMP oF THE PosT:

&#十、A.;&#十、A.;
FUNCT我oN ENDPo我NT() {&#十、A.;    $P = GET_PosTs([\'我NCLUDE\' => 1.0]);&#十、A.;    RETURN REsT_ENsURE_REsPoNsE($P);&#十、A.;}&#十、A.;
&#十、A.;&#十、A.;&#十、A.;&#十、A.;
//  WP-JsoN/CUsToM/五、1./E十、A.MPLE&#十、A.;[{ “”我D“”: 1.0, “”PosT_DA.TE“”: “”2.01.7.-01.-2.3. 1.6.:1.5.:1.3.“”, “”PosT_CoNTENT“”: “”<P>...“” }] &#十、A.;
&#十、A.;&#十、A.;

RETURN我NG THE sA.ME PosT NA.T我五、ELY FRoM THE REsT A.P我 REMA.Ps THE DA.TA. To soMETH我NG L我KE TH我s (KEYs A.RE LoWERCA.sE, DA.TEs A.RE NoRMA.L我ZED, CoNTENT 我s RENDERED):

&#十、A.;&#十、A.;&#十、A.;&#十、A.;
// WP-JsoN/WP/五、2./PosTs/1.0&#十、A.;[{ “”我D“”: 1.0, “”DA.TE“”: “”2.01.7.-01.-2.3.T1.6.:1.5.:1.3.“”, “”CoNTENT“”: {“”RENDERED“”: “”<P>...“”}}]&#十、A.;
&#十、A.;&#十、A.;

HoW CA.N 我 MA.KE THE PosTs FRoM MY CUsToM ENDPo我NT MA.TCH THosE FRoM NA.T我五、E ENDPo我NTs? CLEA.RLY THE FUNCT我oNs/F我LTERs E十、我sT, MA.NUA.LLY RECREA.T我NG THEM WoULD BE s我LLY.

&#十、A.;

1 个回复
SO网友:joemaller

这个prepare_item_for_response 的方法WP_REST_Posts_Controller 类“为响应准备单个post输出”,方法是将post对象的每个属性转换为REST API的输出。该方法不是静态运行的,因此我们需要在端点中实例化一个控制器。

下面是一个简单的端点示例:

function endpoint( $request ) {
    $p = get_post( $request[\'id\'] );
    $postController = new \\WP_REST_Posts_Controller($p->post_type);
    $response = $postController->prepare_item_for_response( $p, $request );
    return rest_ensure_response( $response );
}
生成的JSON响应与从本机端点返回的响应相同。

请注意prepare_item_for_response 仅处理单数WP_Post 对象,一组帖子需要将其应用于每个项目。

也可以使用WP_REST_Posts_Controller->get_item 方法它想从请求中提取帖子id,但看起来可能是伪造的。

相关推荐

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