BBH
-Biz Branding Hub-
投稿日 : 
2019/08/20
更新日 : 
2019/08/20

WordPressでの年月アーカイブの実装サンプル(各月の件数付き)

WordPressサイトでよく見る年月ごとのアーカイブの作成方法を紹介します。
以下のようなパーツですね。

ソース内容

以下、ソースの内容です。

sidebar.php

<ul class="Sidebar_Navigation_List_Ul">
	
	<?php //========== 今年のリンク - Start ========== ?>
	<?php 
		// 今年
		$cur_year = date('Y');	//現在年を取得
		$query = new WP_Query('year='. $cur_year);	//現在年に投稿された記事を取得
		if($query->found_posts > 0) :			//記事を存在すれば処理を行う
	?>
		<li class="Sidebar_Navigation_List_Li">
			<a href="/<?php echo $cur_year ?>"><?php echo $cur_year ?>年</a>  //今年のリンクを生成
			(<?php echo $query->found_posts ?>)		//今年の記事の件数を表示
			
			<ul class="Sidebar_Navigation_List_Child_Ul">
			<?php //========== 今年の月別リンク - Start ========== ?>
			<?php 
			for ($mon = 12; $mon >= 1; $mon--) :	//1月~12月をループ
				$query = new WP_Query('year='. $cur_year . '&monthnum=' . $mon);	//今年のX月の記事を取得
				if(count($query->posts) > 0) :
			?>
					<li class="Sidebar_Navigation_List_Child_Li">
						<a href="/<?php echo $cur_year ?>/<?php echo $mon ?>"><?php echo $mon ?>月</a>
						(<?php echo $query->found_posts ?>)
					</li>
			<?php 
				endif;
			endfor;
			?>
			<?php //========== 今年の月別リンク - End ========== ?>
			<?php endif;?>
		</ul>
	</li>
	<?php //========== 今年のリンク - End ========== ?>
	<?php //========== 過去4年分のリンク - Start ========== ?>
	<?php 
		// 過去4年分(年リンクのみ)
		$past_start_year = date('Y') - 1;
		for ($year = $past_start_year; $year > $past_start_year - 4; $year--) :
			$query = new WP_Query('year='. $year);
			if(count($query->posts) > 0) :
	?>
				<li class="Sidebar_Navigation_List_Li">
					<a href="/<?php echo $year ?>"><?php echo $year ?>年</a> (<?php echo $query->found_posts ?>)
				</li>
	<?php
			endif;
		endfor;
	;?>
		</ul>
	</li>
	<?php //========== 過去4年分のリンク - End ========== ?>
</ul>

処理概要

処理概要は以下です。
・今年の年月のリンクを生成。
・今年の月別リンクを生成。
・上記以外の過去5年分の年月リンクを生成。
作りたい年月アーカイブの仕様とは異なるかもしれませんが、個々の処理は流用できるかと思います。

処理詳細

処理の詳細は以下です。

・new WP_Query('year='. $cur_year);
この処理で、特定の条件の記事を取得しています。
条件は、'year='. $cur_yearの部分になります。
この例では、指定の年に投稿された記事を取得しています。
これ以外にも様々な条件指定が可能です。
例えば、後に出てくる
'year='. $cur_year . '&monthnum=' . $mon
と指定すれば、指定年の指定月の記事を取得できます。

・<a href="/<?php echo $cur_year ?>"><?php echo $cur_year ?>年</a>
リンクを生成しています。
siteroot/yyyyで、その年月のアーカイブページのリンクとなります。

・(<?php echo $query->found_posts ?>)
件数を表示しています。
$queryは、条件指定して取得した記事群になります。
found_postsプロパティで取得した記事の件数を表示できます。
(11) のような表示となります。

あとはこれを年月ごとに繰り返しているだけとなります。

Profile

管理人プロフィール

都内でITエンジニアをやってます。
変遷:中規模SES→独立系SIer→Webサービス内製開発
使用技術はその時々でバラバラですが、C#、AWSが長いです。
どちらかと言うとバックエンドより開発が多かったです。
顧客との折衝や要件定義、マネジメント(10名弱程度)の経験あり。
最近はJava+SpringBootがメイン。

Recommend