注:本文適合有WordPress主題制作基礎或對這方面感興趣,并且喜歡動手的讀者閱讀!
最近經常有網友跟我咨詢WordPress函數query_posts的相關用法,說起來query_posts實在是太強大,參數無數,用法更是無數,如果讓我說它的用法,我根本沒法一一說清楚。開始之前,你可以先看看query_posts的官方文檔。不過看文檔對很多人來說可能會很困難,本文將介紹幾種常見的用法,不過一切用法都是從官方文檔中來的,學會看文檔才是王道。
query_posts函數在WordPress主題中是用于控制哪些文章可以出現在主循環中,可能說主循環很多人都不懂,那么舉個例子,首頁、存檔頁的這些文章(包括分頁中的)都是在主循環中的。在不使用query_posts函數控制的情況,首頁、存檔頁等都是按照文章的發布時間列出你博客上所有已發布的文章,而如果你想定義哪些文章可以顯示,哪些文章不顯示,文章按照什么樣的方法排序等,那么你就要用到query_posts函數了,本站首頁的文章排序:隨機閱讀、評論最多和標題排序就是用query_posts函數來實現的。
首先介紹一下如何使用query_posts函數。在主題目錄下找到存檔頁面文件,存檔頁面包括index.php、archive.php等,一般分類頁、標簽頁、日期頁和作者頁等都是用archive.php,具體的WordPress主題文件構成可以看這篇文章:WordPress主題文件構成
確定了你要控制哪個頁面的文章列表,那么我們就可以開始了,比如你想讓首頁的文章按評論數排序,那么index.php中的代碼基本框架就是這樣的:
其實你要做的就是在index.php中查找if (have_posts())或while (have_posts()),在前面添加query_posts函數即可。不過以上方式可能會導致首頁無法分頁,那你可以將query_posts函數改成這樣的行式:
下面是一些常見的query_posts函數用法,你可以直接用到你的主題中。
如果你想只顯示添加了某個自定義字段的文章,并按照這個字段的值來對文章排序,那么你可以參加這篇文章:WordPress手動修改文章排列順序
其實這種方式你可以看成怎樣只顯示我推薦的文章,那么含有這個自定義字段的文章就是推薦文章。
如果你不想讓某分類的文章出現在主循環中,那么你可以使用query_posts添加參數category__not_in即可:
如果只想讓顯示某個分類的文章,可以將category__not_in改成category__in。同理,如果不顯示某標簽下的文章,可以將category__not_in改成:tag__not_in,或者只想讓顯示某個標簽下的文章,可以將category__not_in改成tag__in,后面跟著標簽的ID即可。
根據orderby的值不同,可以讓文章按照很多種方式進行排序,下面是列舉幾個常見的值及其對應的排序方式:title:按標題;date:按發布日期;modified:按修改時間;ID:按文章ID;rand:隨機排序;comment_count:按評論數
如我只想顯示ID為2,4,6的文章,可以使用以下代碼:
如果不想顯示2,4,6這幾篇文章,可以將 post__in 改成 post__not_in 。另外如果只想顯示置頂文章,那么可以將array(2,4,6)改成get_option('sticky_posts'),這段代碼會自動給你填充所有置頂文章的ID。
如果你不想讓置頂文章顯示在頂部,而是讓它們安裝正常的順序排列,那么可以使用以下代碼:
WordPress的文章狀態有很多種,包括已發布、草稿、已刪除、私人的、定時發布的等等,如果你想將這些文章都統統顯示出來,那么可以這樣:
post_status參數可以控制具體的文章狀態,值包括pending(待審)、publish(已發布)、draft(草稿), future(定時), private(私有), trash(已刪除)。
如果你想控制要顯示的文章數量,可以使用showposts參數:
如果你只是想控制首頁、分類頁等每各分頁顯示的文章數量,可以在WordPress管理后臺 – 設置 – 閱讀那里設置博客頁面至多顯示多少篇文章。
原文:http://www.ludou.org/wordpress_query_posts.html