如何让wordpress覆盖以前的帖子查询?

时间:2009-03-03 20:27:20

标签: php wordpress

我的页面顶部有一个类别列表,通常应列出其下方的帖子。使用以下命令创建类别列表:

    <?php $display_categories = array(4,7,8,9,21,1); $i = 1;
foreach ($display_categories as $category) { ?>
<?php single_cat_title(); ?> //etc
</div>
    <?php } ?>

然而,这似乎使按照类别的帖子循环顺序发布。我希望它忽略类别排序和按日期降序排列。我已经创建了一个新的WP_Query,因为根据文档你不能使用query_posts()两次,所以以防万一。

    <?php $q = new WP_Query("cat=-1&showposts=15&orderby=date&order=DESC");
    if ( $q->have_posts() ) : while ( $q->have_posts() ) : $q->the_post(); ?>
    the_title(); // etc
    endwhile; endif; ?>

但是,依然似乎是按类别(与上面的列表相同的顺序)排序,然后按日期排序,而不是按日期排序。

3 个答案:

答案 0 :(得分:2)

我之前也遇到过这个问题。

试试这个:

      <?php
     global $post;
     $myposts = get_posts('numberposts=5');

     foreach($myposts as $post) : 
     setup_postdata($post);
     ?>
       <div <?php post_class(); ?>>
         <div class="title">
           <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
           <p class="small"><?php the_time('F j, Y'); ?> by <?php the_author(); ?></p>
         </div>
         <?php the_excerpt(); ?>
       </div>
 <?php 
     endforeach; 
 ?> 

重要的一行是'全球$ post;'。

这应该重置您的全局查询。 'setup_postdata($ post)方法对于访问'the_author()'或'the_content()'等函数是必要的。

-Chris

答案 1 :(得分:0)

query_posts有时很挑剔。尝试这样的事情,看看它是否有效:

query_posts(array('category__not_in'=>array(1),
                  'showposts'=>15,
                  'orderby'=>date,
                  'order'=>DESC));

由于这不是问题,请尝试将update_post_caches($ posts)添加到第二个循环中,如下所示:

<?php $q = new WP_Query("cat=-1&showposts=15&orderby=date&order=DESC");
if ( $q->have_posts() ) : while ( $q->have_posts() ) : $q->the_post(); update_post_caches($posts); ?>
the_title(); // etc
endwhile; endif; ?>

据说这是solves some plugin problems

答案 2 :(得分:0)

我对wordpress没有任何经验,但有几种可能性:

  1. 您在调用query_posts()的字符串中定义了两次“order”参数,我不知道是否会导致问题。
  2. 同样,“show”不是有效参数,您可能一直在寻找“showposts”。
  3. 此处描述了参数及其效果: http://codex.wordpress.org/Template_Tags/query_posts#Parameters