跳到主要內容
黯羽輕揚每天積累一點點

微信公眾號自動回覆圖文訊息

免費2017-11-25#Solution#WordPress微信插件#订阅号自动回复#wordpress wechat plugin#WordPress提高搜索结果相关性

通過 WordPress 外掛實現自動回覆站內搜尋結果

寫在前面

訂閱號收到過一些查詢訊息,比如 vue、react,無奈一直沒有心情去搞關鍵字搜尋,就丟一邊去了

修復部落格首頁樣式問題時恰巧看到了之前的博文:微信公眾平臺圖文訊息自動生成,裡面有提到 WordPress 外掛,就順勢給訂閱號添上了自動回覆功能

喏~長這樣子:

wechat_subscribers

P.S. 樣式問題是說在 firefox 下,容器的 white-space: no-wrap 會導致 float-right 子元素換行,猜測是 firefox 不合規範,具體見 Demo

P.S. 另外,firefox57 確實比之前版本快多了,以前總感覺在記憶體裡被 Chrome 先打了一頓一樣

一。外掛選擇

之前的博文裡提到了 2 款外掛:

  • WordPress 外掛 wechat_subscribers

特色:自動回覆最新文章、隨機文章、搜尋結果等,永久免費

地址: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

用預設的 master 分支即可,下載並解壓

P.S. WordPress 4.3.13 下親測可用,其它版本應該也沒問題,因為外掛沒什麼依賴,僅用到了很少幾個 WordPress API(如 get_postsget_results

2. 安裝並啟用

安裝:把解壓得到的資料夾丟到 ftp 的 wordpress/wp-content/plugins 目錄下,就算安裝完了

啟用:進入 WordPress 後臺,從左側選單進入外掛,找到「微信訂閱號管理」,啟用

然後需要通過 token 接入微信公眾平臺

3. 配置 token

操作步���:

  1. 在後臺左側選單找到「微信訂閱號管理」,進入「外掛設定」

  2. 填寫 token,儲存更改,會得到一個 URL

  3. 進入微信公眾平臺後臺,左側「開發/基本配置 -> 伺服器配置/修改配置」填寫「URL」和「Token」(用上一步得到的 URL 和自己填的 Token),隨機生成 EncodingAESKey,選擇「明文模式」,提交

  4. (提交成功後會返回上一頁)啟用伺服器配置,面板狀態會變成「伺服器配置 (已啟用)」

到這裡 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)

    • 趣味性功能(比如語音查詢)

參考資料

評論

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

提交評論