用query_posts列出特定範圍文章 (1)

query_posts是一個非常好用的調用文章函數,可以做到同頁面內顯示多種不同範圍的文章,可以抓出某分類、標籤、日期及作者都可以,甚至連自訂欄位的資料也可以拿來當時判斷範圍的條件資料。

首先 query_posts 的寫法通常是如以下這樣的結構,先定義查詢再加入文章迴圈程式碼後再重置查詢就差不多ok了。









再來是說明在query_posts裡可以輸入哪些參數來顯示出自己想要的文章範圍。

 

Category Parameters(文章分類參數)

  • cat – 輸入分類編號來顯示出該分類內的文章
  • category_name – 輸入分類名稱來顯示出該分類內的文章
  • category__and – 顯示同時被列入多個分類的文章 (限輸入分類編號來識別)
  • category__in – 顯示該分類內的文章,但不包括子分類內的文章 (限輸入分類編號來識別)
  • category__not_in – 除某分類內的文章,其他分類及子分類文章均顯示 (限輸入分類編號來識別)

範例:

 array(2,6)));

// 顯示分類編號為6的文章  (但不包括子分類文章)
query_posts(array('category__in' => array(6)));

// 除了分類編號為2及6的文章,子分類及其他分類文章都顯示
query_posts(array('category__not_in' => array(2,6)));
?>

 

Tag Parameters(標籤參數)

  • tag – 輸入標籤名稱來顯示含有該標籤的文章
  • tag_id – 輸入標籤編號來顯示含有該標籤的文章
  • tag__and – 顯示符合含有多個特定標籤的的文章 (限輸入標籤編號來識別)
  • tag__in – 顯示符合其中一個特定標籤的的文章 (限輸入標籤編號來識別)
  • tag__not_in – 只要有該標籤的文章一律不顯示 (限輸入標籤編號來識別)
  • tag_slug__and – 顯示符合含有多個特定標籤的的文章 (限輸入標籤代稱來識別)
  • tag_slug__in  – 顯示符合其中一個特定標籤的的文章 (限輸入標籤代稱來識別)

範例:

 array(37,47));

// 僅顯示標籤帶有編號37或47的文章
query_posts(array('tag__in' => array(37,47));

// 僅顯示標籤不帶有編號37或47的文章
query_posts(array('tag__not_in' => array(37,47));
?>

 

Author Parameters(作者參數)

  • author – 輸入作者編號來顯示該作者發表的文章
  • author_name – 輸入作者名稱來顯示該作者發表的文章

範例:


 

Post & Page Parameters(文章 & 分頁參數)

 27

// 顯示文章代稱為about-my-life的文章
'name' => 'about-my-life'

// 顯示分頁編號為7的分頁
'page_id' => 7

// 顯示分頁代稱為about的分頁
'pagename' => 'about'

// 當文章超過 5 篇時就僅顯示 5 篇文章並且搭配換頁程式碼顯示換頁連結,設為 -1 則不換頁全部顯示。
'posts_per_page' => 5

// 當設定為 6 時就顯示 6 篇文章,設為 -1 則顯示範圍內的全部文章。
'showposts' => 6

// 僅顯示文章編號為5,12,2,14,7的這 5 篇文章
'post__in' => array(5,12,2,14,7)

// 僅顯示文章編號不為5,12,2,14,7的其他全部文章
'post__not_in' => array(6,2,8)

// 顯示文章類型為分頁的文章,預設值為 post (文章),可以使用的數值有 attachment(媒體檔頁面), page(分頁), post(文章), 或 revision(修訂)。
'post_type' => 'page'

// 顯示文章狀態為公開性質的文章,可以使用的數值有 pending(審核中), draft(草稿), future(排程), private(私人), trash(垃圾)。
'post_status' => 'publish'

// 顯示文章範圍內的第 93 頁
'post_parent' => 93
?>

 

這邊先插一段說明如何將多個參數加在一起使用,有兩種寫法,一種是用 & 來連接多個參數,另一種是用 array 來組合多個參數。
不過像是cat這種多個數值是用逗號來分隔的話是不能用在array裡的,當然兩種寫法也是可以混在一起用。

範例 1:顯示分類編號為9及8的文章,並且只列出使用CSS或CKEditor標籤的文章,每頁顯示 5 篇文章。

 5,
	'paged'=>$paged
);
query_posts('cat=9,8&tag=CSS,CKEditor&' . $args); ?>

 

範例 2:顯示分類編號為9及8但不包括子分類的文章,並且不列出文章編號為6,2,8的文章,每頁顯示 5 篇文章。

 array(9,8),
	'post__not_in' => array(6,2,8),
	'posts_per_page' => 5,
	'paged'=>$paged
);
query_posts($args);
?>

 

