WordPress как на ладони
wordpress jino

Как разделить вывод постов в цикле

Добрый, день уважаемые. Помогите с решением такой задачи, функция WP_Query дергает с базы 12 постов мне необходимо каждые 4 поста помещать в Bootstrap

как это реализовать в цикле ? Код

 <div class="container">
	<div class="col-md-4">
		<?php

		$query = new WP_Query(array(
				'category_name' => 'poleznie',
				'posts_per_page' => 12,
				'orderby' => 'date')
		);

		while ($query->have_posts()) {
			$query->the_post(); ?>
			<p class="tips_nav__item"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>

		<?php} ?>
	</div>
</div>

Сейчас все 12 выводятся в один блок

Заметки к вопросу:
Justin 2 месяца назад

Используйте переменную-счётчик, до цикла объявляйте, в начале цикла увеличивайте на один. Теги ячейки BS (закрывающий и открывающий) отображайте внутри цикла, но только на каждую 1, 5, 9 итерации (значения счётчика).

Sasha Lifestar 2 месяца назад

каждые 4 поста помещать в Bootstrap

Как это вообще можно понять?) ты бы хоть привёл HTML код результата

petrozavodsky 2 месяца назад

Вот так

<div class="container">
	<div class="col-md-4">
		<?php

		$query = new WP_Query(array(
				'category_name' => 'poleznie',
				'posts_per_page' => 12,
				'orderby' => 'date')
		);

		$i = 1;
		while ($query->have_posts()) {

			if (1 == $i){
				echo "<div>";
			}
				$query->the_post(); ?>
			<p class="tips_nav__item"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>

			<?php

			if (4 == $i){
				echo "</div>";
			}

			$i++;
			if ($i > 4) {
				$i = 1;
			}
		} ?>
	</div>
</div>
0
2 месяца назад
  • 0

    Предположу что ты хочешь вывести определенный блок состоящий из 4 частей в линию

    <div class="row">
    	<div class="col-4"></div>
    	<div class="col-4"></div>
    	<div class="col-4"></div>
    	<div class="col-4"></div>
    </div>
    <div class="row">
    ....

    Возможно этот код поможет, и ты поймешь как выводить что то на каждый четвертый элемент

    Ключевое это проверка if($i % 4 == 1) и if($i % 4 == 0)

    for($i = 1; $i <= 9; $i++){
    	echo "\n $i ";
    	if($i % 4 == 1){
    		echo " alpha";
    	}elseif($i % 4 == 0){
    		echo " omega";
    	}
    }

    Учись задавать вопросы правильно и понятно, иначе тебе никто не поможет.

    Kama 2 месяца назад

    == 1 не совсем то - оно вообще не нужно, надо просто проверять есть остаток или нет, т.е. === 0 или просто через !.

    Комментировать
  • 1
    Kama5410

    Тут есть ответ на твой вопрос.

    Числа кратные к N или каждый N-ый блок в цикле

    Нужно разделить число на число и если остатка нет, то первое число делиться нацело на второе, а значит кратное.

    $num = 21;
    $n   = 3;
    if( ! ($num % $n) ){
    	echo "$num кратно $n";
    }

    Где применить эту кратность?

    Допустим, есть цикл записей и нужно к каждому третьему блоку добавить отдельный css класс. Тут-то кратность нам и поможет.

    $i = 1;
    foreach( $posts a $post ){
    	if( ! ($i++ % 3) ){
    		// каждый третий блок в цикле
    	}
    }

    В твоем случае

    нужно после каждого 4-го блока ставить нужный разделитель в виде тегов, точно не знаю что там должно получиться, ну примерно как-то так:

    <div class="container">
    	<div class="row">
    		<div class="col-md-4">
    			<?php
    
    			$query = new WP_Query(array(
    				'category_name' => 'poleznie',
    				'posts_per_page' => 12,
    				'orderby' => 'date')
    			);
    
    			$i = 1;
    			while ($query->have_posts()) {
    				$query->the_post();
    				?>
    				<p class="tips_nav__item"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
    				<?php
    				// это четвертый блок
    				if( ! ($i++ % 4) ){
    					?>
    						</div><!-- col-md-4 -->
    					</div><!-- row -->
    					<div class="row">
    						<div class="col-md-4">
    					<?php
    				}
    			}
    			?>
    		</div>
    	</div>
    </div>
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация