2013-02-15 24 views
1

這是一個奇怪的問題,因爲我已經找到了一個工作解決方案。但是:我真的很想明白它爲什麼起作用,爲什麼似乎就像它應該有的那樣,沒有。如果你能解釋我爲什麼是白癡,我會很感激。query_posts wp_query沒有工作 - 試圖理解(WordPress)

任務:修改主循環以排除一個類別,並且每頁只顯示兩個帖子。

這裏是什麼工作:

<?php 
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
    query_posts("cat=-17,-18&posts_per_page=2&paged=$paged"); 
    ?> 

這裏是沒有:

<?php $query = new WP_Query('cat=-17', 'posts_per_page=2'); ?> 

也這樣做:

<?php $query = array (
    'cat' => -17, 
    'posts_per_page' => 2 
    ); 
    $queryObject = new WP_Query($query); 
?> 

所以說:這是怎麼回事?

非常感謝,

-m

+0

也許這可以幫助:什麼時候你應該使用WP_Query VS query_posts()VS get_posts()](HTTP:/ /wordpress.stackexchange.com/q/1753/12615) – brasofilo 2013-02-15 23:09:25

回答

2

有幾個原因,這是行不通的:

1)​​沒有工作,因爲你正在試圖通過2個參數。它需要這個樣子,如果你正在做一個查詢字符串:

$query = new WP_Query('cat=-17&posts_per_page=2'); 

2)你的第二個查詢是正確的,但爲什麼它的「不工作」的原因極有可能你以後的循環中更多 - 你沒有留下你的代碼。當你使用query_posts,你正在修改的全球$ wp_query對象,所以你的循環可以僅僅是這樣的:

if(have_posts()) : while(have_posts()) : the_post(); 
    //Do stuff.... 
endwhile;endif; 

但是,使用一個新的實例WP_Query它需要尋找不同的。這是你的固定代碼:

<?php 
$query = array (
    'cat' => -17, 
    'posts_per_page' => 2 
); 
$queryObject = new WP_Query($query); 
if($queryObject->have_posts()) : while($queryObject->have_posts()) : $queryObject->the_post(); 
    //Do stuff.... 
endwhile;endif; 

更多WP_Query這裏:

http://codex.wordpress.org/Class_Reference/WP_Query

+0

還有一件事:如果您排除多個類別,請使用category__not_in。 ''category__not_in'=> array(17,18)' – maiorano84 2013-02-15 23:38:36

+0

太棒了。這有助於一堆。非常感謝! -m – Martin 2013-02-16 03:08:18