WordPress 投稿一覧に年と月の見出しを付ける方法

Last update 
/ Posted by Takumi Hirashima

WordPress の投稿一覧に、年と月の見出しを付けて出力する方法を紹介します。
主な使い所としては、企業ページのお知らせ一覧で、年月ごとに見出しを分けた一覧を出力したいときなどが想定されます。

出力方法の紹介

例はカスタム投稿タイプの出力ですが、通常の投稿でも年と月の取得ができれば、同じことが実現できると思います。
以下は、カスタム投稿タイプ news で、最大投稿数を全てに指定した場合です。

<?php // 投稿一覧に年と月の見出しを付ける
  $args = array(
    'post_type' => 'news', // 任意のカスタム投稿タイプを指定
    'posts_per_page' => -1, // 1ページに表示する最大投稿数を指定、-1は全てを表示
    'order' => 'DESC', // 降順でソート
    'orderby'=>'date' // 日付で並べる
  );
  $the_query = new WP_Query($args);
  if($the_query->have_posts()):
    $post_year = false; // 年の比較用変数の初期化
    $post_month = false; // 月の比較用変数の初期化
    echo '<h1>投稿一覧</h1>';
    while ($the_query->have_posts()): $the_query->the_post();
      if( $post_month != get_post_time('n') ) { // 比較の値と投稿月が異なる場合に以下を出力
        if ( $post_month !== false ) { // 比較の値と投稿月が異なる場合に以下を出力
          echo '</ul>';
        }
        if ( $post_year != get_post_time('Y') ) { // 比較の値と投稿年が異なる場合に年を出力
          echo '<h2>'.get_post_time('Y年').'</h2>'; //投稿の年を出力
        }
        echo '<h3>'.get_post_time('n月').'</h3>'; //投稿の月を出力
        echo '<ul>';
      }      
      echo '<li><a href="'.get_the_permalink().'">'.get_the_title().'</a></li>'; // 投稿のリンクとタイトルを出力
      $post_year = get_post_time('Y'); // 年月の比較用の変数に今の投稿の年月を代入
      $post_month = get_post_time('n'); // 年月の比較用の変数に今の投稿の年月を代入
    endwhile;
    wp_reset_postdata();
    echo '</ul>';
  endif;
?>

出力結果は以下のようになります。

<h1>投稿一覧</h1>
<h2>20XX年</h2>
<h3>12月</h3>
<ul>
  <li><a href="#">投稿タイトル</a></li>
  <li><a href="#">投稿タイトル</a></li>
</ul>
<h3>6月</h3>
<ul>
  <li><a href="#">投稿タイトル</a></li>
</ul>
<h2>20XX年</h2>
<h3>8月</h3>
<ul>
  <li><a href="#">投稿タイトル</a></li>
  <li><a href="#">投稿タイトル</a></li>
</ul>
<h3>2月</h3>
<ul>
<li><a 

まとめ

タグの組み方を変える場合は、比較演算子の処理を間違えないように気をつけましょう。

スポンサーリンク