对REST端点的请求在浏览器和cURL中运行良好,但在WP_REST_REQUEST中失败

时间:2018-12-06 作者:vlasits

我正在运行WordPress 4.9.8,带有Genesis主题(可能不相关,但…)。我希望在构建页面时(而不是通过AJAX调用调用API)将一些从REST API直接拉入的JSON写入脚本标记,以提高snappier性能。

幸运的是,WP为这种情况提供了WP\\U REST\\U请求。所以我写了一些代码如下:

功能。php

add_action(\'wp_head\', \'write_json_to_script_tag\');
function write_json_to_script_tag(){
    $request = new WP_REST_Request( \'GET\', \'/wp-json/wp/v2/pages/499/\');
    $response = rest_do_request( $request );
    var_dump($response);
    $server = rest_get_server();
    $data = $server->response_to_data( $response, false );
    $json = wp_json_encode( $data );
    echo \'<script type="text/javascript"> var the_json = \' . $json . \'</script>\';
}
当我击中https://example.com/wp-json/wp/v2/pages/499 在浏览器中,它生成的正是我所期望的json。当我卷曲这个url时,我得到了相同的结果。但我的服务器代码返回{代码:“rest\\u no\\u route”,消息:“找不到与URL和请求方法匹配的路由”,…..}

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

路线不应包括/wp-json 零件,并且不应该有尾部斜杠(/) 最后:

错误:/wp-json/wp/v2/pages/499/

正确:/wp/v2/pages/499

因此:

$request = new WP_REST_Request( \'GET\', \'/wp/v2/pages/499\' );