我在向Wordpress添加自定义REST API路由时遇到问题。使用我自己的插件,我注册了如下路线:
add_action( \'rest_api_init\', function() {
register_rest_route( $namespace, \'handler_mijnenergie\', array(
\'methods\' => \'\\WP_REST_Server::CREATABLE \',
\'callback\' => [ $this, \'handle_energie_data\' ]
), false );
} );
调用名称空间“/wp-json/watz/v1”时,我在Postman中得到了正确的响应,显示了路由。
然而,当我试图直接访问路由请求时,抛出了一个404错误。到目前为止,我已经尝试:
使用标准Wordpress重写永久链接。htaccess禁用插件更改方法/命名空间(&L);请求测试其他插件路由,如Yoast或联系表单7(它们可以正常工作)是否知道是什么导致了此问题,以及我需要更改什么才能使其正常工作?
最合适的回答,由SO网友:Jacob Peattie 整理而成
这是因为您定义了可接受的方法:
\'methods\' => \'\\WP_REST_Server::CREATABLE \',
你不应该在它周围加引号。
WP_REST_Server::CREATABLE
是一个等于
\'POST\'
, 但通过在其周围加引号,您实际上将该方法设置为
\'\\WP_REST_Server::CREATABLE\'
, 这不是有效的HTTP方法。您可以在对命名空间端点的响应中看到这一点。
设置如下:
\'methods\' => WP_REST_Server::CREATABLE
或者,如果您的文件使用的是PHP命名空间,则如下所示:
\'methods\' => \\WP_REST_Server::CREATABLE
或将其添加到文件顶部:
use WP_REST_Server;
然后确保在直接访问路由时,使用的方法正确。如果您正在使用
WP_REST_Server::CREATABLE
那么端点将只响应
POST
请求,所以
GET
请求将返回404,其中包括您通过浏览器访问它的时间。