WordPressの月別アーカイブページの表示を逆にする
- 公開日 : 2013年1月19日
- カテゴリ : WordPress
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
という名前のユーザー定義関数とし、月別アーカイブページのテンプレート内から呼び出すわけだ。
単純な仕組みですね。