PHP循环:每三项语法添加一个具有不同类的div

时间:2019-02-01 10:45:37

标签: php wordpress loops

我想为我的帖子创建一个循环,该循环将a和class包装到每三个帖子组中。棘手的是,有3个不同的类需要保持循环。

因此,基本上,它应该创建一个div,其中“右”类环绕前3个帖子,然后创建第二个div,其中“左”类环绕下3个帖子,第三个div并环绕下3个帖子之后的。

随着帖子的继续,需要重复这种模式。

它看起来像这样:

<div class="right">
  <div>Post 1</div>
  <div>Post 2</div>
  <div>Post 3</div>
</div>
<div class="left">
  <div>Post 4</div>
  <div>Post 5</div>
  <div>Post 6</div>
  <div class="inner-div"></div>
</div>
<div class="middle">
  <div>Post 7</div>
  <div>Post 8</div>
  <div>Post 9</div>
  <div class="inner-div"></div>
</div>

重复

我已经尝试过:PHP loop: Add a div around every three items syntax,但这只是添加了第一堂课,然后重复了第二堂课。

1 个答案:

答案 0 :(得分:0)

我已修改您链接的参考答案,以符合您的要求。

原始答案: PHP loop: Add a div around every three items syntax

<?php
    $i = 1;
    $j = 0;
    $target_class = array( 'right', 'left', 'middle' );

    //added before to ensure it gets opened
    echo '<div class="'.$target_class[$j].'">';
    if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post();


         // Do whatever you want here.


         // if multiple of 3 close div and open a new div
         if($i % 3 == 0) {
            // echo inner div if target class is not right
            echo ( $j != 0 ? '<div class="inner-div"></div>' : '' );
            // send back to first position if it goes above the third position
            $k = ( ++$j == 3 ? 0 : $j );
            echo '</div><div class="'.$target_class[$k].'">';}

    $i++; endwhile; endif;
    //make sure open div is closed
    echo '</div>';
?>

这应该有效。不过没有测试。

编辑:已测试并修复。代码正常工作

编辑:2 更新代码以接受来自注释的请求。

编辑:3 更新代码以接受来自注释的请求。