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

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;
?>

HTML は次のように作成されます。

<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

まとめ

WordPress の投稿一覧に年と月の見出しを付けて表示する方法を紹介しました。
タグの組み方を変える場合は、比較演算子の処理を間違えないように気をつけましょう。

スポンサーリンク

私が続けて読みたい関連記事