WP-Postrating 使用心得
加菲貓漫畫部落格的兩大重要功能:「搜尋」和「評分」已經都大致完工了。其中幫漫畫評分的功能是利用WP-Postrating的插件來完成,這個插件可以直接用滑鼠「點星星」就完成評分,是我覺得最好用的地方。不過真正使用WP-Postrating之後,有些地方還是需要做點「微調」,於是我把修改的部分寫下來,希望有需要的朋友可以得到一些幫助。
一、 預設評分
WP-Postrating原本並沒有預設每篇文章的評分,於是可能造成以下的情況:
文章A—有10位讀者給分數,其中9為給5分,另一位給4分,平均4.9分;
文章B—只有1位讀者給分數,給5分,平均5分;
這樣看起來,當然是文章A比較受歡迎,但依照分數排序時,文章B卻會永遠排在第一名,因為文章A的分數永遠也不可能超過文章B了(滿分5分)。因此如果每篇文章事先都有一個分數(例如3分),就可以避免掉上述問題。解決方法如下:
1. 將現有文章加入評分:若在啟用WP-Postrating之前,你就已經有很多文章,千萬不要一篇一篇自己去打分數,太累!請先啟用WP-Postrating插件,他會幫文章開啟三個自訂欄位。此時可利用「Mass Custom Fields Manager」插件,把每篇文章的ratings_users欄位(有多少人評價這篇文章)設為1;把每篇文章的ratings_score欄位(這篇文章的總得分)設為3;把每篇文章的ratings_average欄位(這篇文章的平均得分)設為3,這樣每篇文章就有一個三分的評價了。
2. 未來發表的每篇文章預設評分:修改wp-postratings.php中### Function: Add Rating Custom Fields段落,將ratings_users(有多少人評價這篇文章)的預設值由0改為1;將ratings_score(這篇文章的總得分)的預設值由0改為3;將ratings_average(這篇文章的平均得分)的預設值由0改為3。(相關說明)
二、 搜尋給定時間範圍內的好評文章
WP-Postrating有提供例如:過去一週、過去一個月、或過去一年內評分最高的文章列表功能,但這些時間範圍都有一個基準,那就是由「今天」起算。加菲貓漫畫部落格一直想選出「年度」精選漫畫(例如2008),那時間範圍就必須是2008-1-1到2008-12-31,這時候就必須要自己修改設定時間範圍的程式碼了。解決方法如下:
1. 修改wp-postratings-stats.php中### Function: Display Highest Rated Page/Post With Time Range段落(根據1.4版改寫,其他功能可以比照改寫),將283-326行複製一份,貼在327行之後。
2. 將283行的註解改為### Function: Display Highest Rated Page/Post With Time Range New
3. 將284-285行的功能名稱get_highest_rated_range
更名為get_highest_rated_range_new
4. 將285行中$time = '1 day',
變數刪除,並在原處新增兩個變數$min_time = '2009-06-01',$max_time = '2009-06-30',
代表預設的起始時間(2009-06-01)和結束時間(2009-6-30)。
5. 刪除290行$min_time = strtotime('-'.$time, current_time('timestamp'));
6. 將311行中,原本是比較評分時間範圍的rating_timestamp >= $min_time
改成比較文章時間$wpdb->posts.post_date >= '".$min_time."' AND $wpdb->posts.post_date <= '".$max_time."'
7. 在想要顯示好評文章列表的頁面(建議新增一個頁面樣版),加入WP-Postrating預設的語法(其中功能名稱有加_new):
8. 如果想要顯示2008-01-01到2008-12-31,就將上面第三行中敘述部分改成get_highest_rated_range_new(‘2008-01-01’,’ 2008-12-31’);
其餘設定則參閱原始語法。
三、計分方式調整
在「顯示特定時間範圍內評分列表」的功能中,計分方式好像有點怪,他不是利用每篇文章的自訂欄位數值,而是利用評分記錄。如此一來,我們剛剛加入的預設評分就無法發揮功效,所以還要調整一下,解決方法如下(同樣修改wp-postratings-stats.php):
1. 將第311行總得分部分
SUM($wpdb->ratings.rating_rating) AS ratings_score
改成SUM($wpdb->ratings.rating_rating)+3 AS ratings_score
2. 將第311行平均得分部分ROUND(((SUM($wpdb->ratings.rating_rating)/COUNT($wpdb->ratings.rating_postid))), 2) AS ratings_average
改成ROUND((((SUM($wpdb->ratings.rating_rating)+3)/(COUNT($wpdb->ratings.rating_postid)+1))), 2) AS ratings_average
四、好評列表直接顯示全文
原始預設的列表,只會顯示清單,但我想把漫畫內容直接顯示在列表,解決方法如下(同樣修改wp-postratings-stats.php):
1. 將第314行原本輸出的內容
$output .= expand_ratings_template($temp, $post->ID, $post, $chars)."n";
改為$output .= expand_ratings_template($temp, $post->ID, $post, $chars)."n".nl2br($post->post_content)."n";
五、直接從網址丟入參數
步驟二7中的PHP語法必須放在網頁模版中,或是利用頁面可以執行PHP的插件。但加菲貓漫畫就算一年一個精選列表,也要三十幾個網頁模版或文章頁面(崩潰),所以如果能用網址來丟起迄時間的參數,就只要一個頁面可以搞定!解決方法如下:
1. 開啟一個新頁面,並編寫一個頁面模版,加入步驟二7中的PHP語法,假設網址為:http://mygeotravel.org/garfield/blog/?page_id=12791
2. 將網頁模版中的
改為
3. 在瀏覽器上輸入網址http://mygeotravel.org/garfield/blog/?page_id=12791&date1=2009-05-01&date2=2009-06-20
網址中的date1和date2參數就會被抓進頁面的PHP中,當作起迄日期。
4. 以後只要在頁面中輸入上述連結,就可以連結到特定日期範圍的好評列表。
5. 比照上述方式,另外複製一份模版,把get_highest_rated_range_new($_GET['date1'],$_GET['date2'])
改成get_highest_rated_range_new('2006-06-01','2006-06-30')
,也就是直接給定這個模版秀出的時間區段。然後新增一篇「頁面」並選定這個模版,這樣就可以把某個時間區段的票選頁面設為首頁,讓所有訪客方便投票。
2009.07.11 Updated
六、讓好評列表頁面可以投票
上個步驟中所產生的好評頁面無法直接投票?!讀者必須點選文章標題進入文章後才能投票,很不方便。解決方法如下:
1. 找到步驟四-1那行程式,在其上方加入一行
the_ratings($start_tag = 'div', $post->ID, $display = true);
即可。在the_ratings()
所呼叫出來的投票功能,使用的是Ratings Vote Text、Ratings Voted Text、Ratings No Permission Text和Ratings None模版(在wp-postratings的ratings templates中設定),也就是和正常情況下每篇文章所顯示的投票功能相同。2. 由於好評列表使用的是Highest Rated模版(在wp-postratings的ratings templates中設定),因此Highest Rated模版中若有顯示星星(
%RATINGS_IMAGES%
)或已經有幾個人投票等等,會和我們剛剛加入那行重複,因此建議在Highest Rated模版中去除那些資訊。建議保留文章標題(%POST_TITLE%
)並讓文章標題放在文章連結(%POST_URL%
)之中。
3. 如此一來,highest rated的widget就不要用比較好。
最近也在搞这个东东.
一定要顶一下.
收藏了研究中…
很高興可以幫得上忙~