WordPressの年月別エントリーアーカイブを表示

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

先日、アーカイブリストを表示させようと悩んだのですが、結局PHPの配列で対応したのでメモしておきます。

WordPressの年月別エントリーアーカイブを表示しようと考えています – HAM MEDIA MEMO

年月別エントリーアーカイブを表示

参考にさせていただいたのはこちら

月別アーカイブ表示に年区切りを入れる。 - hello, world.

ありがとうございますm(_ _ )m

//1. 年を抽出して配列に格納
$archives_year = strip_tags(wp_get_archives('type=yearly&show_count=0&format=custom&echo=0'));
//年数ごとに配列$archives_year_arrayに格納
$archives_year_array = split("\n",$archives_year);
//配列内の最後に空の配列ができてるので削除。
array_pop($archives_year_array);

//2. アーカイブ一覧を取得して配列に格納
//月別アーカイブを取得。
$archives = wp_get_archives('type=monthly&show_post_count=1&use_desc_for_title=0&echo=0'); 
//同様に改行ごとに配列に格納。
$archives_array = split("\n",$archives);

//1で抽出した年数分繰り返し
echo "<ul>\n";
foreach ($archives_year_array as $year_value){
  //<li><a href="/year">で年を表示
  echo '<li><a href="'; bloginfo('url'); echo '/'.ltrim($year_value).'">'.ltrim($year_value)."年</a>\n";
  echo '<ul class="cl">'."\n";
  
  //月別アーカイブ数分繰り返し
  foreach ( $archives_array as $archives_value) {
    
    //1で取得した年と、2の各月別アーカイブの文字列を比較
    if ( intval(strip_tags($archives_value)) == intval($year_value) ) {
      //2の月別アーカイブの各行のhtmlからYYYY年部分を除去して表示。
      echo  str_replace(intval($year_value).'年','',ltrim($archives_value))."\n";
    }
    
  }
  echo "</ul>\n</li>\n"; 
}
echo "</ul>\n";

出力は少し変更

参考サイトのをそのままコピーではなく、部分的に改良をさせてもらって、このブログようにした。

年表示もリストに格納し、その子要素にさらにリストを入れる構造にしたのと、年にもリンクを付けた。

全体の方法は前にすでに書いていたような方法で、一度年月を配列に格納し、それをゴニョゴニョ使って順序を調整するという方法でした。考えた方法がまるっとそのままのような形で掲載されていて助かりました。

ltrim と intval

ltrim は文字列の最初から空白 (もしくはその他の文字) を取り除く PHP の関数で intval は 変数の整数としての値を取得する関数とのこと。

そのため、 intval($year_value) では最初のyyyyまでが抜き取られて数値としてチェックされ、 str_replace(intval($year_value).'年','',ltrim($archives_value)) ではyyyy年部分が空白に置き換えられるという仕組みになるようだ。

勉強になりました。