写在前面
订阅号收到过一些查询消息,好比vue、react,无奈一直没有心情去搞关键字搜索,就丢一边去了php
修复博客首页样式问题时恰巧看到了以前的博文:微信公众平台图文消息自动生成,里面有提到WordPress插件,就顺势给订阅号添上了自动回复功能css
喏~长这样子:vue
P.S.样式问题是说在firefox下,容器的white-space: no-wrap会致使float-right子元素换行,猜想是firefox不合规范,具体见Demoreact
P.S.另外,firefox57确实比以前版本快多了,之前总感受在内存里被Chrome先打了一顿同样git
一.插件选择
以前的博文里提到了2款插件:github
WordPress插件wechat_subscribersajax
特点:自动回复最新文章、随机文章、搜索结果等,永久免费redux
地址:https://github.com/Soopro/wechat_subscribers服务器
WordPress插件Wechat-Manager微信
特点:关键词自动回复最新文章、一周/月/年内最多评论文章、文章搜索结果
地址:https://github.com/9IPHP/Wechat-Manager
时隔1年多又跑去看,发现好像都还在维护,试用以后选择了wechat_subscribers,主要优点:
commit看起来更专业,更用心,例如rename method.,rename class.,clean comment.
有长长的changelog,感受靠谱
token验证经过(Wechat-Manager的token始终没法经过验证…因此,其实是没得选)
缺点:
文档太差,readme没有详细的安装步骤,且格式极乱
还好接微信公众平台只要求一个token,摸索着用上了,效果比较满意
二.安装步骤
1.下载插件源码
https://github.com/ayqy/wechat_subscribers
用默认的develop分支便可,下载并解压
P.S.WordPress 4.3.13下亲测可用,其它版本应该也没问题,由于插件没什么依赖,仅用到了不多几个WordPress API(如get_posts、get_results)
2.安装并启用
安装:把解压获得的文件夹丢到ftp的wordpress/wp-content/plugins目录下,就算安装完了
启用:进入WordPress后台,从左侧菜单进入插件,找到“微信订阅号管理”,启用
而后须要经过token接入微信公众平台
3.配置token
操做步骤:
在后台左侧菜单找到“微信订阅号管理”,进入“插件设置”
填写token,保存更改,会获得一个URL
进入微信公众平台后台,左侧“开发/基本配置 -> 服务器配置/修改配置”填写“URL”和“Token”(用上一步获得的URL和本身填的Token),随机生成EncodingAESKey,选择“明文模式”,提交
(提交成功后会返回上一页)启用服务器配置,面板状态会变成“服务器配置(已启用)”
到这里token就配置好了(双方已经按照既定“协议”创建了信任关系)
4.添加自动回复规则
到试玩阶段了,进入WordPress后台,左侧“微信订阅号管理/自定义回复 -> 添加新回复”
插件提供了3种触发机制(消息匹配机制):
普通:关键字模糊匹配
默认:default case,其它的规则都不匹配时就走这个
订阅:新增关注时触发
好比添一条测试规则:
回复标题 test 关键字 测试,test,t 触发 普通 发布 勾选 类型 纯文本 内容 hoho
保存并退出,微信进入订阅号发送“测试或test或t”,会当即收到回复“hoho”
回复的消息格式支持:
纯文本
图文消息:相似于微信公众平台的图文消息,给配图和文章连接
最近消息:最新的几篇文章
随机消息:随机选取几篇文章
搜索关键字:站内搜索结果
最有用的应该是搜索关键字,能把用户想要的博文列表丢过去,固然基础功能也不错
三.优化搜索结果
试玩发现回复结果与查询关键字的相关度不大,好比:
关键字 redux 结果 MobX react-redux源码解读 dva
插件默认走WordPress原生API get_posts,按发布日期排序,因此获得的结果不太科学,MobX和dva仅仅在内容提到了一点redux而已,也给算进来了
没错,咱们须要提升搜索结果的相关度,最直接的想法就是加权重,再按权重综合排序,好比:
匹配项 权重 标题 3 分类 1 tag 1 内容 0.5 评论 0.3
都匹配的文章列表计算权重,再降序排列,就是我想要的结果,对应PHP代码以下:
// from interface.php/getSearchPosts // ID, post_content, post_excerpt, post_title // extra: post_type, post_modified $posts = $wpdb->get_results($wpdb -> prepare("select ID,post_content,post_excerpt,post_title,post_type,post_modified from db_wp_posts where post_status = 'publish' order by ((CASE WHEN post_title LIKE '%{$keyword}%' THEN 2 ELSE 0 END) + (CASE WHEN post_content LIKE '%{$keyword}%' THEN 1 ELSE 0 END)) DESC, post_modified DESC, ID ASC limit $re_count"));
从db_wp_posts表中已发布的文章中找出标题和内容与关键字匹配的,并加权(标题权重2,内容权重1),再降序排列,取前$re_count个查询结果
注意,这里用到了SQL中的简单case函数,很灵活的小技巧
四.源码
Github地址:https://github.com/ayqy/wechat_subscribers
结构
wechat_subscribers/ css/ img/ js/ language/ # 多语言支持,WordPress插件惯用的pm,po文件 __wechatsucks__.php # 黑科技,token验证不经过时能够试试 _edit.php # 和下面3个都是后台页面及配置表单 _general.php _history.php _settings.php ajax_request_handle.php # 配置表单须要的博文列表,现查 class-wpwsl-general.php # 注册新增规则页 class-wpwsl-history.php # 消息记录页 class-wpwsl-history-table.php # 注册消息记录页 class-wpwsl-list-table.php # 博文表格交互,排序/分页 class-wpwsl-settings.php # 注册到左侧菜单 content.php # 插件首页,都是废话 index.php # 没用 interface.php # **核心部分** 站内搜索,收发消息 posttype_wpwsl_template.php # 后台配置数据格式 wpwsl_core.php # 插件入口,注册
todo
fork过来是想作几件事:
重写readme(原版太变态了,看了不想用) 100%
搜索结果按相关度排序(默认按日期排序) 100%
扩展功能 0%
关键字支持类型常量(好比number)
支持命令(好比留言,topN)
趣味性功能(好比语音查询)
参考资料
WordPress get_posts by title like
HOW TO IMPROVE INTERNAL SEARCH IN WORDPRESS:WordPress搜索插件
微信公众平台技术文档