WordPressのカスタム投稿タイプで、月別・年別といったアーカイブページを実装する方法をご紹介します。

月別・年別アーカイブページへのリンク一覧の表示

今回は年別アーカイブの場合を考えます。

PHP

<ul>
  <?php 
    $args = array(
      // アーカイブリストの種類を指定
      'type' => 'yearly', // 月別であればmonthlyを指定。

      // カスタム投稿タイプのスラッグを指定
      'post_type' => 'news',
    );

  // アーカイブリストを表示
    $yearly_list = wp_get_archives($args);
  ?>
</ul>

wp_get_archives()関数

wp_get_archives()月別・年別のアーカイブページへのリンク一覧を表示する関数です。
詳細はこちらのページをご覧ください。

月別・年別アーカイブページの表示

カスタム投稿のアーカイブページのファイルに、下記を記述します。

PHP

<?php
$args = array(
  'post_status' => 'publish',
  'post_type' => 'news',
);

// 年情報を取得する。
$year = get_the_date( 'Y' ); // 月を取得する場合は「m」を引数に。

// 年別アーカイブページのとき、クエリに年情報を追加。
if (is_year()):
   $args = array_merge(
      $args,
      array(
         'date_query' => array(
            array(
              'year' => $year,
            ), 
         ),
      )
   );
endif; 
    
$query = new WP_Query($args);
?>

解説

年情報が取得できる場合に限り、その情報をクエリに追加し、年別のアーカイブ一覧を表示させます。
array_merge()関数を使うと、配列に配列を追加することができます。