寫在前面
訂閱號收到過一些查詢訊息,比如 vue、react,無奈一直沒有心情去搞關鍵字搜尋,就丟一邊去了
修復部落格首頁樣式問題時恰巧看到了之前的博文:微信公眾平臺圖文訊息自動生成,裡面有提到 WordPress 外掛,就順勢給訂閱號添上了自動回覆功能
喏~長這樣子:
P.S. 樣式問題是說在 firefox 下,容器的 white-space: no-wrap 會導致 float-right 子元素換行,猜測是 firefox 不合規範,具體見 Demo
P.S. 另外,firefox57 確實比之前版本快多了,以前總感覺在記憶體裡被 Chrome 先打了一頓一樣
一。外掛選擇
之前的博文裡提到了 2 款外掛:
- WordPress 外掛 wechat_subscribers
特色:自動回覆最新文章、隨機文章、搜尋結果等,永久免費
- WordPress 外掛 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
用預設的 master 分支即可,下載並解壓
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)
-
趣味性功能(比如語音查詢)
-

暫無評論,快來發表你的看法吧