寫在前面
訂閱號收到過一些查詢消息,好比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搜索插件
微信公衆平臺技術文檔