用Shortcode新增「列出特定條件的文章列表」功能

最近想在分類索引的文章中,列出某些分類(或標籤)的文章列表。但是用手動的太累,未來還要持續更新更累。用外掛也沒找到合適的,過去曾經用過一個「列出某個目錄文章列表」外掛,不過找不到了。於是我利用Wordpress新增的Shortcode功能,新增一個功能代碼,可以從文章呼叫functions.php中所設定的程式,完成我所需要的功能。

原本我先找到一個簡單的程式寫法(我的普立茲:製作屬於您自己的 Posts Portal 首頁),適合加在模版中,但是搭配不同分類,這樣要建立很多模版。如果利用像加菲貓網站的作法,把參數用網址丟進某個特定頁面也可以,但這樣就不能在每個分類產生一篇「置頂文」,簡介這個分類內容。

還有一個方法是,把上述程式碼寫進分類簡介的置頂文,然後安裝讓文章也可以執行PHP程式的外掛。可是那個外掛的留言版有人警告,該程式有可能把你的資料庫毀掉(驚)!當然也有人說用了很久都沒事,我是不想冒這個險啦。其中有個人留言說,他現在都用shortcode取代在文章中執行PHP程式。於是我就去搜尋,什麼是shortcode。

原來wordpress在2.5版以後,新增了shortcode的功能。就是在functions.php檔案中定義一個功能跟代號,然後在文章或頁面中用[功能代號]的方式把功能呼叫出來。這樣就可以把程式碼寫在functions.php中,然後從文章中呼叫,並把參數丟進程式裡就可以,安全又好用!

於是在Smashing magazine:Mastering WordPress Shortcodes的文章中,找到篩選特定條件文章的功能(5. Get posts from WordPress Database with a Shortcode)。原本的功能中,沒有篩選「標籤」這一項。不過功能中所使用的get_posts函式在wordpress 2.6之後,已經可以使用所有query_posts的篩選功能。於是參考get_posts的語法,新增了篩選「標籤」的功能。但奇怪我不能用category (id)篩選,要改成category_name(category slug)才行。

不過get_posts好像不能同時篩選分類跟標籤,所以我把get_post改成用query_post(相關語法)。由於用query_posts會讓文章後面出現被篩選出來的文章,所以要在最後增加一個「沒有符合條件的篩選」,這樣就不會有多的文章被顯示出來。

未來我在文章中就可以用「分類」和「標籤」為篩選條件,列出特定的文章列表了。例如以下就是「電腦資訊」類別下,含有「wordpress」標籤的文章列表:

[list num=”100″ cat=”computer” tags=”wordpress+wordpress”]

[list num=”0″ cat=”nothing”]

BUG
不管用get_posts或query_post,都一樣會影響到文章下方分類跟標籤的顯示,所以這個功能不要用在一般文章比較好,用在當作分類簡介應該比較合適。
標籤的搜尋如果是只找一個標籤(例如wordpress),要寫成wordpress+wordpress才行。(相關說明

發佈留言

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

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料