WordPress 自定义 REST 接口
新版本的 WordPress 自动加入了 REST 接口,方便我们通过 API 的方式去获取网站的数据,但是如果有一些自定义的数据那就比较麻烦了,不然还需要我们自己再定义一套 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论