テーマ編集をする際に頻出する関数__()これが何を意味するのか最初は分かりませんでした。

「子テーマを作って編集する」フェーズからは脱していたのですが、意味も分からず、消して任意の文字列をechoしてみたり、英文の所を変えて「あ、変わった」と、そんな状態で使っていました。

__()や_e()とは?

codexを調べるとwordpressにはtranslate()という翻訳するための関数が存在し、この関数を呼び出すためのエイリアスになります。
この関数は直接使ってはいけないそうなので、__()や_e()を使って出力しているんですね。

使い方

<?php
// __()の場合
$string = __( '文字列' , 'テキストドメイン');
echo $string;

//_e()の場合
_e( '文字列' , 'テキストドメイン' );
?>

__()は翻訳テキストを戻り値に、_e()は出力表示

上述の通り__()は、翻訳されたテキストを戻り値として返すため、何かに代入してechoすることで出力されます。
_e()は指定した文字列や文章から翻訳されたものをそのまま出力してくれます。(翻訳できなかった場合は、そのまま出力されます。)

第2引数のテキストドメイン

テキストドメインはオプション設定で初期値は’default’になります。デフォルトの場合(指定しなかった場合)は、ワードプレスに本体のwp-content/languages/に入っている[ロケール名].moという国際化用ファイルが利用されます。

テーマやプラグインの多くは、第2引数のテキストドメインにはテーマ名やプラグイン名が入っており、この場合は独自のmoファイルを利用していることになります。

テキストドメインとは?

利用しているテーマやプラグインを識別し翻訳対象を判断するために使われているので、ユニークな文字列になっています。そのため、使っているテーマ・プラグイン毎に変わってきます。

テキストドメインはどこに指定されている?

ファイルヘッダーと言われるメタ情報の箇所に一緒に記載されています。テーマであれば、style.cssの最上部。

/*
 Theme Name: hoge
 Theme URI: hoge.com/
 ...
*/

プラグインであればメインとなるphpファイルの最上部に。

<?php
 Plugin Name: hoge
 Plugin URI: hogehoge.com
 Description: XXXXXX
 ...
?>

Text Domainというメタ情報のところに翻訳関数で指定されている文言と同じものが入っているはずです。

自分で公式のテーマやプラグイン等を作らない限りオリジナルの設定をすることは無いと思いますが、うまく翻訳されず英語のままだったりしますので、仕組みを理解しておくだけで削除・変更して問題無いかの判断がつきやすくなります。

類似の翻訳系の関数

__()や_e()以外にもテキストではesc_attr__()やesc_attr_e()、数値では_n()などが存在します。

翻訳処理時にエスケープ処理が入ったり、対象が数値になるだけで翻訳してくれる処理は変わりません。

Similar Posts