WordPress實現文章按最新評論時間排序
來源:程序員人生 發布時間:2014-01-08 18:06:00 閱讀次數:3602次
WordPress的首頁、分類頁、標簽頁等存檔頁,默認是按照發布時間對文章進行排序的,現在想按最新評論時間排序,其實這個功能就是類似論壇的帖子列表效果,新發布的帖子置頂,有新評論的帖子也同樣置頂,這樣做的好處是可以增加互動,增加帖子評論數。在WordPress下也是可以實現這樣的功能:
- 新發布(新更改)的文章排在頂部
- 有新評論的文章立即排到頂部
- 所有文章按照其最新一條評論的時間排序
實現的方法是給每篇文章添加一個自定義字段commentTime,這個字段的值為最新一條評論的時間,然后使用query_posts函數實現所有文章按照自定義字段commentTime的值進行排序。實現原理就這么簡單,下面講講具體的實現方法:
一、給所有文章添加自定義字段commentTime
給每篇文章添加這個自定義字段的目的是為了方便對文章進行排序。可能叫你手動一篇一篇文章地添加自定義字段,尤其是你有幾百上千篇文章的情況下,一定會是你抓狂。不過請你放心,我不會讓你用這么做,這里我寫了個PHP腳本,可以幫你自動給所有文章添加字段commentTime。使用方法:下載以下文件,然后上傳到跟wp-config.php相同的目錄(就是WordPress的安裝目錄)下,然后在瀏覽器中運行這個文件,如 http://example/meta-sql.php
下載地址:meta-sql.php
二、添加相應action代碼
這一步添加的代碼可以實現發布新文章(或新更改)、有新評論的時候,自動添加/更新自定義字段commentTime的值,不需要你手動干預。在你當前使用主題的functions.php中添加以下php代碼:
function comment_meta_add($post_ID) {
// 發布新文章或修改文章,更新/添加commentTime字段值
global $wpdb;
if(!wp_is_post_revision($post_ID)) {
if( !update_post_meta($post_ID, 'commentTime', time()) ) {
add_post_meta($post_ID, 'commentTime', time());
}
}
}
function comment_meta_update($comment_ID) {
// 發布新評論更新commentTime字段值
$comment = get_comment($comment_ID);
$my_post_id = $comment->comment_post_ID;
update_post_meta($my_post_id, 'commentTime', time());
}
function comment_meta_delete($post_ID) {
// 刪除文章同時刪除commentTime字段
global $wpdb;
if(!wp_is_post_revision($post_ID)) {
delete_post_meta($post_ID, 'commentTime');
}
}
add_action('save_post', 'comment_meta_add');
add_action('delete_post', 'comment_meta_delete');
add_action('comment_post', 'comment_meta_update');
三、query_posts更改文章排序
如果你只想實現首頁的文章按最新評論時間排序,那么此步只修改主題目錄下的index.php即可,如果還想修改其他存檔頁面如分類頁、標簽頁等,那就修改相應的模板文件,如archive.php。
舉例說明,在index.php中查找代碼 if (have_posts())
或 while (have_posts())
,在上一行添加query_posts函數即可:
if(!$wp_query)
global $wp_query;
$args = array(
'meta_key' => 'commentTime',
'orderby' => meta_value,
'order' => DESC
);
$args = array_merge( $args, $wp_query->query );
query_posts($args);
對archive.php的修改也一樣!如果對query_posts的用法不熟悉,可以看這篇文章: WordPress函數query_posts用法匯總。
數據庫清理腳本
如果某一天你不想使用這個功能了,你可以下載以下文件幫助你自動清理數據庫中的無用信息,放到WordPress的安裝目錄下,然后在瀏覽器中執行一下就可以了,如http://example/meta-clear-sql.php
下載地址:meta-clear-sql.php
好了,全部教程到此就結束了,完成以上步驟后就什么都不用管了,文章就是按照最新評論時間進行排序了。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