このエントリーをはてなブックマークに追加

イベントを開催日で予約投稿とし、月ごとに年月を見出しとして投稿の一覧を表示。

<?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 なりで。

2017.12.01 投稿 

新しい情報を追記している場合はありますが、古い情報の修正はしていません。投稿日・文中の日付を参照してください。

Recent Articles