WordPress 自定义 REST 接口

发布于 2018-12-19 字数3140 浏览 835 评论 0

新版本的 WordPress 自动加入了 REST 接口,方便我们通过 API 的方式去获取网站的数据,但是如果有一些自定义的数据那就比较麻烦了,不然还需要我们自己再定义一套 REST 规则,然后自定义一些路由方法。

WordPress 自定义 REST 接口

基本方法

所幸的是 WordPress 已经考虑到这一点,提供了方法让我们可以自定义 REST 接口:

add_action( 'rest_api_init', 'wtheme_rest_register_route' );
function wtheme_rest_register_route() {
  register_rest_route( 'wtheme/v1', 'topBottomMenu', [
    'methods'  => 'GET',
    'callback' => 'wtheme_rest_base_cb'
  ] );
}
function wtheme_rest_base_cb() {
  $out = array(
    'top-menu'           => get_top_menu(),
    'bottom-menu'        => get_footer_menu(),
    'footer_copyright'   => get_option( 'footer_copyright' ),
    'zh_cn_l10n_icp_num' => get_option( 'zh_cn_l10n_icp_num' )
  );
  return $out;
}

先创建一个函数挂载到 rest_api_init 钩子上,这个函数执行 register_rest_route 方法添加接口路由 wtheme/v1/topBottomMenu,然后有一个回调函数 wtheme_rest_base_cb 设置要返回的数据。

我们只需要修改 wtheme_rest_base_cb 函数返回的数据,就能实现响应不同的数据。

传递参数

往往我们的接口可能需要通过参数去响应不同的内容,比如一个自定义的列表,需要有显示多少条、分页页码、排序方式等参数,通过自定义接口我们一样可以完成。

add_action( 'rest_api_init', 'wtheme_rest_register_route' );
function wtheme_rest_register_route() {
  register_rest_route( 'wtheme/v1', 'topBottomMenu/(?P[\d]+)', [
    'methods'  => 'GET',
    'callback' => 'wtheme_rest_base_cb'
  ] );
}
function wtheme_rest_base_cb($request) {
  $params = $request->get_params();
  $id = $params['id'];
  $out = array(
    'top-menu'           => get_top_menu(),
    'bottom-menu'        => get_footer_menu(),
    'footer_copyright'   => get_option( 'footer_copyright' ),
    'zh_cn_l10n_icp_num' => get_option( 'zh_cn_l10n_icp_num' )
  );
  return $out;
}

再通过 register_rest_route 注册一个新的路由,配置我们的参数,通过正则表达式去匹配,在回调函数里面使用 $request->get_params() 获取参数。

可以通过下面的函数获取到不同部分的参数值:

$request->get_url_params();
$request->get_query_params();
$request->get_body_params();
$request->get_json_params();
$request->get_default_params();
$request->get_file_params(); // 上传的文件

检查权限

在使用接口的时候,可以检查用户的权限。注册接口的时候添加一个权限检查的回调(permission_callback),在方法里用 WordPress 的 current_user_can 去检查对应的权限。

register_rest_route( 'wtheme/v1', 'topBottomMenu/(?P<id>[\d]+)', [
  'methods' => 'GET',
  'callback' => 'wtheme_rest_base_cb',
  'permission_callback' => 'wtheme_rest_base_validate_callback'
]);

权限检查回调:

function wtheme_rest_base_validate_callback() {
  return current_user_can( 'edit_others_posts' );
}

如果你对这篇文章有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助。

扫码二维码加入Web技术交流群

您暂时不能评论!

管理员开启了需要登录才能够评论,你可以免费注册一个本站的账号。

还没有评论!

目前还没有任何评论,快来抢沙发吧!