月と年で投稿を別の見出しでグループ化するにはどうすればよいですか。
例(この日付フォーマットで出力):
2014年12月
- 4. Dez 2014
- 5. Dez 2014
カスタムフィールド(datepicker) "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;
?>
orderby
引数をevent_date
(日付形式の任意のフィールド)として投稿に照会すると、投稿は日付、desc、またはascの順に並べられます。そのため、あとでしなければならないのは、それらを年と月でグループ化することだけです。
そう:
<?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>';
}
}
}
?>
年と月の形式は好みに合わせて変更できます。これは単なるデモンストレーションです。同じことがHTMLフォーマットにも当てはまります。