1

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

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

这是有效的:

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

4

1 回答 1

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

于 2013-02-15T23:26:59.447 回答