BLOG

ブログ

programming

年度別アーカイブの作り方【WordPress】

こんにちは、ティウェブ藤園です。

今回は、WordPressでの、年度別アーカイブの作り方についてお話します。

年度別アーカイブについて

日本では「新年度」と言えば4月から、そして翌年の3月を年度末とするというのが一般的です。

この4月から翌年の3月までの年度別表示は、公的機関や教育機関などをはじめとして日本ではよく使われるものですが、海外ではあまり使われることがない表示方法です。

世界には国や企業によって多種多様な年度の区切り方があるので、たくさんのWebサイトで使用されているWordPressすら、年度別アーカイブに対応していない状態です。

しかし、コーポレートサイトのIRや決算報告のページや、教育機関のイベント行事のカレンダーなど、年度別アーカイブの方がわかりやすいものはたくさんありますので、必要に応じてカスタマイズしていく必要があります。

カスタマイズ方法も様々ですが、今回は2つの方法をご紹介します。

参考:WordPress Codex 日本語

①functions.phpを使用する方法

WordPressのテーマではテーマの関数を管理するfunctions.phpがありますが、そのファイル内で一括管理をする方法がこちらです。

WordPressのテーマファイル内にあるfunctions.phpに以下の内容を追加してください。

※functions.phpは必ずバックアップを取った上で作業しましょう!

function custom__pre_get_posts( $query ) {
	if ( is_admin() || ! $query->is_main_query() ) { // 管理画面は除外します
		return $query;
	}
	if ( is_year() ) { // 年別アーカイブを指定します
		$nowY = get_query_var( 'year' ); // そのページの年を取得
		$nextY = ( $nowY + 1 ); // 翌年を定義
		// 年別アーカイブのループの内容を書き換え
		$query->set( 'date_query', array(
			'after' => array( // その年の4/1から
				'year'  => $nowY,
				'month' => 4,
				'day'   => 1,
			),
			'before' => array( // 翌年の3/31まで
				'year'  => $nextY,
				'month' => 3,
				'day'   => 31,
			),
			'inclusive' => true,
			'compare' => 'BETWEEN',
		) );
		$query->set( 'year', null ); // 元々の年指定を削除します
	}
	return $query;
}
add_action( 'pre_get_posts', 'custom__pre_get_posts' );

大規模なWebサイトの場合、ブログは年別でいいけど決算は年度別がいい……といった切り替えも必要なことが多々ありますが、その場合はis_year()のところでいろんな条件分岐をつけていく必要があります。

この方法だとfunctions.phpで一括管理できるのが大きなメリットです。

②テーマ内でクエリを設定する方法

①のis_year()のところの分岐が分からなかったり、functions.phpを編集するのがためらわれる場合、特定の年別アーカイブページのクエリに年度別の指定をする方法がこちらです。

<?php
	//クエリの内容
	$nowY = get_query_var( 'year' ); // そのページの年を取得
	$nextY = ( $nowY + 1 ); // 翌年を定義
	$args = array(
		'post_type' => 'post', // 「投稿」を指定
		'date_query' => array(
			array(
				'after' => array( // その年の4/1から
					'year'  => $nowY,
					'month' => 4,
					'day'   => 1,
				),
				'before' => array( // 翌年の3/31まで
					'year'  => $nextY,
					'month' => 3,
					'day'   => 31,
				),
				'inclusive' => true,
				'compare' => 'BETWEEN',
			),
		),
		'posts_per_page' => -1,
	);
	$the_query = new WP_Query( $args );
?>
<?php if ( $the_query->have_posts() ) : // 上記のクエリに当てはまる投稿があるかチェック ?>
	<?php while ( $the_query->have_posts() ) : $the_query->the_post(); // ループはじめ ?>
		<p>記事の内容を取得...</p>
	<?php endwhile; // ループおわり ?>
	<?php wp_reset_postdata(); //クエリをリセット ?>
<?php endif; ?>

小規模なサイトで、この部分のこのループだけ年度別がいい!といった場合にはこちらの方がお手軽で便利だと思います。

※上記は年別アーカイブページでないと動作しませんので、年別アーカイブのないカスタム投稿タイプや、固定ページ内などでサブループとして使用する場合は適宜カスタマイズが必要です。

まとめ

年別や年度別、カテゴリー別、タグ別などたくさんの区別・表示方法がありますが、適切な出力をした方がお客様にとって見やすく、便利になる可能性が高いです。

ティウェブでは、お客様がWebサイトに掲載したい内容に合わせて、より見やすく便利になるご提案をさせていただきますので、Webサイト制作で気になることがありましたらぜひご相談くださいませ。