Поддержка Проблемы и решения Группировка постов по дате

  • Как сделать, чтобы посты группировались по дате? Т.е. идет заголовок 10 апреля и под ним список постов, затем заголовок 11 апреля и под ним список постов и т.д.

Просмотр 15 ответов — с 16 по 30 (всего 33)
  • Модератор Yuri

    (@yube)

    А если не лениться читать Кодекс, то еще проще.

    
    if ( have_posts() ) {
    	while ( have_posts() ) {
    		the_post(); 
    		the_date('Y.m.d.', '<h3>', '</h3>');
    		//
    		// Post Content here
    		//
    	} 
    }
    
    <?php while ( $news_query->have_posts() ) : $news_query->the_post(); ?>		
    	<?php
    		$expirationdate_unix = get_the_date("U") + 10800;	
    		if ( $expirationdate_unix > $currentdate_unix ) {
    			$i++;
    			if (($i % 2) == 1) echo '<div class="row">'; 
    			get_template_part( 'anons', 'news', get_post_format() );
    			if (($i % 2) == 0) echo '</div>';
    		}
    ?>
    	<?php endwhile; ?>

    Сюда как правильно встроить?

    А если не лениться читать Кодекс, то еще проще.

    Так в этом случае группировки не будет, просто после каждого поста будет идти дата. Или я не прав?

    Модератор Yuri

    (@yube)

    Так в этом случае группировки не будет, просто после каждого поста будет идти дата. Или я не прав?

    А если не лениться читать Кодекс? 🙂
    https://codex.wordpress.org/Function_Reference/the_date

    Модератор Yuri

    (@yube)

    Сюда как правильно встроить?

    Где-то после the_post() и перед get_template_part( ‘anons’…
    Вам виднее.

    Где-то после the_post()

    У меня же нет the_post(). Я так полагаю после $i++;?

    • Ответ изменён 5 лет, 11 месяцев назад пользователем dmitriy88.
    Модератор Yuri

    (@yube)

    У меня же нет the_post().

    А если найду? :))))))

    screenshot

    А если найду? :))))))

    Вот блин) Но все равно же получается после i++;? Конструкцию из кодекса вставлять? the_date(‘Y.m.d.’, ‘<h3>’, ‘</h3>’);

    Модератор Yuri

    (@yube)

    Пробуйте ) Мне не хочется вникать в Ваш код, потому что есть подозрение, что если копнуть чуть глубже, его придется полностью переделать. А мне не до того сейчас.

    Вот итоговый код

    <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?>		
    	<?php
    		$expirationdate_unix = get_the_date("U") + 10800;	
    		if ( $expirationdate_unix > $currentdate_unix ) {
    			$i++;
    			if ( $date != get_the_date() ) {
    			$date = get_the_date();
    			$date_ru = dateToRussian(get_the_date(' j F'));			
    			echo "<h3>$date_ru</h3>";			
    			}			
    			if (($i % 2) == 1) echo '<div class="row">';
    			get_template_part( 'anons', 'new', get_post_format() );
    			if (($i % 2) == 0) echo '</div>';			
    		}
    ?>
    	<?php endwhile; ?>

    Вроде все работает, но есть одна проблема: если у самой первой даты нечетное количество постов, то заголовок H3 с датой попадает в <div class=»row»>. Для четного количества все хорошо. Подскажите, что нужно доработать, сам уже много чего перепробовал, но не получается. Не закрывается вот этот /div if (($i % 2) == 0) echo '</div>'; Какое условие нужно добавить, чтобы после последнего поста конкретной даты div закрывался?

    Есть мысли, как закрыть тег <div>?

    Модератор Yuri

    (@yube)

    После цикла
    if (($i % 2) == 1) echo '</div>';

    Эта запись после цикла у меня есть. Не стал полный код копировать, только проблемную часть добавил.

    <?php endwhile; ?>
    <?php	if ( 1 == ($i % 2)) echo '</div>'; ?>

    До добавления заголовка даты все работало, а вот с датой для нечетного числа записей перестало все работать.

    Опишу более точно. Например, за 23 апреля 4 записи, тогда все хорошо, 24 апреля идет
    <h3>24 апреля</h3>
    <div class=»row»>
    анонс поста
    анонс поста
    </div>
    А вот если за 23 апреля 5 записей, то 24 апреля идет как
    <div class=»row»>
    анонс поста
    <h3>24 апреля</h3>
    анонс поста
    </div>
    Т.е. дата попадает внутрь конструкции row.

    Модератор Yuri

    (@yube)

    Понятно. При смене даты закрывайте, если нужно, открытый div и сбрасывайте счетчик $i.

    Это понятно, что при смене даты нужно закрывать </div>. Только не пойму, как это в коде реализовать.

Просмотр 15 ответов — с 16 по 30 (всего 33)
  • Тема «Группировка постов по дате» закрыта для новых ответов.