我尝试将这段代码包括在我的插件php文件中以及functions.php
中。(最后,我希望它在插件的php文件中,但我还不确定是否可能,这可能是另一个问题的主题。)
这是一个非常基本的方法,就目前而言,我只是想得到一些内容的回应。
在这两种情况下,我得到了404响应。
add_action( 'rest_api_init', function () {
register_rest_route( plugin_dir_url(__DIR__).'my-project/api/v1/form', '/action', array(
'methods' => 'GET, POST',
'callback' => 'api_method',
) );
});
function api_method($data) {
var_dump($data);
return 'API method end.';
}
我尝试访问URL(在brower中或使用AJAX)
我想我漏掉了什么。
发布于 2019-04-10 15:19:18
你的问题是:
register_rest_route( plugin_dir_url(__DIR__).'my-project/api/v1/form', '/action', array(
具体而言,这是可能的:
http://my-domain.local/wp-content/plugins/my-project/api/v1/form
这是非常不寻常的,而且与文档、手册和教程中的内容背道而驰。
REST端点位于REST中,REST位于rest_url()
返回的URL中。他们住在yoursite.com/wp-json
。端点不是完整的URL路径,也不是与主API断开的独立API。
相反,您需要根据名称空间和端点定义端点名称,并访问REST的发现机制中描述的正确URL。
如果我们用这个:
register_rest_route( plugin_dir_url(__DIR__).'my-project/api/v1/form', '/action', array(
那么我们就会期望:
example.com/wp-json/wp-content/plugins/my-project/api/v1/form/action
该URL相当长,并存在一些问题:
/form
与v2分离开来。第一个参数是命名空间,第二个参数是路由。/action
是/action
,它不会被替换为GET
或POST
回调函数也有问题:
function api_method($data) {
var_dump($data);
端点需要返回其数据,不能像var_dump
那样直接输出数据,否则返回的数据是无效的JSON。
最后,方法参数不正确:
'methods' => 'GET, POST',
methods
不使用逗号分隔列表,也没有文档建议这样做。相反,使用REST提供的预定义值,如WP_REST_Server::READABLE
或WP_REST_Server::ALLMETHODS
,这些都在手册和register_rest_route
的正式文档中提到。
一个更好的登记途径是:
register_rest_route( 'my-project/form/v1', '/action', array(
给予我们:
example.com/wp-json/my-project/form/v1/action
注意我是如何删除插件URL和冗余的/api
片段的(很明显,它已经是一个API了)
https://wordpress.stackexchange.com/questions/333999
复制相似问题