我试图在我的自定义插件中检索响应,这是基于另一个插件提供的REST路由。
在主题函数文件的根作用域中运行以下代码块时,我得到了一个成功的响应,并得到了预期的结果。
$request = new WP_REST_Request(\'GET\', \'/another/plugins/rest/route\');
$request->set_query_params([
\'filterBy\' => [
\'url\' => \'/test/\'
]
]);
$response = rest_do_request($request);
但是,当在我的自定义插件文件的根范围内运行上面的代码块时,我得到以下响应:
Array
(
[code] => rest_no_route
[message] => No route was found matching the URL and request method
[data] => Array
(
[status] => 404
)
)
我会注意到,我的自定义插件应该在生成REST路由的其他插件之后加载,因为我的自定义插件的名称按字母顺序排在其他插件之后,我没有代码来更改顺序。
如何在加载插件之前实例化rest路由?
最合适的回答,由SO网友:Tom J Nowell 整理而成
根本问题是,代码试图在注册端点之前使用REST API端点。
具体来说,它需要这样做after 这个rest_api_init
胡克开火了。尝试在加载插件和主题后运行的挂钩上执行此操作,例如wp_loaded
.
一般来说avoid doing work in the root scope of a plugins file or functions.php
. WordPress是围绕挂钩和过滤器以及特定的加载过程构建的,因此将挂钩视为时间轴上的事件更为准确。只需将内容放入插件文件而不使用挂钩,它基本上是在史前时代运行的。你不能要求它从A开到B,因为汽车还没有发明出来。
所以这不是what, 这是一个when