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)
是否有任何文件对此进行了澄清

官方文件中未提及:

类似地,端点函数必须存储在哪里?注册函数仅对其命名,而不指定其路径

例如,您可以这样做:

  • 注册函数调用(
    register\u rest\u route
    )进入主插件文件(例如。\wp content\plugins\example\example.php)
  • 端点函数位于其他插件文件中(例如。\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
在我的测试中不起作用