Multiple Loops Breaking Pages

时间:2013-05-31 作者:JacobTheDev

我是WordPress的新手,我对“循环”有意见我在页面的左侧有一个侧边栏,用来显示两个类别的最新帖子。在页面的中间,应该有特定页面的内容。在右栏中,应该有特定类别的帖子。

问题是:当我设置左列时,中间一列显示的是帖子内容,而不是页面。看见http://opachicago.com/wp/ 如果这不合理的话。

以下是我的循环代码:

左列(应显示最新帖子):

<?php query_posts(\'category_name=News and Events, Uncategorized&showposts=5\'); ?>
<?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>   
        <p><?php the_time(\'M j\') ?>: <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
    <?php endwhile; ?>
<?php endif; ?>
中间列(应显示页面内容):

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
    <?php the_content(); ?>
<?php endwhile; ?>

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

您的页面行为异常,因为您正在使用query_posts 这会破坏主查询。页面上依赖于主查询的任何其他内容在query_posts 跑步Don\'t use query_posts.

$qry = new WP_Query(\'category_name=News and Events, Uncategorized&showposts=5\'); 
if ($qry->have_posts()) { 
  while ($qry->have_posts()) {
   $qry->the_post(); 
   // your Loop as normal
  }
} else {
  // no posts found
}
在此循环结束时global $post 变量将设置为辅助循环中的最后一项,而不是主查询循环中的当前项。您可以使用以下代码对此进行演示:

var_dump($post->post_name); // main Loop
$qry = new WP_Query(array(\'post_type\' => \'page\',\'posts_per_page\' => 1));
while ($qry->have_posts()) {
  $qry->the_post();
  var_dump($post->post_name); // secondary Loop
}
var_dump($post->post_name); // Still the secondary Loop
因为大多数循环the_post() 开始时,应在该点重置该变量,因此重置$post 可能根本没有必要。为了避免这个问题,我原本wp_reset_query 在循环结束后的一行上,它会进行排序$post, 但作为@Rarst points out here, 那太过分了wp_reset_postdata 会是更好的选择。

参考文献

http://codex.wordpress.org/Function_Reference/query_posts

结束

相关推荐

对外部PHP脚本中GET_POSTS返回的帖子进行计数

我使用外部PHP脚本中的WP,包括wp-load.php 文件到目前为止,所有功能和一切都按预期工作,除了一件事:我无法获得$wp_query->found_posts 在我用get_posts() 作用有什么提示我应该用什么来代替吗?谢谢