Hack Remind Me

這是自從寫度連結的重要性開始,經過WordPress 3.0下WikiStyle Autolinks不work的測試,後來我感覺有點不對,WikiStyle的外掛,它的程式是針對文章內容做搜尋,當你舊文章的標題有跟目前顯示文章的內容有吻合的時候,就將舊文章的標題轉成連結放在目前顯示的文章內來作到深度連結的功能,但是這會造成如果你的網站小又或者你的文章數超多的話,那麼這個搜尋會造來嚴重的後果,那就是讀者看文章會變得很慢很慢…慢到他睡著了,文章還沒顯示完,原本在測試平台下測試還滿順利的,後來移到這個頻寬小文章數以到了1491篇的工作達人來說,這是很大的搜尋負荷,我們不可以慢待我們的讀者,作者自己倒是可以慢待才對。

經過這樣的思考,ㄚ琪又再一次地搜尋Wordpress的外掛有沒適合我的想法的,我找到了Remind Me這個外掛,這也是有5顆星的外掛,在Wordpress 3.0下使用沒有問題,它可以很容易地將這一篇文章的連結放到另一篇的文章內,這是深層連結的一個滿不錯的外掛,當你啟用這個外掛後,你會看到在內容編輯欄位下,有相關文章的列表(如下圖)。

2010-06-28_113241

這些列表是根據你目前文章的標題、內容、標籤、分類來搜尋以前的舊文章,但是內容是依據你把它用滑鼠選取之後,按Refresh List更新時比對舊文章的內容來當作搜尋結果的,或許這個邏輯沒什麼問題,但是對ㄚ琪的用意是不吻合的,因為在WikiStyle Autolinks下是用舊文章的標題來比對目前文章的內容,而這也是我比較接受的邏輯,因為一般我在寫文章的時候可能舊的文章標題我記不得,所以如果編輯的文章內有一段話是我常用的,那麼它就可以提醒我以前有這麼一篇文章喔!那時我就把這個連結加入文章內,你看雖然在編輯的時候它要去搜尋,但是應該不會很多次,這將比起讀者每次看文章就要搜尋的WikiStyle Autolinks,確實這是省力多了!

好了Remind Me這個功能沒有,我想就把WikiStyle Autolinks這個功能移入好了,但是程式碼的寫成有差異,好像不相容吧,我在想在SQL命令產生的時候應該有正規表示式吧!

哈哈,果真沒錯,先試了全文索引的功能,不對,而且要改變Wordpress的資料結構,這個很實在不妥,繼續找,後來找到有REGEXP的語法,這正是我要的命令語法!

好了,開始改造我的Remind Me吧!

第一個是先針對wp-contentpluginsremind-me-deep-linking-seo-plugintemplatejs的remind-me-metabox.js做改造

var selString = tinyMCE.activeEditor.selection.getContent();

這一行就是針對選取內容比對舊文張的標題來做搜尋結果,我不想這樣所以改成

var selString = tinyMCE.activeEditor.getContent();

這樣是為了讓舊文章的標題比對目前文章內所有文字做搜尋結果!

接著改wp-contentpluginsremind-me-deep-linking-seo-plugin下的model.php

// add the search text
if (!empty($params[“highlight”])){
$params[“highlight”] = jtUtility::cleanTxt($params[“highlight”], “”);
$searchWhere->addLike(“post_title”, $params[“highlight”],”p”, true);
$searchWhere->addLike(“post_excerpt”, $params[“highlight”],”p”, true);
$searchWhere->addLike(“post_content”, $params[“highlight”],”p”, true);
$searchWhere->addLike(“post_name”, $params[“highlight”],”p”, true);
}

上面這一塊是原來的程式碼主要就是產生用滑鼠選取部份文章內容來做搜尋的SQL語法,我不要這樣的搜尋,所以改成這樣:

// add the search text
if (!empty($params[“highlight”])){
$params[“highlight”] = jtUtility::cleanTxt($params[“highlight”], “”);
//加hack,使用hightlight為所有content
//註解下面四行
//$searchWhere->addLike(“post_title”, $params[“highlight”],”p”, true);
//searchWhere->addLike(“post_excerpt”, $params[“highlight”],”p”, true);
//$searchWhere->addLike(“post_content”, $params[“highlight”],”p”, true);
//$searchWhere->addLike(“post_name”, $params[“highlight”],”p”, true);
$searchWhere->add(“‘”.$params[“highlight”].”‘ REGEXP p.post_title”);
}

這一行就是精髓: $searchWhere->add(“‘”.$params[“highlight”].”‘ REGEXP p.post_title”);

好了,這樣就完成任務了,真是過癮!

感謝你看到這裡,很快就可以離開了,但最好的獎勵行動就是按一下幫我分享或留言,感恩喔~

點我分享到Facebook

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *