wordpress默認的是按照文章發布日期從新到舊來排列。
如果想修改文章列表中的文章排序,可以參考以下方法通過代碼實現。
主要原理是應用query_posts函數,這個函數功能很強大,大家仔細學習後就可以隨心所欲地進行各種排序。
基本用法:
首先介紹一下如何使用query_posts函數。在主題目錄下找到存檔頁面文件,存檔頁面包括index.php、archive.php等,一般分類頁、標籤頁、日期頁和作者頁等都是用archive.php。
確定了你要控制哪個頁面的文章列表,那麼我們就可以開始了,比如你想讓首頁的文章按評論數排序,那麼index.php中的代碼基本框架就是這樣的:
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php // query_posts函數 query_posts(‘orderby=comment_count’); // 主循環 if ( have_posts() ) : while ( have_posts() ) : the_post(); .. endwhile; else: .. endif; // 重置query wp_reset_query(); ?> |
其實你要做的就是在index.php中查找if (have_posts())或while (have_posts()),在前面添加query_posts函數即可。不過以上方式可能會導致首頁無法分頁,那你可以將query_posts函數改成這樣的行式:
// 下面這一行代碼是必須的,不然你的首頁不能分頁
1 2 3 4 5 6 7 |
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1; $args = array( // 這裡以下面的方式添加query_posts參數,具體參數可以參加官方文檔 ‘orderby’ => comment_count, ‘paged’ => $paged ); query_posts($args); |
下面是一些常見的query_posts函數用法,你可以直接用到你的主題中。
一、只顯示含有某個自定義字段的文章
1、打開WordPress當前主題目錄,打開index.php,搜索代碼: while (have_posts())
將其替換成:
1 2 3 4 5 6 7 8 9 10 11 12 |
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1; $args=array( ‘meta_key’ => ‘sort’, ‘orderby’ => meta_value, ‘paged’ => $paged, ‘order’ => DESC ); query_posts($args); while (have_posts()) 接着搜索: endwhile; 將其改成: endwhile;wp_reset_query(); |
2、給之前發表的所有文章添加自定義字段(或者稱作自定義欄目,在文章編輯頁底部可以看到),名稱為 sort ,值填數字。這樣在首頁,文章的排列順序就按照sort字段的值,從大到小排列了。通過修改sort字段的值,可以達到自定義文章排列順序的目的。
3、需要注意的是,通過以上修改後,你必須給所有文章添加自定義字段sort,否則沒有添加sort字段的文章將無法在首頁顯示。這也許就是手動排序需要付出的代價吧,要不然何謂手動?
4、如果你同時想手動修改標籤頁、分類頁等存檔頁面的文章排列順序,同樣可以按照第一步介紹的方法來操作,修改主題目錄下的archive.php等。
二、怎樣讓某分類的文章不顯示/顯示
如果你不想讓某分類的文章出現在主循環中,那麼你可以使用query_posts添加參數category__not_in即可:
1 2 3 4 5 6 7 |
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1; $args = array( // 2, 6就是你不想顯示的分類ID,多個用半角逗號隔開 ‘category__not_in’ => array(2, 6), ‘paged’ => $paged ); query_posts($args); |
如果只想讓顯示某個分類的文章,可以將category__not_in改成category__in。同理,如果不顯示某標籤下的文章,可以將category__not_in改成:tag__not_in,或者只想讓顯示某個標籤下的文章,可以將category__not_in改成tag__in,後面跟着標籤的ID即可。
三、如何對文章進行排序
1 2 3 4 5 6 7 |
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1; $args = array( // 以下代碼中的title就是orderby的值,按標題排序 ‘orderby’ => title, ‘paged’ => $paged ); query_posts($args); |
根據orderby的值不同,可以讓文章按照很多種方式進行排序,下面是列舉幾個常見的值及其對應的排序方式:title:按標題;date:按發布日期;modified:按修改時間;ID:按文章ID;rand:隨機排序;comment_count:按評論數
四、只顯示相應ID的文章
如我只想顯示ID為2,4,6的文章,可以使用以下代碼:
1 2 3 4 5 6 7 |
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1; $args = array( // 以下代碼中的2,4,6就是文章的ID ‘post__in’ => array(2,4,6), ‘paged’ => $paged ); query_posts($args); |
如果不想顯示2,4,6這幾篇文章,可以將 post__in 改成 post__not_in 。另外如果只想顯示置頂文章,那麼可以將array(2,4,6)改成get_option(‘sticky_posts’),這段代碼會自動給你填充所有置頂文章的ID。
五、讓置頂文章不置頂
如果你不想讓置頂文章顯示在頂部,而是讓它們安裝正常的順序排列,那麼可以使用以下代碼:
1 2 3 4 5 6 |
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1; $args=array( ‘paged’ => $paged, ‘caller_get_posts’ => 1 ); query_posts($args); |
六、列出所有狀態的文章
WordPress的文章狀態有很多種,包括已發布、草稿、已刪除、私人的、定時發布的等等,如果你想將這些文章都統統顯示出來,那麼可以這樣:
1 2 3 4 5 6 |
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1; $args = array( ‘post_status’ => array(‘publish’, ‘pending’, ‘draft’, ‘future’, ‘private’, ‘trash’), ‘paged’ => $paged ); query_posts($args); |
post_status參數可以控制具體的文章狀態,值包括pending(待審)、publish(已發布)、draft(草稿), future(定時), private(私有), trash(已刪除)。
七、控制文章的數量
如果你想控制要顯示的文章數量,可以使用showposts參數:
1 2 3 4 5 6 7 |
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1; $args = array( // 控制只顯示10篇文章,如果將10改成-1將顯示所有文章 ‘showposts’ => 10, ‘paged’ => $paged ); query_posts($args); |
最後…
如果你只是想控制首頁、分類頁等每各分頁顯示的文章數量,可以在WordPress管理後台 – 設置 – 閱讀那裡設置博客頁面至多顯示多少篇文章。