然后回放帖子,只显示第一篇帖子

时间:2016-10-02 作者:Barry

有没有办法像往常一样运行循环(显示所有帖子),倒带帖子,然后进行二次循环(如果确实需要的话),以仅显示归档模板中的第一篇帖子?

我的要求是设置一个模板,在侧边栏中生成当前类别所有帖子的列表,然后在主内容区域仅显示第一篇帖子。

大致如下:

        <?php if (have_posts()) : ?>
            <div class="sidebar">
                <ul>
                    <?php while (have_posts()) : the_post(); ?>
                        <li>
                            <a href="<?php the_permalink() ?>" title="Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
                        </li>
                    <?php endwhile; ?>
                </ul>
            </div>
            <?php rewind_posts() ?>
            <div class="maincontent">
                <?php while (have_posts()) : the_post(); ?>
                    <?php the_content() ?>
                <?php endwhile; ?>
            </div>
        <?php endif; ?>

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

有几种方法可以实现您的需求:

选项1:

添加break 之后the_content() 在主内容循环中。

选项2:

您可以这样做,但我认为这不是一个好的解决方案。

<?php if (have_posts()) :
    $first_post = true;
    ?>
    <div class="sidebar">
        <ul>
            <?php while (have_posts()) : the_post(); ?>
                <?php
                    if ( $first_post ) {
                        $first_post_content = get_the_content();
                        $first_post = false;
                    }
                ?>
                <li>
                    <a href="<?php the_permalink() ?>" title="Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
                </li>
            <?php endwhile; ?>
        </ul>
    </div>
    <?php rewind_posts() ?>
    <div class="maincontent">
        <?php echo $first_post_content; ?>
    </div>
<?php endif; ?>
选项3:第二次查询。在我看来,这是最好的解决办法。

<?php if (have_posts()) : ?>
    <div class="sidebar">
        <ul>
            <?php while (have_posts()) : the_post(); ?>
                <li>
                    <a href="<?php the_permalink() ?>" title="Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
                </li>
            <?php endwhile; ?>
        </ul>
    </div>
    <?php rewind_posts() ?>
    <div class="maincontent">
        <?php $the_query = new WP_Query( array( \'posts_per_page\' => 1 ) ) ?>
        <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
            <?php the_content(); ?>
        <?php endwhile; wp_reset_postdata() ?>
    </div>
<?php endif; ?>