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 的接口来获取文章列表,展示的不少字段对一般人来说是没有必要。

秉承“如无必要,勿增实体”的原则,减少请求时候的数据量,可以通过下面的代码移除:

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 字段,可以用下面的代码启用:

register_rest_field( 'post', 'metadata', array(
 	'get_callback' => function ( $data ) {
 		return get_post_meta( $data['id'], '', '' );
 }, ));

输出 post meta 特定字段

接上,如果你在REST API 中仅仅想输出 post meta 特定字段而非全部,则通过类似下面代码:

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 控制访问。先看下面的例子:

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


原文链接:来自 DeveWork | https://devework.com/wordpress-rest-api-dynamic-output.html

via Jeff的阳台 https://devework.com/wordpress-rest-api-dynamic-output.html

APP Workflow自动化应用 献给果粉的Geeker工具

自动化工具 Workflow 诞生于 2014 年,是一款功能非常强大的应用。通过 Workflow 内置的 Action 动作组,用户可以轻松实现只需一个动作来完成诸如从拍摄一张照片到把它制作成 GIF 再发布到多个社交平台这样的多个步骤,以更高效率去自动完成原本繁琐复杂的操作。

2015 年这款应用因简便易用(其实设置并没那么简便)的特性获得了苹果的设计大奖。2017年3月,苹果公司收购了 Workflow 应用及其开发团队,并于2017年4月免费了该款应用,之前收费2.99USD.

通过流程化自动处理各种事情,内置 150+ 动作,如开启相机、获取当前 GPS 位置、生成 PDF、打开 URL 链接、新建 EeverNote 笔记等等,只要能巧妙组合,搭配合理,几乎能实现使用者任何的复杂任务流程。

苹果是个比较封闭的系统,同样Workflow被收购后,有些非苹果的应用支持被移除,其中影响到 Chrome 浏览器、Pocket、Uber 以及 Telegram。当然被影响的应用应该不只是上面几款。不过从目前的形势来看,所有谷歌软件和服务应该都无法与 Workflow 兼容了。目前 Evernote、OmniFocus、Day One、Fantastical 和 Dropbox 等应用以及服务仍可与 Workflow 兼容。

Workflow分享by ITGeeker

官网地址https://workflow.is/,大部分帮助可以再次找到。只要你的手机端创建了一个自动化动作,可以通过分享获取官方的链接,然后分享给广大的Workflow的爱好者。比如分享到苹果自带的备忘录,然后就可以找到该动作的Link.

为什么说它是Geeker应用,因为要想创建一个Workflow并没有想象中那么容易和简单,和IFTTT比起来,其难度还是比较大的,如果是复杂的动作要懂一些编程的逻辑思维才能设计出来,例如里面会涉及到变量获取和赋值等。当然所有的一切开始之前,你要有充分的想象规划好你的动作流程。

技术奇客原创第一个workflow

添加当前浏览的页面主题连同链接到苹果的提醒(Reminder):https://workflow.is/workflows/e5a7dd18d2fe427a8b69ace088c763cd

网上搜集的Workflow Action分享:

  1.  下载网易云音乐的MTV,只要分享正在看的MTV的链接到该动作,然后选择分辨率1080,720或者其他有的分辨率,就会开始下载改视频,然后可以选择保存的地方,技术奇客使用了Resilio Sync来保存,然后就可以同步到任何你想保存的地方了。不知道这是否会涉及到版权问题,大家测试一下赶紧删掉有版权的文件哦。链接:https://workflow.is/workflows/06b8b6149ecf4bf79056dea2a6029f14
  2. 获取照片的EXIF和GPS信息,这样你就可以找出这张照片用什么相机/手机拍摄,镜头规格信息以及在什么地方拍摄的(前提照片要记录GPS信息先),如果有,会自动打开地图应用,定位到拍摄的地方。链接:
  3. 一键导航回公司,我这里用的是Google Map,如果你还没学会SS使用方法,可以改成iOS自带的地图应用来导航。链接:https://workflow.is/workflows/f05679f2987440e592eb19d205f8a0cb  类似的可以自己制作一键拨号,一键Facetime等。
  4. 一键倒计时1分钟,链接:https://workflow.is/workflows/efcc378024d649d1bf6bd8785f1354cb
  5. 一键开始录音,链接:https://workflow.is/workflows/1d9df2a23c334540b4858c776d1c59ea
  6. 一键使用Google搜索相关Workflow,同样需要科学工具,链接:https://workflow.is/workflows/364fb346784e4412ae6051ea8439f949
  7. 一键分享最新截图,链接: https://workflow.is/workflows/cf991bd1f648457ebf7190411ce79c3a
  8. 分享当前位置给朋友,链接:https://workflow.is/workflows/6795ee80f2024347a01b76507de2679b
  9. 翻译选中文字,链接:https://workflow.is/workflows/697130b191fa4ef29bdeb60644155d14
  10. 国内的多功能搜索,用了就知道了。链接: https://workflow.is/workflows/0447745d459542b2be3c04107ff27769

