Php 在何处注册到wordpress插件端点的REST路由
注册功能必须去哪里?(Php 在何处注册到wordpress插件端点的REST路由,php,wordpress,routes,wordpress-rest-api,wordpress-plugin-creation,Php,Wordpress,Routes,Wordpress Rest Api,Wordpress Plugin Creation,注册功能必须去哪里?(register\u rest\u route()) 它必须在theme/child functions.php中吗 或者它可以在基于插件的php文件中?(例如。\wp content\plugins\example\example.php) 是否有任何文件对此进行了澄清 官方文件中未提及: 类似地,端点函数必须存储在哪里?注册函数仅对其命名,而不指定其路径 例如,您可以这样做: 注册函数调用(register\u rest\u route)进入主插件文件(例如。\
register\u rest\u route()
)
- 它必须在theme/child functions.php中吗
- 或者它可以在基于插件的php文件中?(例如。\wp content\plugins\example\example.php)
- 注册函数调用(
)进入主插件文件(例如。\wp content\plugins\example\example.php)register\u rest\u route
- 端点函数位于其他插件文件中(例如。\wp content\plugins\example\sub path stuff\example controller.php)
下面的链接似乎试图这样做,但没有指定这些属性(例如.\wp content\plugins\example\example.php)所以register\u rest\u route进入“rest\u api\u init”操作挂钩,路由回调可以在同一个文件或外部文件中定义(然后您可以在主文件中要求它,以便将它们添加到route/s). 下面是一个例子: 假设您有一个插件“api测试”,它位于:\wp content\plugins\api test中,我们将添加api-test.php作为主插件文件(出于本例的考虑,它是功能性的,而不是oop)。在api-test.php中,您可以使用以下内容:
/**
* @wordpress-plugin
* Plugin Name: WP Rest api testing..
*/
/**
* at_rest_testing_endpoint
* @return WP_REST_Response
*/
function at_rest_testing_endpoint()
{
return new WP_REST_Response('Howdy!!');
}
/**
* at_rest_init
*/
function at_rest_init()
{
// route url: domain.com/wp-json/$namespace/$route
$namespace = 'api-test/v1';
$route = 'testing';
register_rest_route($namespace, $route, array(
'methods' => WP_REST_Server::READABLE,
'callback' => 'at_rest_testing_endpoint'
));
}
add_action('rest_api_init', 'at_rest_init');
这是一个非常简单的例子,所有内容都在同一个文件中。Jonny Tee说的所有内容都是正确的,我只是想澄清一些事情。在WordPress中,每个插件和主题都有一个且只有一个“启动文件”。对于插件,它是带有PHP标题注释的插件,对于主题,它是functions.PHP。您可以将任何和所有函数直接放入这些文件中,WordPress将
包含它们,PHP将把函数放入全局名称空间。但是,理想情况下,这些文件将进一步需要\u once
其他文件,以便您可以拆分代码,PHP将遵循相同的逻辑,您将保存一些信息。太棒了,谢谢。因此,在这种情况下,我将计划为每个现有回调函数创建一个注册函数,并将每个函数放在与其现有回调函数相同的单独php文件中。然后主插件文件可以包含每个php文件的require\u once
,最后一行(在下面的示例中包含rest\u api\u init
)。听起来不错吗?那计划绝对行得通。我个人不会为代码组织规定任何特定的模式,我会让您自己选择有意义的模式。对我来说,我通常将我的回调注册为匿名函数,调用从我的src
文件夹自动加载的PSR-4代码,这只是因为API注册的内容大多是样板文件,但这只是我自己的风格。谢谢@johnytee,我将在这里测试并报告。我计划将两个示例函数at_rest\u testing\u endpoint
和at_rest\u init
移动到一个单独的PHP文件中,然后require\u once
将该文件移到这里。谢谢,这个答案奏效了。为了子孙后代,我随后修改/取消了功能文件(主插件文件中的每个require
d),添加了'permission\u callback'=>'\uu return\u true',
,以避免v5.5+中的WP软错误(我的功能适用于所有站点访问者,因此在我的用例中auth很好),并将所有函数包装在类结构中。示例URL应该是什么样子才能获得“Howdy是否在浏览器中显示代码><代码>http://localhost/wordpress/?someKey=someValue
在我的测试中不起作用