こんにちは、Ryohei(@ityryohei)です!

WordPressで投稿が存在する年を取得する方法をご紹介したいと思います!

やりたい事は単純で、投稿が存在する年だけを抽出して年毎に分けた記事を表示する、です。本記事では投稿が存在する年の取得方法だけのご紹介となります。

SQL文を使えば簡単にできると思いますが、私はSQLには詳しくないため、本記事ではWP_Queryを使って投稿が存在する年を取得しています。

では、さっそく解説していきます!

投稿が存在する年を取得する

PHP

$args = array(
  'post_type' => 'post',
  'orderby' => 'date',
  'order' => 'asc',
  'posts_per_page' => -1
);

$query = new WP_Query($args);

if( $query->have_posts() ) {
  $year = array();
  while ( $query->have_posts() ) {
    $query->the_post();
    if ( get_the_date('Y') ){
      array_push( $year, get_the_date('Y') );
    }
  }
  wp_reset_postdata();
}

上記を実行すると以下の画像のような配列が出力されます。

post-exist-year-001

指定した投稿タイプの全投稿から年の値が取得されます。重複した年も含まれているため、数が多くなっています。ここから重複した年の値を削除します。

PHP

$args = array(
  'post_type' => 'post',
  'orderby' => 'date',
  'order' => 'asc',
  'posts_per_page' => -1
);

$query = new WP_Query($args);

if( $query->have_posts() ) {
  $year = array();
  while ( $query->have_posts() ) {
    $query->the_post();
    if ( get_the_date('Y') ){
      array_push( $year, get_the_date('Y') );
    }
  }
  wp_reset_postdata();
}

$year = array_unique( $year );
$year = array_values( $year );

以上で完成です!ここではarray_uniqueで重複した年の値を削除して、array_valuesで配列の添字を振り直しています。実行すると以下のような配列が出力されます。

post-exist-year-002

すっきりしました!あとは$yearの配列で年毎の記事を取得、表示するだけです。

上記ではpost_typeにpost、orderにascを指定していますが、表示したい投稿タイプ(post、page等)や昇順(asc)、降順(desc)は適宜変更してご利用ください!

以上、Wordpressで投稿が存在する年を取得する方法のご紹介でした!最後まで読んでいただきありがとうございました!

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。