WordPress自定义REST端点浏览器可访问但WP_REST_Request返回404
问题原因
- 内部调用
WP_REST_Request不需要携带/wp-json前缀:这个前缀是WordPress给外部HTTP访问REST接口用的统一入口前缀,内部路由匹配直接用你注册时的命名空间+路由路径即可。 - 路由匹配要求路径完全一致:你注册的路由是
/infos/(末尾带斜杠),调用时路径末尾也要带斜杠才能正确匹配。
修复方案
把你发起请求的代码中,实例化WP_REST_Request的第二个参数修改即可,修正后完整代码:
<?php // 去掉/wp-json前缀,末尾加上斜杠和注册的路由保持一致 $request = new WP_REST_Request( 'GET', '/pluginrifa/v2/infos/' ); $request->set_query_params( [ 'rifa' => 140 ] ); $response = rest_do_request( $request ); $server = rest_get_server(); $data = $server->response_to_data( $response, false ); $json = wp_json_encode( $data ); $obj = json_decode($json);
其他排查项
如果修改后还是报错,可以检查两个场景:
- 调用
rest_do_request的时机必须晚于rest_api_init钩子执行:如果你的请求代码直接写在插件加载初期、或者主题functions.php的顶层作用域,此时自定义路由还没注册,就会报路由不存在,你可以把请求逻辑放到init或更晚的钩子中执行。 - 清空站点的路由缓存、对象缓存后再测试。
内容的提问来源于stack exchange,提问作者Diogenes Oliveira Junior
相关产品推荐
相关产品推荐

