这是一个奇怪的问题,因为我已经找到了一个有效的解决方案。但是:我真的很想理解它为什么会起作用,以及为什么似乎它应该拥有的东西,没有。如果你能解释我为什么是白痴,我将不胜感激。
任务:修改主循环以排除类别,并且每页仅显示两个帖子。
这是有效的:
<?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 :(得分:2)
有几个原因导致它不起作用:
1)$query = new WP_Query( 'cat=-17', 'posts_per_page=2' );
无效,因为您试图传递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的信息: