在 rest api 出现之前,想暴露一个接口需要先使用 wp_ajax_nopriv_ 或 wp_ajax_ 这两个钩子定义接口,再通过 admin-ajax.php 调用之(调用形式固定为 http://127.0.0.1/wp-admin/admin-ajax.php?action=),有了 rest api 就不用受此限制了,可玩性也大大提高了。
使用 rest api 只需要定义自己的路由和处理函数,就可以通过自定义链接来访问自己的接口了。
注册路由
在主题文件的 function.php 文件中加入下方的钩子,以分别定义 test 和 test2 两个路由
register_rest_route(
'/v1', // 命名空间, 注意: wp 这两个字符为系统保留使用, 不建议在这里使用
'/test', // 路由基础路径
array(
'methods' => 'GET,POST', // HTTP METHOD, 支持逗号分割的字符串, 或字符串数组, 如: 'GET,POST' 或 array('POST', 'PUT');
'callback' => 'func_demo1', // 处理路由请求的最终处理函数
'permission_callback' => '__return_true', // 这是一个回调函数, 若对外公开需要返回 true; 否则, 返回 false. 可以通过此回调函数来判断处理用户权限. for security
),
);
register_rest_route(
'/v1',
'/test2',
array(
'methods' => 'POST',
'callback' => 'func_demo2',
'permission_callback' => '__return_true',
),
);
add_action('rest_api_init', 'register_brave_router');
添加处理函数
只有路由还不行,还要有对应的路由处理函数,下面在主题文件的 function.php 文件中分别添加 test 和 test2 的路由处理函数。
// test 的处理函数
function func_demo1 () {
return array('key' => 'hello');
}
// test2 的处理函数
function func_demo2 ($request) {
$data = wp_unslash($request->get_json_params()); // 取出来接口传入的参数
return $data; // 返回接口传入的参数
}
访问自定义的接口
有两种方式访问刚刚添加的接口,一种是默认形式链接,一种是固定连接,分别如下
http://127.0.0.1/?rest_route=/v1/test
http://127.0.0.1/wp-json/v1/test
如果使用后者将得到下图这样的响应结果:
自定义前缀
如果不想要 wp-json 这样的前缀,wp 也提供了自定义的钩子,下方的钩子(同样,需要添加到主题文件的 function.php 文件中)将把 wp-json 改为 api。
注意:更改这里的前缀需要到【设置】-【固定链接】, 点一下保存【更改按钮】, 以刷新路由重定向规则使之生效
function rename_brave_rest_url_prefix() {
return 'api';
}
add_filter('rest_url_prefix', 'rename_brave_rest_url_prefix');