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管理後台 – 設置 – 閱讀那裡設置博客頁面至多顯示多少篇文章。