当wp_query没有时,query_posts工作 - 试图理解(WordPress)

时间:2013-02-15 21:52:08

标签: wordpress loops

这是一个奇怪的问题,因为我已经找到了一个有效的解决方案。但是:我真的很想理解它为什么会起作用,以及为什么似乎它应该拥有的东西,没有。如果你能解释我为什么是白痴,我将不胜感激。

任务:修改主循环以排除类别,并且每页仅显示两个帖子。

这是有效的:

    <?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

1 个答案:

答案 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的信息:

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