web-dev-qa-db-ja.com

_e()関数内で正しい方法で連結する方法

Functions.phpの中にタイトルのための関数を作成しようとしています。検索タイトル部分に問題があります。ここで問題となる部分を連結する必要があります。

elseif (is_search()) {
_e('Search for ', 'textdomain') . '"' . esc_html(the_search_quey()) . '$quot; - '; }

これは、このようなタイトルを与えます:searchtermsitenameの検索

サイト名には引用符と検索用語は付けられません。

私はこれを試しました:

elseif (is_search()) {
_e('Search for ' . '"' . esc_html(the_search_quey()) . '$quot; - ', 'textdomain'); }

これも動作しない、これは出力: "" sitenameの "searchtermSearch"

それは最初のものよりも優れていますが、彼は検索クエリが以前であり、そしてなぜその理由を理解することができません。

それでどんな助けでも、そして前もって感謝します。

4
Pierre

the_search_query()は自分自身をエコーするので、それを別のエコー関数(_e()とは何ですか)に入れることで、2番目の例のようになります。

L18n関数内で変数や関数を使用することはお勧めできません。それらは翻訳できないからです。詳しくはOtto'sを参照してください。 国際化:おそらく間違っています .

だからあなたはこのようなコードを使用する必要があります:

printf( __( 'Seach for "%s", 'textdomain' ), get_search_query() );

私はget_search_query()を使っていることに注意してください。なぜならそれは単にエコーする代わりに値を返すだけでなく、esc_attr()を通してクエリ文字列を渡し、esc_html()を必要としないからです。

5
Mamaduka

重要なのは、sprintfまたはprintf関数と組み合わせて%sプレースホルダーを使用することです。

printf(__('Search for “%s”', 'textdomain'), esc_html(get_search_query());

http://php.net/sprintf

また、the_search_query()はその結果を直接出力するので、get_search_query() whichが結果を返す必要があります。

3
Geert