以上链接,只要在手机端打开就可以直接添加到自己的手机使用了。科技带来便捷!

ifttt(If this then that) 强大的网络数字生活同步管理工具

ifttt 是一个整合各个互联网服务的“自动化同步工具”,官方解释它的名字是 “if this then that” 的缩写。先给大家预览一下我用ifttt建立的一些task:

ifttt 能够针对某些互联网服务设定条件,如果达到条件,就做出下一步行动。

它可以做到:

一旦把一个文件放到Dropbox的文件夹里,就自动给你的一个朋友发送邮件;

一旦把一个图片放到Dropbox的图片文件夹里,就知道上传到FaceBook和Flickr等空间;

一旦天气预报说明天要下雨 就自动发到邮件到你设定的邮箱,并且可以订制邮件内容;

一旦收藏一条 Tweet 就自动发到 Evernote;

一旦在谷歌阅读里给文章加星标,就自动发到 Evernote;

一旦用Istagram拍了一张照片,就自动下载到Dropbox的文件夹;

一旦上传一张图片到 Flickr 就同步到 Facebook 上;

一旦发表了一篇基于Wordpress的博客 就自动转发 FaceBook的页面;

一旦在 Google Reader 里面给一篇文章加星标就自动分享到 Tumblr 轻博客上…

我们可以利用 ifttt,把网络上的各种生活碎片,都备份到 Dropbox 中去选择“if xxx then save it to dropbox”。

一般来说,定制这样的任务,需要进入 ifttt 的 Channl 页面,激活你想整合的服务,然后进入 Task 页面,进行定制。由于 ifttt 提供一个方便的功能,只要有人愿意,可以把自己通过 ifttt 定制的 Task,发布成 Recipe 和别人分享,只要利用别人发布的 Recipe 就可以简单的定制备份自己数字人生的任务。现在 ifttt 上一共有 1311 个 Recipe。

这里有些是从网上收集的,大家可以自己去网上搜索 http://ifttt.com/recipes

如何备份自己的图片

ifttt 支持 Facebook、Flickr 和 Instagram,想保存自己的图片轨迹到 Dropbox,只要利用如下几个 Recipe:

如何备份自己的 Tweet 和博客文章

ifttt 支持 WordPress、Posterous、Tumblr 和 Twitter 这几个服务。你可以利用以下 Recipe:

如何把文章发送到“稍后阅读” 服务去

ifttt 支持把 Twtter、Google Reader、RSS feed 这些我们平时获取信息的手段,还支持 Instapaper 和 Read It Later 这两个使用范围最广的“稍后阅读”服务。你可以利用以下 Recipe:

如何备份地理签到和状态更新

ifttt 支持三个服务 Foursqare、Facebook 和 Twitter,你可以把这些每日的状态更新同步到 Google 日历中去。你可以利用以下 Recipe:

ifttt 是各种互联网服务的“粘合剂”,把不同的服务捏合起来做些很有意思的事。最重要的是 ifttt 可以实现自动化,节省大量的精力。对于我而言,我再也不用拿起手机连上电脑,花上 15 分钟导入导出图片,而只要打开 Dropbox,就可看到今天的美好。

ifttt 的诞生,是互联网的开放性的体现,如果互联网服务都不开“通道” API ,供别人利用的话,ifttt 就失去服务的基础。