投稿日を英語表記する
WordPressの日付や時刻に関するテンプレートタグについて
WordPressには日付や時刻に関するテンプレートタグや関数が多数用意されています。
- the_time()
- get_the_time()
- the_date()
- get_the_date()
- .etc
など色々ありますが、
多くのテーマでは投稿の公開日を表示する処理に
- 投稿の公開時刻を表示する the_time()
- 投稿の公開日を取得する get_the_date()
を使うことが多いようです。
表示と取得の違いについてはここでは触れませんが、このテンプレートタグ?に日付・時刻に関するアルファベットの引数(パラメータ ※PHPで使われているのと同じ)を渡す事で、その引数に起因する日付時刻の表示や取得ができます。
詳しくはこちら
通常であれば引数に ‘F’ を指定すると「January」~「December」のように英語のフルスペルで表示されます。
また ‘M’ を指定すると「Jan」~「Dec」のように3文字形式で表示されます。
しかし、日本語版WordPressでは、上記の関数を使用すると月や曜日などの表記が翻訳され強制的に「○○月」として表示されます。
それではどのようにして英語表記にするのか?
以下に具体的な方法を記述します。
get_post_time()を使う
月や曜日が強制的に翻訳されてしまうのを回避し、英語表記させるには get_post_time() を使用します。
使用しているテーマファイルの
<?php the_time( '現在のフォーマット' ); ?>
または、
<?php echo get_the_date( '現在のフォーマット' ); ?>
※「’現在のフォーマット’」はご自身の設定や使用しているテーマにより異なります。
となっている箇所を探し
1 |
<!--?php echo get_post_time('F jS, Y'); ?--> |
のようにに書き換えます。
これで日付の表示が「April 13th, 2017」のように表示されるはずです。
ただ、この方法だと後から日付のフォーマットを変更したい、あるいは日本語に戻したいと思った場合、また該当箇所を探し出し、テーマファイルを直接書き換える必要があります。
そこで、毎回直接書き換える必要がないようにするには、一般設定でセットしたフォーマットを取得する get_option(‘date_format’) を引数に指定し次のように書き換えます。
1 |
<!--?php echo get_post_time( get_option('date_format') ); ?--> |
このままでは現在設定中のフォーマットで出力されるので、管理画面の 設定 > 一般 > 日付のフォーマット でカスタムを選択し、テキストボックスに「F jS, Y」等と記入します。
これで同様に日付の表示が「April 13th, 2017」のように表示され、変更したい時は管理画面の一般設定から自由にフォーマットを変更できるようになります。
フィルターフックを使って簡単に実装する方法
これまで説明してきた方法は、テーマファイルの該当箇所を探し出しソースを書き換える必要があるため、1つのテーマをカスタマイズしながら長く使う人や殆ど自作のテーマを使っている人には、1度書き換えてしまうだけなので良いかもしれません。
しかし、WordPressの初期テーマ「Twentyシリーズ」のように毎年新作が出るたびにテーマを変える人や子テーマ運用している人は、テーマの変更や親テーマのアップデートのたびに書き換え作業が発生するため、該当箇所が複数ある場合などは見落しによる修正漏れが発生する可能性があります。
そこで、フィルターフックを使って簡単に実装する方法を紹介します。
「Twentyシリーズ」の場合は functions.php に以下の記述を追加してください。
1 2 3 4 5 6 |
/*投稿日を英語で表示*/ add_filter( 'get_the_date','my_date_format'); function my_date_format(){ $my_date_format = get_post_time(get_option( 'date_format' )); return $my_date_format; } |
WordPressで提供している「Twentyシリーズ」では get_the_date() を使って投稿日を取得しているので(シリーズ全部じゃないかも。。)、これをフックとしてmy_date_format() を実行。get_post_time(get_option( ‘date_format’ ))で取得した日付を返します。
これで管理画面の一般設定から自由にフォーマットを変更できるようになります。
このサイトでも使用している「Simplicity2」の場合は、子テーマの functions.php (子テーマ運用していない人はテーマ本体の functions.php )に以下の記述を追加。
1 2 3 4 5 6 |
/*投稿日を英語で表示*/ add_filter( 'the_time','my_date_format'); function my_date_format(){ $my_date_format = get_post_time(get_theme_text_date_format()); return "$my_date_format"; } |
「Simplicity2」では the_time() を使って投稿日を表示しているので、これをフックとしてフィルターを通します(my_date_format()を実行します)。
また、表示・非表示判別を get_theme_text_date_format() という関数で行い、表示の場合に管理画面で設定しているフォーマットを返すというような処理をしているようです。(たぶん。。。曖昧な表現ですが、なんとなく試したら上手くいったので実はじっくりソースを読んでおりません。。。)
関数名・引数に若干違いがありますがやっていることは同じです。
更新日も英語表記にする
更新日を英語で表記するためには、投稿の最終更新時刻(と日付)を取得できる get_post_modified_time() を使います。
このサイトでも使用している「Simplicity2」では更新日を表示するために get_mtime() という関数が使用されていますが、この関数はWordPressのテンプレートタグではなく、フィルターがかけられない?(この関数をフックとしてmy_mdate_format()が実行されない)ので、この get_mtime()関数内部で使われている(であろう) get_the_modified_time() をフックとしてフィルターを通してみました(my_mdate_format()を実行してみました)。
結果は成功で無事更新日も英語表記されたのでそのコードを紹介。
このサイトでも使用している「Simplicity2」の場合は、子テーマの functions.php (子テーマ運用していない人はテーマ本体の functions.php )に以下の記述を追加。
記述場所はどこでも結果は同じだと思いますが、解り易いので前述の「投稿日を英語で表示」のコードのすぐ下あたりに
1 2 3 4 5 6 |
/*更新日も英語で表示*/ add_filter( 'get_the_modified_time','my_mdate_format'); function my_mdate_format(){ $my_mdate_format = get_post_modified_time(get_theme_text_date_format()); return "$my_mdate_format"; } |
と記述します。
これで更新日も英語表記となります。
ちなみに、このコードを他のテーマでも使える汎用性のあるかたちにすると以下のような感じでしょうか?
1 2 3 4 5 6 |
/*更新日を英語表記*/ add_filter( 'get_the_modified_time','my_mdate_format'); function my_mdate_format(){ $my_mdate_format = get_post_modified_time(get_option( 'date_format' )); return "$my_mdate_format"; } |
‘get_the_modified_time’ の部分は使用しているテーマによって変わります。
get_the_modified_time()は時間も取得できるため、更新日時の取得で比較的多く使われているようですが、更新日を取得または表示する関数は他に
- get_the_modified_date()
- the_modified_time()
- the_modified_date()
などがあります。
日本語翻訳ファイル ja.po ja.mo を書き換える
この方法は wp-content/languages/ フォルダ内にある ja.po ファイルを書き換えて ja.mo へコンパイルするというもの。
具体的な方法は
が参考になると思います。
ただし、最新バージョンのWordPressでは初期設定で本体のマイナーアップデートと翻訳ファイルが自動更新される仕様になっているので、この方法で英語表記させる為には自動更新の機能を停止する必要があります。また ja.po ファイル → ja.mo ファイルの変換にはPoeditなどの専用ソフトが必要になります。
locale.phpを書き変える
時々この事について触れている記事を見かけますが、数年前はこの方法で英語表記できた記憶があります。
しかし、現時点の最新バージョンではこの方法ではうまく機能しませんでした。
また、専門的な知識の無い人がWordPress本体のファイルを変える事はサイト運営上好ましくないと思うので、この方法は推奨しません。
WordPress現時点での最新バージョン4.7.3では wp-includes/locale.php を修正しても機能しません。
wp-includes/class-wp-locale.php の129行目あたりからのinit()が該当する部分で、この中の __(‘○○○’)または_x( ‘○○○’, ‘genitive’ ) を全て’○○○’に変更
以下該当箇所
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 |
public function init() { // The Weekdays $this->weekday[0] = /* translators: weekday */ __('Sunday'); $this->weekday[1] = /* translators: weekday */ __('Monday'); $this->weekday[2] = /* translators: weekday */ __('Tuesday'); $this->weekday[3] = /* translators: weekday */ __('Wednesday'); $this->weekday[4] = /* translators: weekday */ __('Thursday'); $this->weekday[5] = /* translators: weekday */ __('Friday'); $this->weekday[6] = /* translators: weekday */ __('Saturday'); // The first letter of each day. $this->weekday_initial[ __( 'Sunday' ) ] = /* translators: one-letter abbreviation of the weekday */ _x( 'S', 'Sunday initial' ); $this->weekday_initial[ __( 'Monday' ) ] = /* translators: one-letter abbreviation of the weekday */ _x( 'M', 'Monday initial' ); $this->weekday_initial[ __( 'Tuesday' ) ] = /* translators: one-letter abbreviation of the weekday */ _x( 'T', 'Tuesday initial' ); $this->weekday_initial[ __( 'Wednesday' ) ] = /* translators: one-letter abbreviation of the weekday */ _x( 'W', 'Wednesday initial' ); $this->weekday_initial[ __( 'Thursday' ) ] = /* translators: one-letter abbreviation of the weekday */ _x( 'T', 'Thursday initial' ); $this->weekday_initial[ __( 'Friday' ) ] = /* translators: one-letter abbreviation of the weekday */ _x( 'F', 'Friday initial' ); $this->weekday_initial[ __( 'Saturday' ) ] = /* translators: one-letter abbreviation of the weekday */ _x( 'S', 'Saturday initial' ); // Abbreviations for each day. $this->weekday_abbrev[__('Sunday')] = /* translators: three-letter abbreviation of the weekday */ __('Sun'); $this->weekday_abbrev[__('Monday')] = /* translators: three-letter abbreviation of the weekday */ __('Mon'); $this->weekday_abbrev[__('Tuesday')] = /* translators: three-letter abbreviation of the weekday */ __('Tue'); $this->weekday_abbrev[__('Wednesday')] = /* translators: three-letter abbreviation of the weekday */ __('Wed'); $this->weekday_abbrev[__('Thursday')] = /* translators: three-letter abbreviation of the weekday */ __('Thu'); $this->weekday_abbrev[__('Friday')] = /* translators: three-letter abbreviation of the weekday */ __('Fri'); $this->weekday_abbrev[__('Saturday')] = /* translators: three-letter abbreviation of the weekday */ __('Sat'); // The Months $this->month['01'] = /* translators: month name */ __( 'January' ); $this->month['02'] = /* translators: month name */ __( 'February' ); $this->month['03'] = /* translators: month name */ __( 'March' ); $this->month['04'] = /* translators: month name */ __( 'April' ); $this->month['05'] = /* translators: month name */ __( 'May' ); $this->month['06'] = /* translators: month name */ __( 'June' ); $this->month['07'] = /* translators: month name */ __( 'July' ); $this->month['08'] = /* translators: month name */ __( 'August' ); $this->month['09'] = /* translators: month name */ __( 'September' ); $this->month['10'] = /* translators: month name */ __( 'October' ); $this->month['11'] = /* translators: month name */ __( 'November' ); $this->month['12'] = /* translators: month name */ __( 'December' ); // The Months, genitive $this->month_genitive['01'] = /* translators: month name, genitive */ _x( 'January', 'genitive' ); $this->month_genitive['02'] = /* translators: month name, genitive */ _x( 'February', 'genitive' ); $this->month_genitive['03'] = /* translators: month name, genitive */ _x( 'March', 'genitive' ); $this->month_genitive['04'] = /* translators: month name, genitive */ _x( 'April', 'genitive' ); $this->month_genitive['05'] = /* translators: month name, genitive */ _x( 'May', 'genitive' ); $this->month_genitive['06'] = /* translators: month name, genitive */ _x( 'June', 'genitive' ); $this->month_genitive['07'] = /* translators: month name, genitive */ _x( 'July', 'genitive' ); $this->month_genitive['08'] = /* translators: month name, genitive */ _x( 'August', 'genitive' ); $this->month_genitive['09'] = /* translators: month name, genitive */ _x( 'September', 'genitive' ); $this->month_genitive['10'] = /* translators: month name, genitive */ _x( 'October', 'genitive' ); $this->month_genitive['11'] = /* translators: month name, genitive */ _x( 'November', 'genitive' ); $this->month_genitive['12'] = /* translators: month name, genitive */ _x( 'December', 'genitive' ); // Abbreviations for each month. $this->month_abbrev[ __( 'January' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Jan', 'January abbreviation' ); $this->month_abbrev[ __( 'February' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Feb', 'February abbreviation' ); $this->month_abbrev[ __( 'March' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Mar', 'March abbreviation' ); $this->month_abbrev[ __( 'April' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Apr', 'April abbreviation' ); $this->month_abbrev[ __( 'May' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'May', 'May abbreviation' ); $this->month_abbrev[ __( 'June' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Jun', 'June abbreviation' ); $this->month_abbrev[ __( 'July' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Jul', 'July abbreviation' ); $this->month_abbrev[ __( 'August' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Aug', 'August abbreviation' ); $this->month_abbrev[ __( 'September' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Sep', 'September abbreviation' ); $this->month_abbrev[ __( 'October' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Oct', 'October abbreviation' ); $this->month_abbrev[ __( 'November' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Nov', 'November abbreviation' ); $this->month_abbrev[ __( 'December' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Dec', 'December abbreviation' ); // The Meridiems $this->meridiem['am'] = __('am'); $this->meridiem['pm'] = __('pm'); $this->meridiem['AM'] = __('AM'); $this->meridiem['PM'] = __('PM'); // Numbers formatting // See https://secure.php.net/number_format /* translators: $thousands_sep argument for https://secure.php.net/number_format, default is , */ $thousands_sep = __( 'number_format_thousands_sep' ); if ( version_compare( PHP_VERSION, '5.4', '>=' ) ) { // Replace space with a non-breaking space to avoid wrapping. $thousands_sep = str_replace( ' ', ' ', $thousands_sep ); } else { // PHP < 5.4.0 does not support multiple bytes in thousands separator. $thousands_sep = str_replace( array( ' ', ' ' ), ' ', $thousands_sep ); } $this->number_format['thousands_sep'] = ( 'number_format_thousands_sep' === $thousands_sep ) ? ',' : $thousands_sep; /* translators: $dec_point argument for https://secure.php.net/number_format, default is . */ $decimal_point = __( 'number_format_decimal_point' ); $this->number_format['decimal_point'] = ( 'number_format_decimal_point' === $decimal_point ) ? '.' : $decimal_point; // Set text direction. if ( isset( $GLOBALS['text_direction'] ) ) $this->text_direction = $GLOBALS['text_direction']; /* translators: 'rtl' or 'ltr'. This sets the text direction for WordPress. */ elseif ( 'rtl' == _x( 'ltr', 'text direction' ) ) $this->text_direction = 'rtl'; if ( 'rtl' === $this->text_direction && strpos( get_bloginfo( 'version' ), '-src' ) ) { $this->text_direction = 'ltr'; add_action( 'all_admin_notices', array( $this, 'rtl_src_admin_notice' ) ); } } |
COMMENT ▼コメントはこちら▼