• このエントリーをはてなブックマークに追加

2015年06月29日(Mon)

増えてきた日付ベースのアーカイブリストを西暦と月で分けて自分好みにカスタマイズ

増えてきた日付ベースのアーカイブリストを西暦と月で分けて自分好みにカスタマイズ

年月のアーカイブのリンクが、増えてきたので整理しようと色々と探したのですが、目ぼしいのが見つからず自分で作ってみました。 恐らくもっと良い方法があるとは思いますが、やりたいことが出来たので今回は取りあえずといった感じです。

▼ このブログの右下に設置してあるアーカイブ(2015年6月)
年月のアーカイブ

やりたかったことは、記事を投稿していない月も表示させ綺麗に並べることでした。
投稿月だけの表示ならわりと簡単に出来そうだったのですが、今回の仕様は思ったより面倒でした…

wp_get_archives のオプション echo=0 でデータを取得

wp_get_archivesのオプションでecho=0を使うと戻り値を変数に代入する事が出来ました。
今回、実際に出力されたデータは下記の通りです。

wp_get_archives(“echo=0”); の戻り値

<li><a href='http://log-file.net/date/2015/06'>2015年6月</a></li>
<li><a href='http://log-file.net/date/2015/05'>2015年5月</a></li>
<li><a href='http://log-file.net/date/2015/02'>2015年2月</a></li>
<li><a href='http://log-file.net/date/2015/01'>2015年1月</a></li>
<li><a href='http://log-file.net/date/2014/12'>2014年12月</a></li>
<li><a href='http://log-file.net/date/2014/09'>2014年9月</a></li>
<li><a href='http://log-file.net/date/2014/08'>2014年8月</a></li>
<li><a href='http://log-file.net/date/2014/07'>2014年7月</a></li>
<li><a href='http://log-file.net/date/2014/06'>2014年6月</a></li>
<li><a href='http://log-file.net/date/2014/05'>2014年5月</a></li>
<li><a href='http://log-file.net/date/2014/03'>2014年3月</a></li>
<li><a href='http://log-file.net/date/2013/10'>2013年10月</a></li>
<li><a href='http://log-file.net/date/2013/08'>2013年8月</a></li>
<li><a href='http://log-file.net/date/2013/06'>2013年6月</a></li>
<li><a href='http://log-file.net/date/2013/05'>2013年5月</a></li>
<li><a href='http://log-file.net/date/2013/03'>2013年3月</a></li>

取得したデータをPHPで処理

wp_get_archives(“echo=0″);で取得した戻り値をPHPで処理しました。

php

<ul class="parent">
<?php
	//日付ベースのアーカイブリスト
	$wga_data = wp_get_archives("echo=0");
	//繰り返し正規表現検索
	preg_match_all("/<li><a href=\'(.*?)\'>(.*?)年(.*?)月<\/a><\/li>/s", $wga_data, $out);
	//配列のキーと値を反転
	$url_flip = array_flip($out[1]);
	//配列から重複した値を削除
	$year_list = array_unique($out[2]);
	//アーカイブのURL
	$a_url = 'http://log-file.net/date/';
	//ループ処理
	foreach($year_list as $val){
		//西暦の出力
		echo '<li><ul class="children"><li><a href="'.$a_url.$val.'">'.$val.'年</a></li>';
		//1-12のループ
		for($i = 1; $i <= 12; $i++){
			//月のURL
			$m_url = $a_url.$val."/".sprintf("%02d",$i);
			//URLがある場合
			if(isset($url_flip[$m_url])){ echo '<li><a href="'.$m_url.'">'.$i.'月</a></li>'; 
			//URLが無い場合
			}else{ echo '<li>'.$i.'月</li>'; }
		}
		echo '</ul></li>';
	}
?>
</ul>

今回、使用した主だった関数は下記の通りです。

wp_get_archives 日付ベースのアーカイブリストを表示しテンプレートのどこでも使用可能
preg_match_all 繰り返し正規表現検索を行う
array_flip 配列のキーと値を反転する
array_unique 配列から重複した値を削除する
sprintf フォーマットされた文字列を返す
isset 変数がセットされていること、そして NULL でないことを検査する

コメント(0件)

増えてきた日付ベースのアーカイブリストを西暦と月で分けて自分好みにカスタマイズに対するご意見、ご感想、情報提供など皆様からのコメントをお待ちしております。 お気軽にコメントしてください。

コメントフォーム

【ソーシャルボタン】


TOP