web-dev-qa-db-ja.com

テーマ内の翻訳されたエスケープ文字列(esc_attr)はどのように機能しますか?

私はTwentyElevenコードを見て、これを見つけました:

esc_attr__( 'Permalink to %s', 'twentyeleven' )

これは投稿のtitleタグから出てきたコードです。 titleタグ内の完全なコードは次のとおりです。

printf( esc_attr__( 'Permalink to %s', 'twentyeleven' ), the_title_attribute( 'echo=0' ) );

私はesc_attr関数(esc_attr__関数と同じように見えますか?)のドキュメントをチェックアウトしましたが、それは1つのパラメータしか取らないと述べています。

6
Brett

esc_attresc_attr_*の一般的な違い

esc_attr()esc_attr__()esc_attr_e()esc_attr_x() の違いは、後の3つは単に「ラッパー」または言い換えると、より高レベルのAPI関数です。

後の3つのソースを見ると、 translate() (またはtranslate_with_gettext_context()の場合は esc_attr_x() の呼び出しでラップされた単一の引数に入れられていることがわかります。

つまり、翻訳する文字列と、翻訳に使用する言語ファイルを決定するWPを支援するtextdomainの2つの引数を投入するだけです。

他のすべては sprintf() で囲まれています。これは、文字列(文字列/数字)内の%s- partsと%d- partsを置き換えるデフォルトのphp関数です。

マイントラップ!気をつけて!

渡さない後の3つのバージョンのesc_attr()の2番目の引数の場合、次の問題が発生します。WPは、文字列がコアの一部であると考えるようになりましたそしてそれらを翻訳しようとします。これは非常に奇妙な結果につながる可能性があります。

起こりうる別のことは、翻訳文字列(2番目の引数)がプラグインまたはテーマによって既に使用されていることです。この場合、後でロードされた翻訳ファイルが競合に勝ち、ファイルの代わりに取得されます。繰り返しますが、非常に奇妙な結果です。修正:カスタムグローバルまたは関数名で行うように、textdomainのプレフィックスを付けます。

結論

2番目の引数を避けたい場合は、単にesc_attr( 'your string' )を使用して、他の3つのバージョンを避けてください。

6
kaiser