Wie können Beiträge nach Monat und Jahr durch eine separate Überschrift gruppiert werden?
Beispiel (Ausgabe mit diesem Datumsformat):
Dezember 2014
- 4. Dez 2014
- 5. Dez 2014
Ich habe ein benutzerdefiniertes Feld (Datumsauswahl) "event_date".
<?php
$the_query = new WP_Query( array(
'post_status' => 'publish',
'meta_key' => 'event_date',
'orderby' => 'meta_value'
) );
$current_header = '';
while ( $the_query->have_posts() ) :
$the_query->the_post();
$temp_date = get_post_meta( get_the_ID(), 'event_date', true );
if ( $temp_date != $current_header ) {
$current_header = $temp_date;
echo "<div class='sub_category_name_wrapper'><h5>$current_header</h5></div>";
}
?>
<div class="event_content_wrapper">
<ul>
<li>
<span><?php the_field('event_date'); ?></span> <span><?php the_field('event_region'); ?></span>
<h4><?php the_title(); ?></h4>
<br>
<?php the_excerpt(); ?>
<a class="content_button" href="<?php the_permalink(); ?>">mehr</a>
</li>
</ul>
</div>
<?php endwhile;
?>
Wenn Sie die Posts mit dem Argument orderby
als event_date
abfragen (dies kann ein beliebiges Feld mit Datumsformat sein), werden die Posts nach Datum, absteigend oder aufsteigend sortiert. Das einzige, was Sie danach tun müssen, ist, sie nach Jahr und Monat zu gruppieren.
So:
<?php
$posts = get_posts(array(
'post_type' => 'post',
'meta_key' => 'event_date',
'orderby' => 'meta_value_num',
'order' => 'DESC'
));
$group_posts = array();
if( $posts ) {
foreach( $posts as $post ) {
$date = get_field('event_date', $post->ID, false);
$date = new DateTime($date);
$year = $date->format('Y');
$month = $date->format('F');
$group_posts[$year][$month][] = array($post, $date);
}
}
foreach ($group_posts as $yearKey => $years) {
echo $yearKey;
echo '<br>';
foreach ($years as $monthKey => $months) {
echo $monthKey;
echo '<br>';
foreach ($months as $postKey => $posts) {
echo $posts[1]->format('d-m-Y');
echo '<br>';
echo $posts[0]->title;
echo '<br>';
}
}
}
?>
Sie können das Jahres- und Monatsformat nach Ihren Wünschen ändern. Dies ist nur eine Demonstration. Gleiches gilt für die HTML-Formatierung.