wordpress rest api 登录_结合wordpress的REST API为公众号加自动搜索电影功能

全球使用量最大的网站系统 wordpress大概是从4.5内置了 wordpress rest api的功能,使 wordpress与其他系统进行集成变得非常方便,这套接口几乎涵盖了日常用到的所有功能。

需求

说回正题,最近上公众号后台发现经常有人直接输入电影名称,大概是想直接查这个电影相关的东西,但是目前公众号只会憨憨的回复用户:“您的消息已经收到,管理员会第一时间联系您。”,然后我并没有时间去查看,当然也没有去联系您。

既然 wordpress提供了这样一套 rest api接口可用,而公众号上又有相关的需要,那就集成一下就好了。需求就是根据用户在公众号里的留言,去搜索电影站上的文字 title,然后返回链接给客户就好了。

实现

首先读一下wordpress rest api文档,找到我们需要的主接口:

curl https://example.com/wp-json/wp/v2/posts

带上一个 search参数就可以进行关键词检索了:

curl https://example.com/wp-json/wp/v2/posts?search=赎罪

但是这个返回的结果是这样的:

f0157f0d94a96ef51294a112d6742ada.png

与我们需求不太一致,有两个问题:

  1. 关键词匹配了文章的很多属性,包括标题,内容等,所以会匹配出很多我们不需要的文章来,而我们只想搜索标题。

  2. 返回了一篇文章全量的数据,而我们只需要链接,标题即可。

优化检索
解决问题1

我们需要定制一种检索形式,只检索文章的 title,这里借助WP REST Filter过滤插件,这个插件可以支持很多种过滤检索,包括根据自定义字段过滤,具体用法请自行查看插件主页及 rest api关于 filter参数相关的用法。

借助过滤插件我们同样可以实现关键词检索,但是与上面的检索结果是一样的他的用法是这样的:

curl https://www.m1910.com/wp-json/wp/v2/posts?filter[s]=赎罪

我们需要在装好插件的基础上增加一个自定义过滤选项然后实现它,在主题下的 function.php中添加下面的代码:

// rest api search by post titleadd_filter( 'posts_where', function ( $where, \WP_Query $q ) {  global $wpdb;  $query_by_title = $q->get( 'queryByTitle' );  if ( $query_by_title = $q->get( 'queryByTitle' ) ) {    $where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql( $wpdb->esc_like( $query_by_title ) ) . '%\'';  }  return $where;}, 10, 2 );function wpse_20160526_rest_query_vars( $valid_vars ) {  $valid_vars = array_merge( $valid_vars, array( 'queryByTitle' ) );  return $valid_vars;}add_filter( 'rest_query_vars', 'wpse_20160526_rest_query_vars', PHP_INT_MAX, 1 );

这样,我们使用自定义的过滤条件 queryByTitle再发送一个请求试试:

curl https://www.m1910.com/wp-json/wp/v2/posts?filter[queryByTitle]=赎罪

这样的返回才是我们需要的:

b09e31232e1693bfb684cd89a982643a.png

解决问题2

对于返回字段进行过滤,只需要加入一个 _fields参数就可以了,这里我们只需要 titlelink就行了,这样发请求:

curl https://www.m1910.com/wp-json/wp/v2/posts?filter[queryByTitle]=赎罪&_fields=link,title

可以看到,返回变成了我们想要的样子:

[    {        link: "https://www.m1910.com/atonement-2007.html",        title: {          rendered: "赎罪 Atonement(2007)_结局应该是死亡还是永恒"        }    }]

如果返回多个结果,循环输出就好了。然后把这个优化后的接口集成到公众号的关键词回复中即可。

效果演示

最终效果就是这样的:

2e5b4348081ebfab95b8739419cb8653.png

欢迎关注公众号,输入电影名称进行测试。在懂的人眼里,这篇文章是在送钱!

参考

WP REST Filter : https://wordpress.org/plugins/wp-rest-filter/

How do I filter wordpress rest api by any articles that contain the search term in the title? : https://stackoverflow.com/questions/54151424/how-do-i-filter-wordpress-rest-api-by-any-articles-that-contain-the-search-term

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值