web-dev-qa-db-fra.com

Comment fonctionnent les chaînes échappées (esc_attr) dans Thèmes?

Je regardais le code TwentyEleven et ai trouvé ceci:

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

Ceci est un code qui est sorti de la balise de titre pour un post; le code complet dans la balise de titre étant:

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

J'ai jeté un coup d'œil à la documentation de la fonction esc_attr (qui semble être la même chose que la fonction esc_attr__?) Et indique qu'il ne prend qu'un paramètre, alors comment se passe-t-il en lui passant deux paramètres?

6
Brett

Différence générale entre esc_attr et esc_attr_*

La différence entre esc_attr() et esc_attr__() , esc_attr_e() , esc_attr_x() est que les trois derniers ne sont que des "wrappers" ou en d'autres termes des fonctions API de niveau supérieur.

Lorsque vous examinez la source des trois derniers éléments, vous remarquerez que ceux-ci sont entrés dans un seul argument intégré à un appel à translate() (ou translate_with_gettext_context() pour esc_attr_x().

Cela signifie que vous ne lancez que deux arguments: la chaîne à traduire et le domaine de texte qui aide WP à déterminer le fichier de langue à utiliser pour la traduction.

Tout ce que vous voyez d'autre est la sprintf() qui l'entoure, qui est la fonction php par défaut qui remplace les parties %s- et les parties %d- dans une chaîne (chaîne/chiffre).

Minetrap! Être conscient!

Si vous êtes ne passez pas un deuxième argument aux trois dernières versions de esc_attr(), vous rencontrerez le problème suivant: WP pense maintenant que vos chaînes font partie du noyau et essaie de les traduire. Ce qui peut conduire à des résultats très étranges.

Une autre chose qui pourrait arriver est que la chaîne de traduction (le 2ème argument) est déjà utilisée par un plugin ou un thème. Dans ce cas, le fichier de traduction chargé ultérieurement remporte la course et est pris à la place de votre fichier. Encore une fois: des résultats très étranges. Solution: préfixez votre domaine textuel, comme vous le feriez avec des noms globaux ou de fonctions personnalisés.

Conclusion

Si vous voulez éviter un deuxième argument, choisissez simplement esc_attr( 'your string' ) et évitez les trois autres versions.

6
kaiser