Posts tagged with WordPress

JL Widgets

這是我為了 Selenium 寫的簡單 Widgets ,包含以下功能:

  • del.icio.us 用於本站右邊的「Notepad」。我的實作方法是去讀取指定使用者的 JSON ,然後 Parse 出來,我覺得這樣比使用 API 簡單許多… 但就沒有指定 tag 的功能了。它會把取得的 JSON 檔案 cache 在目前模板資料夾,想要換地方的可以自行修改…
  • Tag Cloud 用於本站右邊的「Tag Cloud」。雖然 WordPress 2.3 本身已經有產生 tag cloud 的函式,但我不喜歡它的產出結果,就還是自己寫一個。
  • Related Tag Cloud 用於本站右邊的「Related Tags」。這是一個對資料庫負擔較重的功能。
  • Related Entries 用於本站右邊的「Related Entries」。此功能需使用到 Bigram Full-Text Search 建立的 N-gram 表格,因此如果沒有啟用 Bigram Full-Text Search 的話,這個 Widget 就不會出現。

以下附上 Tag Cloud / Related Tag Cloud 的 CSS 供參考:

/* Tag Clouds */
#tag-cloud li,#related-tag-cloud li{display:inline;}
#tag-cloud em,#related-tag-cloud em{font-style:normal;background:transparent;}
#tag-cloud a,#related-tag-cloud a{color:#cccccc;font-size:1em;}
#tag-cloud em a,#related-tag-cloud em a{color:#99bf9f;font-size:1.2em;}
#tag-cloud em em a,#related-tag-cloud em em a{color:#6bb39b;font-size:1.4em;}
#tag-cloud em em em a,#related-tag-cloud em em em a{color:#4295a6;font-size:1.6em;}
#tag-cloud em em em em a,#related-tag-cloud em em em em a{color:#1f4799;font-size:1.8em;}

“Selenium”

セレン

我又換 Theme 了。

“Unfair” 使用了 7 個月左右,算是… 中等壽命 XD 她的特色是頭版只有一篇,這是優點也是缺點———優點是讓我想放上頭版的文章不會很快的被其他雜文洗掉,缺點則是瀏覽方式不符合一般使用者習慣,舊文比較難被翻出來。我在這個 Theme 上作了很多新的嘗試,例如熱門標籤雲、相關標籤雲、友善的錯誤頁面、不同的最近迴響顯示方式,還有從來沒面世過的文章彙整等等,在 Theme 裡面卻寫了很多 PHP code ,雖然有點噁心,但我很喜歡她的功能性。

我翻閱過去時,重新發現了 KrESCENT ,於是決定下次要來重寫一個 KrESCENT 。這次的 “Selenium” 主要參考了 KrESCENT, Moo-PointBlueprint ,寫完後先用在我的另一個 blog 上,本來是沒打算讓這邊也變成這樣的,最後更換的原因則是…… 我最近把 Firefox 預設字型不論 Sans-Serif 還是 Serif 全設成微軟正黑體,這樣對 “Unfair” 來說字就太小了…… XD 1

這次的 Theme 因為剛好只用到非常少量的圖片,因此我給她加入了漸變效果(但是我沒有讓對比愈來愈低,純粹是隨時間變色而已)。起初這功能是寫成 Hard code ,現在改成 Plugin ,不啟用此 Plugin 的話就只是不會變色, Theme 不會因此壞掉。另外在 “Unfair” 用過的熱門標籤雲、相關標籤雲2、相關文章3這些功能也都改寫成 Widget ,所以這次的 “Selenium” 功能性差不多,卻完全沒有 Hard code 呢!

整體而言我覺得 “Selenium” 是一個用 Plugin 堆起來的 Theme ,她的 Loading 好重喔~ XD 4

