WordPress为给其它程序提供数据,核心带了一套WP REST API接口,但是我们在应用中难免会出现官方接口满足不了我们需求的情况。为此WordPress也提供了register_rest_route函数用于注册WP REST API接口,方便我们在WP REST API基础上自定义接口。那么如何使用WP REST API注册自定义接口WordPress函数register_rest_route?
register_rest_route( string $namespace, string $route, array $args = array(),bool $override = false )
参数:
$namespace
(string) (Required) /wp-json后的第一个段
$route
(string) (Required) 添加的路由规则
$args
(array) (Optional) 多个端点的处理方法,默认空数组
$override
(bool) (Optional) 如果路径已经存在,是否覆盖它?True重写,false合并(如果存在重复键,则使用更新的重写键)。默认false
注意:这个函数不能在rest_api_init钩子作用前使用!
注册自定义接口
首先打开一个能被WordPress加载的文件,如functions.php或者插件文件,这样其中的代码才会被WordPress执行。
function dmd_rest_register_route()
{
register_rest_route(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’dmd/v1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’postlist/(?P<paged>[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\d]+)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’, [
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’methods\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’ => \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’GET\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’,
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’callback\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’ => \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’dmd_rest_postlist_callback\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’,
]);
}
add_action(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’rest_api_init\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’dmd_rest_register_route\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’);
function dmd_rest_postlist_callback($request)
{
$paged = $request->get_param(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’paged\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’);
return get_postlist($paged);
}
function get_postlist($paged)
{
$args = array(
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’posts_per_page\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’ => get_option(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’posts_per_page\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’),
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’ignore_sticky_posts\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’ => false,
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’paged\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’ => $paged,
);
$querynr = new WP_Query($args);
$response = array();
while ($querynr->have_posts()): $querynr->the_post();
$post = array(
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\”PostId\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\” => get_the_ID(),
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\”title\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\” => get_the_title(),
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\”category\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\” => get_the_category()[0]->name,
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\”desc\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\” => get_exc(get_the_ID()),
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\”date\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\” => get_the_time(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’Y-m-d\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’),
);
array_push($response, $post);
endwhile;
wp_reset_postdata();
return $response;
}
上面的代码中,我们通过register_rest_route函数注册了一个get请求接口,请求地址域名/wp-json/dmd/v1/postlist/1,其中postlist是路由方法,由它觉得是什么方法处理,后面的1是参数paged,这里写的正则匹配数字,也就是说只能接收数字型的参数。然后请求将交给dmd_rest_postlist_callback函数处理并返回数据给客户端。
在接收请求时,我们可以使用$request这个变量来得到请求参数,具体,自行打印查看,请求示例: