web-dev-qa-db-fra.com

Comment concaténer la fonction _e () dans le bon sens?

J'essaie de créer une fonction pour le titre dans mon functions.php. J'ai un problème avec la partie de titre de la recherche où je dois concaténer la partie avec les problèmes:

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

celui-ci donne un titre comme celui-ci: Search for searchtermsitename

pas de guillemets et le terme de recherche est associé au nom du site.

J'ai essayé celui-ci:

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

cela ne fonctionne pas non plus, celui-ci génère: searchtermSearch for "" sitename

c'est mieux que le premier mais la requête de recherche est antérieure et ne peut pas comprendre pourquoi.

donc toute aide, et merci d'avance.

4
Pierre

the_search_query() se répète, donc en le mettant dans une autre fonction echo (ce que _e() est), vous obtiendrez le résultat comme dans le deuxième exemple.

Il n'est pas recommandé d'utiliser des variables ou des fonctions dans les fonctions l18n, car elles ne peuvent pas être traduites. Pour plus d'informations, consultez Otto: Internationalisation: Vous ne le faites probablement pas correctement .

Donc, vous devriez utiliser un code comme celui-ci:

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

Notez que j'utilise get_search_query(), car il renvoie simplement une valeur à la place, mais il transmet également la requête à esc_attr() sans avoir besoin de esc_html().

5
Mamaduka

La clé consiste à utiliser des espaces réservés %s en combinaison avec la fonction sprintf ou printf.

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

http://php.net/sprintf

Notez également que the_search_query() affiche son résultat directement, vous avez besoin de get_search_query() qui renvoie le résultat.

3
Geert