[分享] WP 的隨機挑文 Plugin

randompost.jpgGetRandomPost 這算是我的第一個Plugin,一開始拿 My Program隨機文章列表RandomArticle 0.9 來修改,雖然對PHP和MySQL 不熟,但因為程式短短的所以只修改了半小時就可以工作(work)了。修改完後還意猶未竟,所以自己加了三個參數功能,說明如下:

maxPosts int 想要顯示幾則隨機訊息 (預設5則)
notRecentNo int 最近幾篇文章不想秀出 (預設0則,避免和 recently posts 秀了一樣的文章)
maskCate string 用空白分開你想要排除的 catgory ID (例如 “8 2 5″, 預設是空字串,以本站為例:線上書籤、站務我都想排除)

執行的方式是先將GetRandomPost.php 放在Plugins 目錄,啟動它後在你的 sidebar 找適當位置放入下面的程式碼即可:


<?php GetRandomPost(); ?>

以山丘突歐為例,在sidebar 加入了


   <?php if (function_exists('GetRandomPost')) { ?>
   <li><h2><?php _e ('隨機挑文'); ?></h2>
        <?php GetRandomPost(6,6,"1 8 4"); ?>
   </li>
   <?php } ?>  
 

程式下載

x x x
關於程式:
市面上雖然一堆大的Plugin,入手後要Trace 程式挺痛苦的,不過這支小Plugin 倒是可以提供入門者一些參考,山丘摘要幾個重點。

regular expression(以下簡稱 RE) 程式第46行一個function 取代了叫繁雜的迴圈和比較,讓程式變得很簡潔


 46       return( '(category_id !='. preg_replace('/(?<=\d)\s+(?=\d)/', ' AND category_id !=', $maskCate).')' );

其中’/(?<=\d)\s+(?=\d)/'就是RE的語法。RE的表示通常都非常精簡,但是卻也很難看懂或是創造,有時候小小功能就得試半天、想半天,好不容易生出來了會有一些些興奮,這算是程式設計師的小甜點吧。之前我都是用Expresso 軟體玩 RE ,今天我也找到一個很棒的 RE 網站他的幾個例子很詳細的解說分析,值得好好逛一下。

另外就是兩層的Select


21	$query = "SELECT ID, guid,post_title,comment_count FROM $wpdb->posts WHERE (post_status = 'publish') ".
22            "AND  ID < (select MAX(ID) FROM $wpdb->posts ) - $notRecentNo ".
23            "AND ID in (SELECT post_id FROM $wpdb->post2cat WHERE ".
24            get_cateMaskSQL($maskCate).") order by rand() limit 0,$maxPosts";

以上幾行是用來組SQL字串的,22行、23行都就是運用了兩層的Select技巧,擅用這個技巧除了可以節省了不少PHP的程式碼,更重要的是減少往返資料庫查詢的次數,對整個程式效能幫助非常大。

其實,在程式中避免跟最近幾篇的文章相衝突,我只簡單的扣掉一個設定數字了事,少了判斷文章是Publish 或是Static 等其他屬性,所以恐怕還機會有一兩篇和最近文章衝突,有興趣的可以朝這方向把程式加強。

引用: http://kent.ppolis.com/wp-trackback.php?p=81

One Response »

  1. nchild 談到:

    字出版誠可貴,波麗斯價更高。趕快幫忙開發mashup的途徑吧!

RSS feed for comments on this post ·

Leave a Comment

You must be logged in to post a comment.