WordPressの月別アーカイブページの表示を逆にする

single_cat_titleの年と月の表示を逆にする
WordPress月別アーカイブページのタイトルにWordPress関数のsingle_cat_title()を使って表示させる場合があるが、この関数で表示させると「1月2013」のような表示になる。

少なくとも日本では「2013年1月」のように逆にして表示させたいのではないだろうか。

というわけで、今回はそのやり方を解説しよう。

月別アーカイブページのテンプレート内に直接コードを書いても良いが、私はテンプレートファイル内はなるべく見通しの良い状態にしたいために、今回は関数を定義する方法を採ることをご了承ください。

手順の解説

まずは月別ページのタイトル表示箇所にyear_month()というユーザー定義関数を書いておく。
仮に月別のタイトルをh2要素でマークアップするのであれば、

<h2><?php year_month(); ?>に書いた記事一覧</h2>

というような感じになる。
そしてfunctions.phpに以下のように記述する。

function year_month(){
  $date = single_month_title('',false);
  $point = strpos($date,'月');
  echo mb_substr($date,$point+1).'年'.mb_substr($date,0,$point+1);
}

このコードがどのような処理をしているかを解説していこう。

コードの詳細説明

$date = single_month_title('',false);

まずは通常表示の文字列(例:1月2013)を変数$dateに代入する。

引数に関しての詳細はWordPress Codex 日本語版に解説がある。

$point = strpos($date,'月');

このコードでは変数$dateに代入されている文字列の中で「月」という文字の位置を整数で変数$pointに代入する。

例えば文字列が「1月2013」の場合であれば、1という整数が代入されることになる。
開始位置は0だから、2文字目の位置は1というわけだ。

echo mb_substr($date,$point+1).'年'.mb_substr($date,0,$point+1);

そして、変数$dateに代入されている文字列から「月」の次の文字から後のすべてを切り取り、またそれに加えて$dateに代入されている文字列の最初から「月」の文字までを切り取り、整形した後に出力している。

例えば文字列が「1月2013」の場合であれば、「2013」と「1月」をそれぞれ切り取って、間に「年」という文字を加えて出力していることになる。
もしこの1行をもっと細かく分けて書くとすると、

$year = mb_substr($date,$point+1);
$month = mb_substr($date,0,$point+1);
echo $year.'年'.$month;

となる。
これをyear_monthという名前のユーザー定義関数とし、月別アーカイブページのテンプレート内から呼び出すわけだ。

単純な仕組みですね。