Intereting Posts
WORDPRESS: отображение списка подкатегорий и сообщений, которые они содержат, в пределах одной основной категории Может ли PHP (с Apache или Nginx) проверить HTTP-заголовок до завершения запроса POST? Удаленное изображение Dompdf не отображается в pdf Попытка получить свойство не объекта Как заказывать сообщения WordPress по пользовательской дате поля? RSS-каналы в PHP Добавление другого класса в первый div в цикле PHP Mailer компилирует и сохраняет сообщение для последующей отправки Регистрация / выход в систему посещаемости с использованием codeigniter перенаправлять на новую страницу после отправки и проверки формы с помощью php Тип поля Symfony 2 Entity с выбором и / или добавлением нового Как скопировать ArrayIterator, чтобы сохранить текущую позицию итерации? Как избежать сообщения об отмене изменений композитора MySQL: «ошибка в синтаксисе SQL … рядом с ключом …»? PHP объединяет $ _POST в $ _SESSION

Мне нужно обернуть каждые 4 сообщения WordPress в div

Мне нужен div, чтобы обернуть каждые четыре столбца в цепочке wordpress. Так было бы

<div> four posts </div> <div> four posts </div> 

мой текущий код – это

 <?php $i = 0; $wrap_div = "<div class='frak'>"; if ( have_posts() ) { echo $wrap_div; while ( have_posts() ) { the_post(); ?> <div class="wine-section"> <?php the_post_thumbnail(); ?> <div class="wine-info"> <a href="<?php the_permalink(); ?>"><?php the_title( '<h1>', '</h1>' ); ?></a> <?php the_meta(); ?> </div><!-- /wine-info --> <div class="c"></div> </div><!-- /wine-section --> <?php if ($i % 4 == 0) { echo "</div>" . $wrap_div; } } // end while } // end if $i++; ?> 

Этот код обертывает каждую запись отдельно. Есть идеи?

Вы увеличиваете $i вне цикла while, поэтому внутри него $i всегда будет ==0 и, следовательно, $i % 4 == 0 .

Переместить $i++; before } // end while .

Однако вы также должны изменить свое условие на $i % 4 == 3 , потому что $i % 4 == 0 оценивает true в самой первой итерации ( $i=0 ) и будет генерировать начальный <div> только с одним после.

Кроме того, вы можете сохранить свое состояние как есть, и:

  • либо начинать с $i=1 вместо 0

  • или переместить $i++ сразу после.

Теперь, когда у вас есть несколько кратных 4 сообщений, в конце появится дополнительный, пустой <div> . Это потому, что вы предполагаете, что когда закрывается <div> , другой должен автоматически открываться. Это не всегда так.

Предполагая, что вы выбрали решение $i % 4 == 3 выше, и что у вас уже есть echo '</div>'; после цикла while измените условие на if(($i % 4 == 3)&& have_posts()) .

Как указывали геомаги, вы увеличиваете переменную за пределами цикла. Тогда 0 % 4 == 0 оценивает true – это потому, что когда вы делите 0 на 4, вы получаете 0. Чтобы обойти эту ситуацию, вам нужно еще одно правило.

Также не забывайте, что с вашим текущим кодом, если общее количество сообщений составляет, например, 12, у вас будет один пустой div «frak» в конце ваших сообщений.

 <?php $i = 0; $wrap_div = "<div class='frak'>"; if ( have_posts() ) { // Grab the total posts that are being displayed $total_posts = $wp_query->post_count; echo $wrap_div; while ( have_posts() ) { the_post(); ?> <div class="wine-section"> <?php the_post_thumbnail(); ?> <div class="wine-info"> <a href="<?php the_permalink(); ?>"><?php the_title( '<h1>', '</h1>' ); ?></a> <?php the_meta(); ?> </div><!-- /wine-info --> <div class="c"></div> </div><!-- /wine-section --> <?php // Is this a fourth post? If so, make sure it is not the last post? if ( $i % 4 == 0 && $i != 0 && ( $i + 1 ) != $total_posts ) { echo '</div>' . $wrap_div; } $i ++; } // end while // Close the $wrap_div echo '</div>'; } // end if ?> 

Как вы можете видеть, оператор if который печатает закрывающий тег, и новый обертывание теперь более сложный. Он гарантирует, что $ i не равен 0 (это значит, что это все еще первый пост), и что $ i + 1 не совпадает с общим количеством отображаемых сообщений (в этом случае мы закрываем цикл while() ).

Если вам интересно, почему мы закрываемся после цикла while() – просто потому, что ваши сообщения могут быть не всегда точными на 4 (я не уверен в правильном переводе на английский здесь) – и если это так, и вы не закрывайте свой div после цикла while – у вас будут проблемы.