如何将每3个帖子包装在一个div中(并关闭最后一个div)

时间:2016-06-14 作者:Beth

我的代码将每3个帖子包装在一个div中(这样即使不同的高度,帖子也会水平排列)。它在3个帖子后关闭div,但问题是如果没有更多帖子,div将保持打开状态,但在该div行中以1或2结尾。如何关闭最后一个分区?

    <?php
if ( have_posts() ) : ?>

    <?php $i=1; ?>

    <?php
    /* Start the Loop */
    while ( have_posts() ) : the_post(); ?>

    <?php if($i==1 || $i%3==1) echo \'<div class="row">\' ;?>

        <div class="project">
        </div> <!-- /.project -->

    <?php if($i%3==0) echo \'</div>\' ;?>    

    <?php $i++;endwhile;  

2 个回复
SO网友:Howdy_McGee

这纯粹是PHP,被认为是离题的,但这是我的观点:

<?php if ( have_posts() ) : ?>

    <?php
        while ( have_posts() ) :
            the_post();
            $i = $wp_query->current_post;
            echo ( 0 == $i % 3 ) ? \'<div class="row">\' : \'\';
    ?>

        <div class="project">
        </div> <!-- /.project -->

    <?php
            echo ( $wp_query->post_count == $i || 2 == $i % 3 ) ? \'</div>\' : \'\';
        endwhile;
    ?>

<?php endif; ?>
The$wp_query->current_post 是一个内置查询属性,统计为0并保存posts数组的索引。

SO网友:Pat J

像这样的方法应该会奏效:

<?php
if ( have_posts() ) { 

    $i = 1;
    // Always start the list with a div.row 
    echo( \'<div class="row">\' );
    /* Start the Loop */
    while ( have_posts() ) {
        the_post();     
        if( $i%3 == 0 && $i != 1 ) {
            echo \'</div>\' . PHP_EOL . \'<div class="row">\';
        }
    ?>

    <div class="project">
    </div> <!-- /.project -->

<?php

    } // end of the while() loop
    // end the last div.row -- this will always execute if have_posts() is true
    echo( \'</div>\' ); 
} // end of the if( have_posts() ) conditional
Note: 我尚未测试此代码。