WordPress REST API 定制化输出
WordPress 自4.7 版本后与时俱进推出了REST API,如此一来想象空间又扩展了许多,如今WordPress 可以完全作为后端数据驱动了。本文通过几个例子展示如何定制化输出WordPress REST API 的相关数据。
文章数据(posts)禁止某些字段显示
默认的,当请求类似 your-site.com/wp-json/wp/v2/posts?per_page=5&page=1
的接口来获取文章列表,展示的不少字段对一般人来说是没有必要。
秉承“如无必要,勿增实体”的原则,减少请求时候的数据量,可以通过下面的代码移除:
// https://devework.com/wordpress-rest-api-dynamic-output.html function dw_rest_prepare_post( $data, $post, $request ) { $_data = $data->data; $params = $request->get_params(); // if ( ! isset( $params['id'] ) ) { unset( $_data['excerpt'] ); unset( $_data['author'] ); unset( $_data['featured_media'] ); unset( $_data['format'] ); unset( $_data['ping_status'] ); unset( $_data['comment_status'] ); unset( $_data['sticky'] ); unset( $_data['template'] ); // } $data->data = $_data; return $data; } add_filter( 'rest_prepare_post', 'dw_rest_prepare_post', 10, 3 ); |
---|
文章数据(posts)中输出 post meta 所有字段
可能考虑到数据隐私,文章数据(posts)默认并不显示post meta的相关字段,如果你需要输出对应文章下所有 post meta 字段,可以用下面的代码启用:
// https://devework.com/wordpress-rest-api-dynamic-output.html register_rest_field( 'post', 'metadata', array( 'get_callback' => function ( $data ) { return get_post_meta( $data['id'], '', '' ); }, )); |
---|
输出 post meta 特定字段
接上,如果你在REST API 中仅仅想输出 post meta 特定字段而非全部,则通过类似下面代码:
// https://devework.com/wordpress-rest-api-dynamic-output.html function dw_rest_prepare_post( $data, $post, $request ) { $_data = $data->data; $params = $request->get_params(); $thumb = get_post_meta( $post->ID, 'thumb' ); if($thumb){ $_data['thumb_image'] = $thumb; } $data->data = $_data; return $data; } add_filter( 'rest_prepare_post', 'dw_rest_prepare_post', 10, 3 ); |
---|
上面的代码展示的是如何输出thumb
这个 post meta 字段,请按需使用。
借助 Nginx 控制 /wp-json 的访问
这个倒与WordPress 本身无关了,your-site.com/wp-json
的路由默认是所有人皆可访问。如果你基于服务器负载,或安全等方面考虑选择性输出,可以借助 Nginx 控制访问。先看下面的例子:
# https://devework.com/wordpress-rest-api-dynamic-output.html location /wp-json { if ($http_user_agent !~ '(iPhone|Android)'){ return 403; } try_files $uri $uri/ /index.php?$args; } |
---|
如果你熟悉Nginx 语法,就知道上面的代码实现了:除了iOS 跟Android 设备(通过判断请求头的UA 信息),其它访问 /wp-json
的路径均返回403 状态码。这在一定程度上起到了保护作用。
- SpringBoot开发案例之微信小程序录音上传
- SpringBoot开发案例之微信小程序文件上传
- SpringBoot开发案例之配置静态资源文件路径
- 源码解读ODL的MAC地址学习(一)
- SpringBoot开发案例之配置Druid数据库连接池
- SpringBoot开发案例之mail中文附件乱码
- SpringBoot开发案例之整合Swagger篇
- SpringBoot开发案例之整合mail队列进阶篇
- SpringBoot开发案例之集成SSL证书
- SpringBoot开发案例之整合mail队列篇
- SpringBoot开发案例之整合日志管理
- SpringBoot开发案例之奇技淫巧
- SpringBoot开发案例之整合Spring-data-jpa
- SpringBoot开发案例之整合定时任务(Scheduled)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Go语言(二十)日志采集项目(二)Etcd的使用
- prometheus入门(一)
- Go语言(十九)日志采集项目之logagent开发(一)
- Go语言(十 八)context&日志项目
- 使用梯度上升欺骗神经网络,让网络进行错误的分类
- Go语言(十七) 配置文件库项目
- Python 相对路径问题:“No such file or directory“
- 基于etcd服务发现的overlay跨多宿主机容器网络
- Go语言(十六) 日志项目升级
- PyQt5 技术篇-设置窗口相对桌面位置,按屏幕比例
- Go语言(十五) 反射
- SpringBoot应用跨域访问解决方案
- Spring Boot 2.2都有哪些新变化
- Go语言(十四)日志项目
- 如何在Spring Boot中使用Cookies