注:本文適合有WordPress主題制作基礎或?qū)@方面感興趣,并且喜歡動手的讀者閱讀!
WordPress函數(shù)query_posts在WordPress主題中是用于控制哪些文章可以出現(xiàn)在主循環(huán)中。
可能說主循環(huán)很多人都不懂,那么舉個例子:
首頁、存檔頁的這些文章(包括分頁中的)都是在主循環(huán)中的。在不使用query_posts函數(shù)控制的情況,首頁、存檔頁等都是按照文章的發(fā)布時間列出你博客上所有已發(fā)布的文章,而如果你想定義哪些文章可以顯示,哪些文章不顯示,文章按照什么樣的方法排序等,那么你就要用到query_posts函數(shù)了。
WordPress函數(shù)query_posts非常強大,參數(shù)無數(shù),用法更是無數(shù),下面簡單匯總一下query_posts函數(shù)的常用方法。開始之前,你可以先看看query_posts的官方文檔。看文檔對很多人來說可能會很困難,但是要成為一名優(yōu)秀的主題開發(fā)者,學會看文檔才是王道。
query_posts基本用法
首先介紹一下如何使用query_posts函數(shù)。在主題目錄下找到存檔頁面文件,存檔頁面包括index.php、archive.php等,一般分類頁、標簽頁、日期頁和作者頁等都是用archive.php。
確定了你要控制哪個頁面的文章列表,那么我們就可以開始了,比如你想讓首頁的文章按評論數(shù)排序,那么index.php中的代碼基本框架就是這樣的:
<?php
// query_posts函數(shù)
query_posts('orderby=comment_count');
// 主循環(huán)
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函數(shù)即可。不過以上方式可能會導致首頁無法分頁,那你可以將query_posts函數(shù)改成這樣的行式:
// 下面這一行代碼是必須的,不然你的首頁不能分頁
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
// 這里以下面的方式添加query_posts參數(shù),具體參數(shù)可以參加官方文檔
'orderby' => comment_count,
'paged' => $paged
);
query_posts($args);
下面是一些常見的query_posts函數(shù)用法,你可以直接用到你的主題中。
一、只顯示含有某個自定義字段的文章
如果你想只顯示添加了某個自定義字段的文章,并按照這個字段的值來對文章排序,那么你可以看看下面的例子:
1、打開WordPress當前主題目錄,打開index.php,搜索代碼:
while (have_posts())
將其替換成:
/**
* 名稱:WordPress手動修改文章排列順序
* 作者:露兜
* 博客:http://www.ludou.org/
* 最后修改:2010年11月14日
*/
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args=array(
'meta_key' => 'sort',
'orderby' => 'meta_value_num', // 須 WordPress 2.8 及以上版本
'paged' => $paged,
'order' => DESC
);
query_posts($args);
while (have_posts())
接著搜索:
endwhile;
將其改成:
endwhile;wp_reset_query();
2、給之前發(fā)表的所有文章添加自定義字段(或者稱作自定義欄目,在文章編輯頁底部可以看到),名稱為 sort ,值填數(shù)字。這樣在首頁,文章的排列順序就按照sort字段的值,從大到小排列了。通過修改sort字段的值,可以達到自定義文章排列順序的目的。
3、需要注意的是,通過以上修改后,你必須給所有文章添加自定義字段sort,否則沒有添加sort字段的文章將無法在首頁顯示。這也許就是手動排序需要付出的代價吧,要不然何謂手動?
4、如果你同時想手動修改標簽頁、分類頁等存檔頁面的文章排列順序,同樣可以按照第一步介紹的方法來操作,修改主題目錄下的archive.php等。
其實這種方式你可以看成怎樣只顯示我推薦的文章,那么含有這個自定義字段的文章就是推薦文章。
二、怎樣讓某分類的文章不顯示/顯示
如果你不想讓某分類的文章出現(xiàn)在主循環(huán)中,那么你可以使用query_posts添加參數(shù)category__not_in即可:
$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即可。
三、如何對文章進行排序
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
// 以下代碼中的title就是orderby的值,按標題排序
'orderby' => title,
'paged' => $paged
);
query_posts($args);
根據(jù)orderby的值不同,可以讓文章按照很多種方式進行排序,下面是列舉幾個常見的值及其對應的排序方式:title:按標題;date:按發(fā)布日期;modified:按修改時間;ID:按文章ID;rand:隨機排序;comment_count:按評論數(shù)
四、只顯示相應ID的文章
如我只想顯示ID為2,4,6的文章,可以使用以下代碼:
$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);
五、讓置頂文章不置頂
如果你不想讓置頂文章顯示在頂部,而是讓它們安裝正常的順序排列,那么可以使用以下代碼:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args=array(
'paged' => $paged,
'caller_get_posts' => 1
);
query_posts($args);
六、列出所有狀態(tài)的文章
WordPress的文章狀態(tài)有很多種,包括已發(fā)布、草稿、已刪除、私人的、定時發(fā)布的等等,如果你想將這些文章都統(tǒng)統(tǒng)顯示出來,那么可以這樣:
$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參數(shù)可以控制具體的文章狀態(tài),值包括pending(待審)、publish(已發(fā)布)、draft(草稿), future(定時), private(私有), trash(已刪除)。
七、控制文章的數(shù)量
如果你想控制要顯示的文章數(shù)量,可以使用showposts參數(shù):
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
// 控制只顯示10篇文章,如果將10改成-1將顯示所有文章
'showposts' => 10,
'paged' => $paged
);
query_posts($args);
如果你只是想控制首頁、分類頁等每各分頁顯示的文章數(shù)量,可以在WordPress管理后臺 – 設置 – 閱讀那里設置博客頁面至多顯示多少篇文章。
以上內(nèi)容轉(zhuǎn)載自露兜博客:http://www.ludou.org/wordpress_query_posts.html,非常感謝!





?? 非常贊,對于像我這樣的初學者非常有用,謝謝分享。
原來是這樣控制“只顯示含有某個自定義字段的文章”,學習了,這個好像挺多地方用到的
這個還是相當強大的。
好頂贊!
學習了