Sticky Post Parameters(置頂文章參數)

get_option('sticky_posts'))

// 將文章的置頂屬性清除掉,以正常文章順序排序(例如發表日期)顯示出來
caller_get_posts=1
?>

 

範例 1:只顯示置頂文章,如果沒有就不顯示。

 1,
	'post__in'  => $sticky,
	'caller_get_posts' => 1
);
query_posts($args);
if($sticky[0]) {
   // 在這裡輸入迴圈區塊程式碼...
}
?>

 

範例 2:顯示文章,但不顯示置頂文章。

get_option("sticky_posts")));
?>

 

範例 3:顯示分類編號為6的文章、每頁顯示 3 篇文章,並且將此分類下文章的置頂屬性清除掉,以正常文章順序排序(例如發表日期)顯示出來。

 

下集待續…

0 0 votes
Article Rating
Subscribe
Notify of
18 Comments
Inline Feedbacks
View all comments
生蛋
14 years ago

請問一下
這方法可以用在分頁上面嗎!?

新增一篇文章
切換到html模式
把程式碼貼上
發表之後
空空如也…

生蛋
14 years ago

瞭解了
你的文章都寫得不錯
希望有空能多寫一些好文出來^^

Carrie
14 years ago

這運用在主題上面真的很好用呢!

生蛋
14 years ago

你好
想請問一下
我已經透過 query_posts(‘cat=5’);
將分頁裡面的資料都抓出來也正常顯示了
但因為篇數過多
所以要有分頁功能
可是根據網路上面收尋到的分頁語法
雖然可以顯示一共有幾頁也可以換頁
但是怎麼換頁
還是顯示那幾篇文章而已
不知道是不是能夠有教學文章可以教一下呢?

謝謝

生蛋
14 years ago

痾…
還真的是我沒有加上去
感謝你

黑龍
13 years ago

遇到問題了,現在我需要在特定的分頁上調用特定分類的文章…例如
分頁縮名為”page1″的時候,我要在該頁面調用分類名稱為”page1″的文章;
分頁縮名為”apple”的時候,我要在該頁面調用分類名稱”apple”的文章;

換句話說,就是分頁要調用分類名稱=分頁名稱的文章

我試過這種方法:query_posts(‘category_name=the_title();’);
the_title(); 是不是有適合的參數可以替換它?

黑龍
13 years ago

夫,我成功了!
這是我的方法:

$abc = the_slug();
$args = array(
	'category_name' => $abc,
	'showposts' => 3,
	'orderby' => rand,
);
			 query_posts($args);

the_slug()是我在function.php定義的功能,可以抓取文章縮略名。

黑龍
13 years ago

這玩意兒讓我想了一個月。

trackback
12 years ago

[…] 另外,他還提供了兩篇文章供我參考。 Function Reference/query posts/ 用 query_posts 列出特定範圍文章 […]

蛐蛐
蛐蛐
12 years ago

您好~想问下,如果想显示某分类下排除掉某标签以外的文章~应该如何设置呢~谢谢!

trackback
12 years ago

[…] 這邊用到的就是query_posts函式,詳細用法可以參考MR. 夫的文章、文章。 […]

赤月
12 years ago

怎麼辦…這裡好像只有我不知道要加在哪個網頁~~(嘆