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

15

Я использую цикл в wordpress для вывода сообщений. Я хочу обернуть каждые три записи внутри div. Я хочу использовать счетчик для увеличения на каждой итерации цикла, но я не уверен в синтаксисе, который говорит "если $i кратно 3" или "если $i кратно 3 - 1".

$i = 1;
if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post();
     // If is the first post, third post etc.
     if("$i is a multiple of 3-1") {echo '<div>';}

     // post stuff...

     // if is the 3rd post, 6th post etc
     if("$i is a multiple of 3") {echo '</div>';}

$i++; endwhile; endif;

Как это сделать? спасибо!

  • 0
    Что произойдет, если я хотел бы добавить только если это более 3 пунктов? а когда он равняется 3 пунктам оставить его без изменений?
  • 0
    Это был самый простой способ, который я мог найти: stackoverflow.com/questions/28247770/…
Теги:
loops
while-loop

3 ответа

44
Лучший ответ

Почему бы не сделать следующее? Это откроет его и закроет после третьего сообщения. Затем закройте конец div в случае, если на дисплее не будет отображаться несколько цифр.

$i = 1;
//added before to ensure it gets opened
echo '<div>';
if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post();
     // post stuff...

     // if multiple of 3 close div and open a new div
     if($i % 3 == 0) {echo '</div><div>';}

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

Если вы не знали, % - оператор modus вернет остаток после разделения двух чисел.

  • 0
    это выглядит хорошо - есть ли преимущество использования одного или другого с точки зрения скорости или эффективности? Я думаю, что использование оператора модуля делает на одну строку кода меньше
  • 0
    теперь я понимаю - использование модуля создаст незамкнутый div, если нет кратного 3. Спасибо!
Показать ещё 5 комментариев
9

Используйте модуль:

if ( $i % 3 == 0 )

В коде вы можете использовать:

if($i % 3 == 2) {echo '<div>';}

и

if($i % 3 == 0) {echo '</div>';}
  • 0
    не могли бы вы помочь мне поставить это в контексте кода, который я вставил в мой ответ выше?
  • 0
    @j-man86: j-man86: вы можете использовать его как есть, замените "$i is a multiple of 3-1" на $i % 3 == 0
Показать ещё 1 комментарий
0

Если вам не нужен дополнительный div, вы можете использовать это:

 $i = 0;

 $post_count = $wp_query->found_posts;

 if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) :$wp_query->the_post();

 // If is the first post, third post etc.
 ( ($i%3) == 0 ) ? echo '<div>' : echo '';

 // post stuff...

 // if is the 3rd post, 6th post etc or after the last element

( $i == ($post_count - 1) || (++$i%3) == 0 )  ? echo '</div>' : 
echo '';

endwhile; endif;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню