如果Loop在最后一页上有奇数个帖子,那么其中的最后一个帖子的自定义样式

时间:2013-03-09 08:29:25

标签: php wordpress loops

我的循环显示两列中的帖子:

<?php
if (have_posts()): while (have_posts()) : the_post();
 $count++;
?>
    <?php  if ($count == 1) : ?>
    <div class="home-ci-row">

    <div style="padding: 0px;" class="main-column-item-wrap">
    CONTENT OF POST : Title, Thumbnail, Excerpt... etc
    </div>

    <div class="home-ci-gap"></div><!-- /* the gap */ -->

    <?php elseif ($count == 2) : ?>    

   <div style="padding: 0px;" class="main-column-item-wrap">
   CONTENT OF POST : Title, Thumbnail, Excerpt... etc
   </div> <!-- main-column-item-wrap -->


</div><!-- /* home-ci-row*/ -->

<?php $count = 0; ?>

      <?php else : ?>
    // No posts
<?php endif; endwhile; endif; ?>

您可以看到<div class="home-ci-row">在第一次计数和&amp;在第二个</div>

中关闭

所以当我的循环有一个偶数个帖子效果很好,但是奇数它不会关闭div

所以我的想法是:如果循环有偶数

http://i.stack.imgur.com/Hu4Ua.png

如果循环有奇数个帖子

http://i.stack.imgur.com/JjqzZ.png

3 个答案:

答案 0 :(得分:2)

顺便说一句,你可以这样做:

<?php
$count=0;
while(have_posts()){
    if($count%2==0){
        echo '<div class="home-ci-row">';
        //draw your left div here
    }else if($count%2==1){
        //draw your gap here
        //draw your right div here
        echo '</div>';
    }
    $count++;
}
//close div if count is an odd number
if($count%2==1) echo '</div>';
?>

答案 1 :(得分:1)

可以换成for循环吗?这是你需要的吗?

for ($i = 0; $i < $numberOfElements; $i++)
{ 
    //if (odd number) && (this is the last element)
    if (($i % 0 == 1) && ($i == $numberOfElements - 1))
    {
        //Special Case
    }
    else
    {
        //Normal Case
    }
}

警告:注意错误,PHP不是我最强的语言

答案 2 :(得分:0)

WP Development StackExchange

fischi上回答了这个问题

引自his answer

你可以更容易地做到这一点。在制作可以通过浮点数实现的布局时,不需要每隔一次声明一行。

在我的代码示例中,我只是使用$count来确定HTML元素的类。结合显示的帖子总数。

如果$wp_query->post_count到达的帖子总数$count并且总数是奇数,我会将元素分类为fullwidth。以同样的方式,我确定它是第一个还是第二个(参见IF声明)。

之后我需要做的就是为Loop中的每个HTML元素输出相应的Class。除了班级之外,没有任何元素彼此不同。

我使用PHP中的Modulo运算符(%)来确定奇数/偶数。如果我使用1并且$count % 2是奇数,则会提供$count。如果您对此运算符不确定,请阅读here

所以你的代码看起来像这样:

<?php
    $count = 0;
    if (have_posts()): while (have_posts()) : the_post();
        if ( ++$count == $wp_query->post_count && ( $wp_query->post_count % 2 ) == 1 ) {
            // if final count is reached AND final count is odd
            // full width item
            $postclass = "fullwidth";
            $opentag = '';
            $closingtag = '</div>';
        } else if ( ( $count % 2 ) == 1 ) {
            // if $count is odd it is the first item in a 'row'
            $postclass = "halfwidth first";
            $opentag = '<div class="home-ci-row">';
            $closingtag = '';
        } else {
            // second item in a row
            $postclass = "halfwidth second";
            $opentag = '';
            $closingtag = '</div>';
        }
?>
    <?php echo $opentag; ?>
    <div class="main-column-item-wrap <?php echo $postclass; ?>">
    CONTENT OF POST : Title, Thumbnail, Excerpt... etc
    </div><!-- main-column-item-wrap -->
    <?php echo $closingtag; ?>

<?php endwhile; endif; ?>