专栏首页DeveWorkWordPress REST API 定制化输出

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 状态码。这在一定程度上起到了保护作用。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • WordPress 网站开发“微信小程序”实战(五)

    本站WordPress +“微信小程序”实战系列文章已经到了第五篇,这次记录的是“DeveWork极客”小程序v2.0 的更新。2.0 版本在UI 上改动不大,...

    Jeff
  • WordPress 中禁止编辑“已发布”的文章

    出于某些目的(如多人博客要保护自己已经发表的文章不受篡改),我们可能需要对WordPress 中“已发布”的文章进行“编辑”的限制。下面由Jeff 分享个来自p...

    Jeff
  • WordPress 网站开发“微信小程序”实战(二)

    本文是“WordPress 开发微信小程序”系列的第二篇,本文记录的是开发“DeveWork极客”小程序v1.1 的过程。一如既往,目标读者为了解WordPre...

    Jeff
  • Python常见问题 - requests请求参数包含中文报错:UnicodeEncodeError: 'latin-1' codec can't encode characters in posit

    在做接口自动化的时候,Excel作为数据驱动,里面存了中文,通过第三方库读取中文当请求参数传入 requests.post() 里面,就会报错

    小菠萝测试笔记
  • Terraform语法入门

    HCL是Terraform的配置语言,它是HashiCorp发明的一种声明式语言,能够以更加简短和人性化的方式来描述资源。本文主要介绍HCL配置语言的基本语法及...

    oliverpei
  • nodejs微信支付之申请退款

    本文继续介绍nodejs接入微信支付,前面说过了统一下单和支付结果通知。下面再来说一下查询订单

    无邪Z
  • WordPress 网站开发“微信小程序”实战(五)

    本站WordPress +“微信小程序”实战系列文章已经到了第五篇,这次记录的是“DeveWork极客”小程序v2.0 的更新。2.0 版本在UI 上改动不大,...

    Jeff
  • python udp 广播

    最近有需求写了个udp 广播的工具,百度了半天,发现满地坑,wireshark 抓了半天包,发现都是只能localhost收发。这里就记录一下吧

    py3study
  • 19.SimLogin_case01

    什么是模拟登录? 要抓取的信息,只有在登录之后才能查看。这种情况下,就需要爬虫做模拟登录,绕过登录页。

    hankleo
  • 基于PyEcharts的COVID-19疫情可视化分析

    将国家或地区的数值信息映射到地图上,通过颜色变化来表示数值的大小或范围。颜色地图适合带有地理位置信息的数据的展现,将颜色和地图相结合,直观显示数据的地理分布,通...

    数据酷客

扫码关注云+社区

领取腾讯云代金券