Wordpressのthe_date()やthe_time()で日付を英語で表示出来なくなったのでget_post_time()を使った

Wordpressのテーマを作ったり編集してる際、エントリーの投稿日時を出力するテンプレートタグには[http://wpdocs.sourceforge.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/the_date:title=the_date()][http://wpdocs.sourceforge.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/the_time:title=the_time()]を使います。この2つは、phpのdate()で使えるフォーマット文字列が使えると日付と時刻の書式 - WordPress Codex 日本語版などで説明されています。ところが、月を英語で出力するフォーマット文字列FMを使った所、何故か日本語で出力されました。

解決策

the_date()やthe_time()ではなく、get_post_time()を使う。日本語のCodexには載ってないので、英語のCodexです。

注意点

時間も出力できる

It does not display the time. To display the time of a post, use the_time().

Template Tags/get post time « WordPress Codex

こんな感じで、時間は出力しない的な事が書いてあったけど、Hisなど、時間用のフォーマット文字列を使えば時間も出ます。

echoが必要

Codexにはテンプレートタグと書いてありますが、echoが必要です。

<?php echo get_post_time('F.j.Y H:i:s'); ?>

こんな感じで使います。

phpwordpressのバージョン

割とバージョンによって動きが違うかもしれない内容です。一番下に環境という項目で、実際に試したphpwordpressのバージョンを書いてあります。

解説

the_date()やthe_time()は、内部でphpのdate()を使っていると思いきや、使ってません。管理画面で設定出来る、ブログの言語に合わせて、動きを変える様に作られてます。なので、日本語に設定してあるWordpressでは、月や曜日が日本語で出る様になってます。

フォーマット文字列 the_date()/the_time() get_post_time()
D Wed
l 水曜日 Wednesday
S th th
F 7月 July
M 7月 Jul
a am am
A AM AM

影響がありそうなフォーマット文字列を試してみた所、こんな感じになりました。日にサフィックス*1を付けるS、午前午後を表すaAは、言語設定によらず変わらない様です。

ついで

記事ループの中で、同じ日付の記事が複数ある場合に、the_date()は1回しか日付を出力しません。同じ日の投稿はひとまとめの枠に表示する様なデザインを作る場合にはthe_date()ですが、そうでない場合はthe_time()を使います。

環境

Wordpress 3.1.4
PHP 5.2.6
MAMP 1.7.2

*1:1st 4thなどのstやth