Я хочу создать цикл для моих сообщений, который будет оборачивать 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 вокруг синтаксиса каждые три элемента Но только добавление первого класса, а затем повторение второго класса.
Я изменил ссылочный ответ, который вы связали, чтобы соответствовать вашему требованию.
Оригинальный ответ: цикл 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 Обновить код, чтобы удовлетворить запрос от комментария.