Wrap every 4 posts in a custom wordpress loop with a div

    <?php
      $args = array(
      'post_type' => 'college',
      'posts_per_page' => -1,
      'order' => 'DESC',
      'orderby' => 'menu_order'
      );

      $the_query = new WP_Query( $args );
      if ( $the_query->have_posts() ) :
      while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

      <div class="col-3">
        <?php the_title(); ?>
      </div>

   <?php
   endwhile;
   endif;
   wp_reset_postdata();
   ?>

Hi,
I’ve never done this before. I’m trying to wrap every 4 posts in the loop above inside a <div class="row"></div>

Related posts

2 comments

  1. This should sort you out

    $args = array(
        'post_type' => 'college',
        'posts_per_page' => -1,
        'order' => 'DESC',
        'orderby' => 'menu_order'
    );
    
    $the_query = new WP_Query($args);
    if ($the_query->have_posts()) :
        $counter = 0;
        while ($the_query->have_posts()) : $the_query->the_post();
            if ($counter % 4 == 0) :
                echo $counter > 0 ? "</div>" : ""; // close div if it's not the first
                echo "<div class='row'>";
            endif;
            ?>
            <div class="col-3">
                <?php the_title(); ?>
            </div>
            <?php
            $counter++;
    
        endwhile;
    endif;
    wp_reset_postdata();
    ?>
    

    Adapted from Wrapping a div around every third item in a foreach loop PHP

  2. You can follow my code, post of @chapskev is good but missing a closing div after end if

    <?php $counter = 0; // 4  per list ?>
    <?php foreach ($arr as $key => $value) {
      if ($counter % 4 == 0) :
        echo $counter > 0 ? "</div>" : ""; // close div if it's not the first
        echo "<div class='group'>";
      endif;
      echo 
      <<<TEXT
      <span>content</span>
      TEXT;
      $counter++;
      }
      echo "</div>";
    ?> 
    

Comments are closed.