如何使用WordPress的REST API创建自定义端点?

2024-11-17 36 0

在WordPress中创建自定义REST API端点是一个相对直接的过程,可以通过以下几个步骤来完成:

步骤 1:设置钩子

首先,你需要使用 rest_api_init 钩子来注册你的自定义端点。这个钩子在REST API被初始化时触发。

步骤 2:注册路由

在你的插件或主题的 functions.php 文件中,你可以使用 register_rest_route 函数来注册一个新的路由。

步骤 3:定义回调函数

定义一个回调函数来处理传入的请求,并返回相应的响应。

以下是一个简单的例子,展示了如何创建一个名为 /myplugin/v1/hello-world 的自定义端点:

function myplugin_register_routes() {
    // 注册一个新的路由
    register_rest_route('myplugin/v1', '/hello-world', array(
        'methods' => 'GET', // 允许的HTTP方法
        'callback' => 'myplugin_hello_world', // 当路由被访问时调用的函数
    ));
}
add_action('rest_api_init', 'myplugin_register_routes');

function myplugin_hello_world($request) {
    // 返回一个简单的响应
    return new WP_REST_Response('Hello, World!', 200);
}

在这个例子中:

  • myplugin/v1 是命名空间,通常是你插件的名称和版本号。
  • /hello-world 是路由的路径。
  • methods 定义了允许的HTTP方法(GET, POST, PUT, DELETE等)。
  • callback 是当端点被访问时调用的函数。

步骤 4:测试端点

一旦你将代码添加到 functions.php 文件并保存,你可以通过访问以下URL来测试你的端点:

http://yourwordpresssite.com/wp-json/myplugin/v1/hello-world

yourwordpresssite.com 替换为你的WordPress站点的URL。

扩展端点功能

你可以通过以下方式扩展你的端点:

  • 添加参数验证:使用 register_rest_routeargs 参数来定义期望的输入参数和验证规则。
  • 支持不同的HTTP方法:在 methods 参数中添加多个方法,如 'methods' => 'GET|POST'
  • 返回更复杂的响应:使用 WP_REST_Response 类来构建响应,并设置状态码、头部和主体。

以下是一个带有参数验证的例子:

function myplugin_register_routes() {
    register_rest_route('myplugin/v1', '/hello-world', array(
        'methods' => 'GET',
        'callback' => 'myplugin_hello_world',
        'args' => array(
            'name' => array(
                'required' => true,
                'validate_callback' => function($param, $request, $key) {
                    return is_string($param);
                }
            ),
        ),
    ));
}
add_action('rest_api_init', 'myplugin_register_routes');

function myplugin_hello_world($request) {
    $name = $request->get_param('name');
    return new WP_REST_Response("Hello, $name!", 200);
}

在这个例子中,端点现在接受一个名为 name 的参数,并且这个参数是必须的。如果访问端点时没有提供 name 参数,将会返回一个错误。

相关文章

在WordPress插件中,如何使用options API保存和获取设置?
在WordPress插件开发中,如何正确使用数据库操作函数如wpdb::prepare()?
如何使用WP_Query来构建自定义查询?
如何在WordPress主题中创建自定义导航菜单?
如何在WordPress主题中创建自定义页面模板?
如何使用acf_add_options_page()在WordPress中添加自定义设置页面?