裏紙に書く程度の内容

wordpressのカレンダーを英語表記にする方法

wordpressのget_calendar()で表示されるカレンダーを、英語表記にする方法についてです。

※ widgetじゃなくてget_calendar()の場合です。

デフォルトの表示

get_calendar();

デフォルトではこんな感じで表示されます。

calendar-default

見た目を変えるだけならcssでどうにかできますが、英語の表記にしたい場合はそうもいきません。 (ex. 月 ⇒ MON にしたい)

修正方法

get_calendar() について

get_calendar()の仕様を見ると、パラメータを2つ渡せるようです。

https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_calendar

get_calendar($initial, $echo);

$initial (boolean) (optional) TrueかFalse 初期値: True True - 曜日を英語の頭文字1文字で出力(例えば日曜日なら “S”) False -曜日を言語別に対応した省略文字で出力(例えば日曜日なら “Sun”)

$echo (boolean) (optional) カレンダーが表示されるかどうかを決定します。 初期値: True True - カレンダーをエコーします、しかし変数には戻しません。 False - カレンダーを返しますが、画面に表示しません。

2番目のパラメータ($echo)をfalseにすれば、カレンダーのHTMLが文字列として取得できるため、どうにかできそうです

どうにかする。

どうにかします。

get_calendar(true, false);で取得したhtmlは以下のようになっています。

    (tfoot,tbody省略)

これを置き換えればよいわけです。functions.php に以下の関数を用意します。function getMyCalendar($echo = true) {

    $transArray = array(
        "月" => "MON",
        "火" => "TUE",
        "水" => "WED",
        "木" => "THU",
        "金" => "FRI",
        "土" => "SAT",
        "日" => "SUN",
    );

    $calendar = get_calendar(true, false);

    foreach($transArray as $key => $value) {
        $calendar = preg_replace("/$key/", $value, $calendar);

    }

    $captionData = date("M.Y");
    $caption = "";
    $calendar = preg_replace("{}", $caption, $calendar);

    if ($echo) {
        echo $calendar;
        $calendar = null;
    }
    return $calendar;
}

単純に、各曜日を英語表記に置換しています。 ただ、それだけだと の部分が 2015年11MON になってしまうので、 部は後から置き換えていますで、これをテンプレート側で;で出力するとのように表示されます。※これだとHTMLはMONとなっているため対処が必要。まあ、使わないならほっといても。 とりあえず表記を英語にしただけですが、同じようにget_calendar()でHTMLを取得してからごにょごにょする方法だといろいろ細かくカスタマイズできそうです。

  2015年11月

    月
    火
    水
    木
    金
    土
    日

$captionData.*
Index