您可以将代码放入插件中,然后创建REST API端点。
例如,让我们创建一个插件,只需放置一个PHP文件wp-content/plugins/ahmedsplugin.php
或wp-content/plugins/ahmedsplugin/plugin.php
顶部有这样一条评论:
<?php
/**
* Plugin Name: Ahmeds Plugin
**/
... your code goes here ...
现在您将在plugins文件夹中看到“Ahmeds Plugin”。插件只是plugins文件夹中的一个PHP文件,或者plugins文件夹的一个子文件夹,上面有注释。
你可以把WP代码放在这里运行,比如过滤器、动作、类等等。有些人把这些东西放在他们的主题中functions.php
, 但主题是用于视觉/演示的,当你切换主题时,你会失去所有。
注意:此代码将在加载主题模板之前以及init
钩您应该尝试将所有代码放在挂钩中,以便更好地控制代码的运行时间。
现在让我们创建一个端点,javascript可以向其发出请求。首先告诉WP您要创建端点:
add_action( \'rest_api_init\', function () { // when WP sets up the REST API
register_rest_route( // tell it we want an endpoint
\'ahmed/v1\', \'/test/\', // at example.com/wp-json/ahmed/v1/test
[
\'methods\' => \'GET\', // that it handles GET requests
\'callback\' => \'ahmed_test_endpoint\' // and calls this function when hit
]
);
} );
当您访问时
/wp-json/ahmed/v1/test
它将运行函数
ahmed_test_endpoint
, 因此,让我们创建该函数:
function ahmed_test_endpoint( $request ) {
return \'Hello World\';
}
REST API将接受您返回的任何内容,对其进行JSON编码并发送出去。
您可以返回WP_Error
对象,它将更改HTTP代码等并输出消息。如果需要任何参数,请使用$request
对象,例如,如果您添加?bananas=yummy
到URL,然后$request[\'bananas\']
将包含"yummy"
, 就像$_GET
.
添加新端点时,请记住刷新/重新保存永久链接!
现在当我们去yoursite.com/wp-json/ahmed/v1/test
你会看到的"Hello World"
如果您愿意,您可以扩展register_rest_route
添加更多信息,例如代码需要哪些参数、如何验证这些参数、检查用户是否已登录以及是否有权限执行他们想要执行的操作等。
如果您这样做,REST API甚至会帮助您,因此如果您告诉它将有一个ID参数,但没有给出,它会告诉您缺少ID参数。管理AJAX或独立PHP文件无法做到这一点,这使得调试非常困难。它还大大提高了安全性
为什么不是一个独立的PHP文件
- WP API将不可用,因此您需要手动引导WP,这很痛苦
- 即使您的插件/主题被停用,端点也可用,这可能会造成安全问题
- 其他插件无法连接到它,因此缓存或优化插件没有任何好处,因此,可能存在性能损失,您需要自己展开所有安全检查,手动构建它们,这并不容易。如果您以前使用REST API,WP会帮您完成这些任务,解决方案是使用Admin AJAX API,但它对您没有多大帮助。而且,这是非常不可原谅的,如果您没有正确匹配AJAX操作,您会得到一个神秘的响应。除了登录/注销之外,它还不进行任何检查,不进行验证或清理,也不进行发现机制