情報を追記している場合はありますが、古い情報を訂正はしていませんので、公開年月日を参照してください。プラグイン・タグ、いずれもワードプレス・PHPのバージョン等によって動作しない場合もあります。
イベントを開催日で予約投稿とし、月ごとに年月を見出しとして投稿の一覧を表示。
<?php global $wpdb; $limit = 0; $year_prev = null; $months = $wpdb->get_results( "SELECT DISTINCT MONTH( post_date ) AS month , YEAR( post_date ) AS year, COUNT( id ) as post_count FROM $wpdb->posts WHERE post_status = 'future' and post_date >= now( ) and post_type = 'event' GROUP BY month , year ORDER BY post_date ASC" ); foreach( $months as $month ) : $year_current = $month->year; if ( $year_current != $year_prev ) { if ( $year_prev != null ) { ?> <?php } ?> <?php } ?> <?php $args = array( 'posts_per_page' => -1, 'post_type' => 'event', 'post_status' => 'future', 'year' => $month->year, 'monthnum' => $month->month, 'order' => ASC, ); $the_query = new WP_Query( $args ); ?><?php if ($the_query->have_posts()) : ?> <h2><?php echo $month->year; ?> / <?php echo date('n', mktime(0, 0, 0, $month->month, 1, $month->year)) ?></h2> <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <div> <h3 class="title"><?php the_title(); ?></h3> <?php the_excerpt(); ?> <a href="<?php the_permalink(); ?>">詳細ははこちら</a> </div> <?php endwhile; endif; wp_reset_query(); ?> <?php $year_prev = $year_current; endforeach; ?>
年の見出しもいる場合は if ( $year_prev != null ) { ~ } の後に。
何ヶ月分表示するかの制限がいる場合は endforeach; の前に if( ++$limit >= 数字 ) { break; }
予約投稿の表示はプラグインなりfunctions なりで。