最後是講解標題時間,前面提過 “Selenium” 是 “KrESCENT” 的延續,這次的名稱當然要跟「月」有關係囉! Selenium 是化學元素「」,而這個字源於希臘文 Σελήνη ,其意為月亮或月之女神。


  1. 我是可以把最小字體大小也調大一點,但這樣有些其他網站就會爆炸… 

  2. 這項功能其實目前沒有正常運作,我還沒改用 WordPress Terms 的新表格,而是使用舊的 posts2cat 表格,因此只有舊文章計算得出來。這部份的 SQL 實在太複雜,目前還懶得更新… orz 

  3. 需使用到 Bigram Full-Text Search 

  4. 光 Theme 的部份是還好,但她需要很多 Plugin 配合,我的 Plugin 列表已經好久沒這麼落落長了…… 

Bigram Full-Text Search rev.35

昨天整理 WordPress 資料庫時發現, Bigram Full-Text Search 如果設定可在迴響中搜尋,好像會殘留下一些垃圾迴響?今天想來修這個 bug ,才發現更嚴重的 bug ———目前根本就不會產生迴響的 N-gram 啊! orz (原因只是打錯一個變數)所以到底會不會殘留垃圾迴響… 還有待觀察。我最近完全沒有任何 Spam ,不知道是因為裝了 Comment Timeout 還是 Downtown Host 自動幫我擋下這些異常流量。

本來只想修好這個 bug 就好,但是只改一行感覺不夠誠意,所以低調的寫了一些其他更新:

  1. 修復一些可能出現的 Notice 和 Warning 。
  2. 支援部份 boolean full-text search operators
    目前已支援的有 +, -, ~, *, " ,未支援的則有 > <, ( ) 。雖然我說支援 " ,但因為本 plugin 是採用 Bigram 分詞,「+"搜尋字詞"」找不到東西,所以輸入「+"搜尋字詞"」會被自動轉換為「+搜尋 +尋字 +字詞」。
    也因為現在全面採用 boolean full-text search operators ,關聯性的計算方式就隨之改變,搜尋結果的順序會和過去有所不同,哪一種比較好我也不確定。
  3. 設定不於迴響中搜尋時,則不更新 wp_comments_ngram 表格。

有興趣試用的話,可以從 Google Code 下載最新版本:

Bigram Full-Text Search (Latest revision)

Update: 突然想到關於 " 的處理方式… 或許可以改成輸入「+"搜尋字詞"」自動轉換為「+"搜尋 尋字 字詞"」,不過這樣會有中英文交雜的問題———目前 N-gram 是將歐文取出來放在最後。

WordPress Plugin: Bigram Full-Text Search

簡介

這是一個給 WordPress 使用的搜尋外掛。

  1. 使用 MySQL 的 Full-Text Search 功能,取代 WordPress 內建的搜尋功能。
    Full-Text Search 的好處不僅是能計算出文章關聯性,尋找出更準確的結果,速度也比 Like Search 快上數~數十倍。
  2. 以 N-gram 方式實作斷詞,這樣才能讓中日韓文順利使用 MySQL Full-Text Search 。

Introduction

This is an advanced search plug-in for WordPress. Only good for Chinese, Japanese and Korean. Other language users please try Advanced Search or similar plug-ins instead.

  1. Using MySQL full-text features to provide faster performance and a more relevant search result.
  2. Using N-gram-based word segmentation to support CJK glyphs in MySQL full-text.

下載 / Download

實作

採用 N-gram 方式解決雙位元字斷詞問題,這個方式需要新建一張 wp_posts_ngram 表格,儲存僅供搜尋用的關鍵字,例如「MySQL 全文搜尋」這段文字的搜尋關鍵字為「MySQL 全文 文搜 搜尋」,因此這張表格大約需佔 wp_posts 表格的 2–4 倍空間。反正現在硬碟愈來愈便宜,用空間換時間很划算 :p

