wp_get_archives();で表示される
・2010年3月
・2009年6月
というのを
2010年
・3月
2009年
・6月
みたいな表示にする。
2010年3月等と表示される日本語環境のみ、March 2010とか表示される英語環境だと要修正。
<h3>ARCHIVES</h3> <div class="navi-archives"> <?php //1. 年を抽出して配列に格納 $archives_year = strip_tags(wp_get_archives('type=yearly&show_count=0&format=custom&echo=0')); //wp_get_archivesに対してタグを除去して年数のみ抽出。 $archives_year_array = split("\n",$archives_year); //年数ごとに配列$archives_year_arrayに格納 array_pop($archives_year_array);//配列内の最後に空の配列ができてるので削除。 //$archives_year_array = array_merge(array_diff($archives_year_array, array(""))); で空の配列削除してもOKだった。 //2. アーカイブ一覧を取得して配列に格納 $archives = wp_get_archives('type=monthly&show_post_count=1&use_desc_for_title=0&echo=0'); //月別アーカイブを取得。 $archives_array = split("\n",$archives); //同様に改行ごとに配列に格納。 foreach ($archives_year_array as $year_value){ //1で抽出した年数分繰り返し echo "<h4>".ltrim($year_value)."</h4>\n"; //<h4>で年を表示 echo "<ul>\n"; foreach ( $archives_array as $archives_value) { //月別アーカイブ数分繰り返し if ( intval(strip_tags($archives_value)) == intval($year_value) ) { //1で取得した年と、2の各月別アーカイブの文字列を比較 echo str_replace(intval($year_value)."年","",ltrim($archives_value))."\n";//2の月別アーカイブの各行のhtmlからYYYY年部分を除去して表示。 array_shift($archives_array); //表示した配列を削除。なんとなくこのほうが次のforeachまわるとき処理早くなるかなと思って。 } } echo "</ul>\n"; } ?> </div>