Wordpress - post中循环显示的帖子具有相同的the_excerpt()输出

时间:2014-10-03 09:00:46

标签: php wordpress loops

我遇到了一个问题,这很烦人。 问题是我的页脚中有两个循环,它们从两个不同的类别中加载了3个最后的帖子。它看起来像是:

<?php $posts = get_posts('category=21&orderby=desc&numberposts=3'); foreach($posts as $post) { ?>
    <div class="footer-text-block">
        <a href="<?php the_permalink() ?>" target="_parent">
            <span class="footer-white-bold"><?php the_title(); ?></span>
        </a><br />
        <span class="footer-grey-thick"><?php the_excerpt(); ?></span>
    </div>
<?php } ?>
<?php $posts = get_posts('category=22&orderby=desc&numberposts=3'); 
      foreach($posts as $post) { ?>
    <div class="footer-text-block">
        <a href="<?php the_permalink() ?>" target="_parent">
            <span class="footer-white-bold"><?php the_title(); ?></span>
        </a><br />
        <span class="footer-grey-thick"><?php the_excerpt(); ?></span>
    </div>
<?php } ?>

它输出的是:  http://i.stack.imgur.com/5C58t.png

这是显示页脚的帖子的内容: http://i.stack.imgur.com/R6ok7.png

你知道为什么会发生这种事吗?

2 个答案:

答案 0 :(得分:1)

这里有几个问题

  • 您需要在每个自定义查询后重置您的postdata,即 {/ 1}}的每个实例之后。您可以在get_posts()循环

  • 的每个结尾后添加wp_reset_postdata();
  • 您有几个foreach循环使用相同的foreach值。您必须记住,最后一个值存在于外部您的$post循环中,如果它没有被销毁,它将影响下一个foreach循环中的值,如果它具有一样的名字。您可以将值重命名为每个foreach循环的唯一值,也可以在foreach循环之后/之外使用unset($post)

  • 您需要先设置postdata,然后才能使用foreachthe_excerpt()等模板标记。只需在开始the_title()循环

  • 后立即添加setup_postdata($post);即可

答案 1 :(得分:0)

尝试使用setup_postdata($ post);使所有与事后相关的数据可用。你需要:

foreach($posts as $post) {
    setup_postdata($post);
    // the rest of your code
}

setup_postdata()