搜尋時也是依照 N-gram 切割,所以搜尋子句大概長得像這樣: MATCH (post_content_ngram) AGAINST ('+MySQL +全文 +文搜 +搜尋') 。但是 MySQL Full-Text Search 有最短關鍵字限制,預設為4個字以上,所以前面的搜尋子句會被轉換為 MATCH (post_content_ngram) AGAINST ('+MySQL') 。而為了解決這個問題, N-gram 表格中的內容會經過 UTF-8 (Hex) 編碼,「MySQL 全文 文搜 搜尋」會被轉換為「MySQL E585A8E69687 E69687E6909C E6909CE5B08B」,搜尋時也是使用轉換過的 N-gram —— MATCH (post_content_ngram) AGAINST ('+MySQL +E585A8E69687 +E69687E6909C +E6909CE5B08B') ,經過如此處理,雙位元字的全文搜尋就沒問題了。

附註

  • 第一次啟用時會進行安裝,包含建立 wp_posts_ngramwp_comments_ngram 表格及製作目前所有文章的 N-gram ,因此需要一點時間。
  • 我使用了 LOW PRIORITY DELAYED INSERT ,因此 N-gram 可能不會與文章同步更新,而會等到資料庫不忙時才更新。

參考資料

版本紀錄

v0.2.2

  • New: 設定不於迴響中搜尋時,則不更新 wp_comments_ngram 表格
  • New: 支援部份 boolean full-text search operators (說明),同時也為此改變了權重計算方式
  • New: 移除使用者設定的停字
  • Fix: 不轉換歐文字元,這樣才能不區分大小寫搜尋
  • Fix: v0.2.1 中最大的 bug ———迴響的 N-gram 根本就不會產生
  • Fix: 修正 Related Entries 功能中可能發生的問題:文章標題中有 HTML Tags 的話…
  • Fix: 修復一些可能出現的 Notice 和 Warning

v0.2.1

  • New: 新增選項頁面
  • New: 搜尋範圍可包含迴響
  • Fix: 不刪除重複的 N-gram 字詞
  • Fix: 改用 DELAYED INSERT

v0.1

  • 初次釋出

Google Analytics Plugin for Wordpress

Google 才剛推出了新服務 Google Analytics ,現在已經有 WordPress 用的 Plugin (Another one) 了,上次 Google Sitemaps 的 Plugin 也是馬上就出現,不禁讓我感嘆起過去使用 pLog/LifeType 的日子… (遠目)

附帶一提,這次的 Google Analytics 新服務,各國語言版一反常態地上線得好快啊!明明這次需要翻譯的字數特別多… 所以我想是因為 Urchin 本來就有多國語系 XD 我昨晚加入程式碼的,據說 12 小時後就會有第一次的統計資料,不過我加入的幾個網站資料都還沒出現,國外也有人在講,所以不是我弄錯~ 據說 Google Reader 第一天上線時也是如此,那時候連線速度的確是很慢,當時沒測試 Refresh 的速度,因為我從來沒想過要轉移過去 :p Bloglines 已經用得太習慣了。

Read More

breakttc.exe

上次提到 WordPress 的 Headline Images 外掛遇到中文字型的問題,剛剛我誤打誤撞解決了 XD

本來只是想把 TTC 分離成 TTF ,這樣才能讓 Headline Images 使用——不過我上次沒分離直接就能用…真是滿奇怪的。於是我找到了 breakttc.exe ,似乎是日本微軟為了解決某個問題(看起來是日文系統預設字型無法使用 ClearType 這樣)而發佈的程式,目前官方已經停止下載,不過仍有很多 Mirror 。這個程式非常簡單,只要在命令列模式下輸入 breakttc filename.ttc ,它就會把 TTC 分離成數個 TTF 了。中文字型許多都是由兩個 TTF 組成的,一個是一般字體,一個則是「P」字體,例如 MS Gothic 和 MS PGothic。我也不知道 P 代表什麼,不過只要用 P 系列的字型, Headline Images 就不會有問題!(我目前用過的幾個是這樣啦…)