Цикл PHP: добавьте div с другим классом вокруг синтаксиса каждых трех элементов - PullRequest
0 голосов
/ 01 февраля 2019

Я хочу создать цикл для моих сообщений, который будет оборачивать a и класс для каждой группы трех сообщенийСложность в том, что есть 3 разных класса, которые должны продолжать цикл.

Итак, в основном, он должен создать div с классом «right», обертывающим первые 3 поста, а затем второй div с классом «left», обертывающим следующие 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: добавление div вокруг синтаксиса каждых трех элементов Но это только добавление первого класса, а затем повторение второго класса.

1 Ответ

0 голосов
/ 01 февраля 2019

Я изменил эталонный ответ, который вы связали, чтобы он соответствовал вашим требованиям.

Исходный ответ: Цикл PHP: добавьте div в каждые три элемента синтаксиса

<?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 Обновить код для обработки запроса от комментария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...