WordPress 自定义 rest api 接口

在 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');

发表评论