Explication de la fonction apply_filters et de ses variables

16

J'apprends à construire des formulaires html en utilisant PHP en prenant un exemple du plugin "simplr form registration".

Je regarde ce code:

$form .= apply_filters('simplr-reg-instructions', __('Please fill out this form to sign up for this site', 'simplr-reg'));

Pouvez-vous expliquer ce qui se passe ici - ce que fait la fonction, pourquoi est-il nécessaire de 'simplr-reg-instructions' et 'simplr-reg'?

Pourquoi cette ligne ne peut-elle pas simplement être:

$form .= 'Please fill out this form to sign up for this site' ;

J'ai lu la référence de la fonction mais je n'arrive toujours pas à la comprendre.

Cendre
la source

Réponses:

22

Cette ligne utilise deux fonctions différentes qui nécessitent deux explications distinctes.

__ ()

Il s'agit d'une fonction de traduction. Si les réglages sont effectués correctement, il traduira le premier paramètre d'une liste de chaînes pré-traduites. Si une installation possède un fichier avec une traduction compilée pour cette fonction, elle l'utilisera. Bien sûr, le plugin doit empaqueter sa propre traduction, d'où le deuxième paramètre. simplr-regindique __()que la traduction de la chaîne 'Please fill out this form to sign up for this site'doit être dans le fichier de traduction associé à 'simplr-reg'(cela se fait plus tôt dans le plugin au moyen de la load_plugin_textdomain()fonction).

La fonction renvoie ensuite la traduction. S'il n'y a pas de traduction à renvoyer (par exemple, la langue actuelle n'a pas de traduction compilée, la chaîne n'a pas de traduction compilée pour ce paquet, etc.), l'entrée d'origine est retournée.

Donc pour un site WordPress en anglais, __( 'This', 'simplr-reg' )c'est fonctionnellement le même que 'This'. Pour en savoir plus sur l10n (Localisation), lisez-le dans le codex:

http://codex.wordpress.org/I18n_for_WordPress_Developers

apply_filters ()

Cette fonction vous permet de filtrer les valeurs utilisées par le plugin selon vos besoins. C'est l'un des principaux concepts à saisir en tant que développeur de plugins. WordPress est étendu via des hooks, qui sont essentiellement des points d'accès vous permettant de chronométrer l'exécution des actions de votre plugin et / ou de manipuler les informations / données que WordPress utilise, etc.

Pour manipuler des données telles que l'extrait de code que vous avez demandé, vous utiliseriez la fonction add_filter(). Voici un exemple de base de la façon dont cela fonctionne:

add_filter( 'simplr-reg-instructions', 'wpse16573_my_filter' );

Vous y reconnaîtrez probablement le premier argument. C'est le même que celui utilisé add_filterci-dessus. Ceci est le nom du crochet. Le deuxième argument est le rappel du filtre. Il doit s'agir d'un rappel valide d'une fonction (en savoir plus sur les rappels ici ). Cette ligne de code indique "Lorsque le 'simplr-reg-instructions'hook est exécuté, exécutez la fonction avec le rappel que j'ai fourni." apply_filters()exécute le hook trouvé dans son premier argument, signifiant essentiellement "exécuter toutes les fonctions enregistrées pour ce hook". apply_filterspasse ensuite tous les autres arguments (dans ce cas, 'Please fill out this form to sign up for this site') aux fonctions de ce filtre. Ainsi, le rappel que j'ai utilisé ci-dessus devrait ressembler à ceci:

function wpse16573_my_filter( $text ){
  $text = "<strong>$text</strong>";
  return $text;
}

Il existe deux types de crochets dans WordPress: les filtres (le type que nous utilisons ici) et les actions. La principale différence entre les deux est que les filtres s'attendent à ce que vous retourniez quelque chose et les actions ne le font pas. Donc, pour ce filtre, mon exemple ci-dessus ajoute du HTML autour 'Please fill out this form to sign up for this site'et le renvoie.

En savoir plus sur les actions et les hooks ici:

http://codex.wordpress.org/Plugin_API

John P Bloch
la source
John, merci beaucoup. Très bonne réponse! Mais je n'arrive pas à trouver une seule ligne "add_filter ('simplr-reg-instructions', ..." dans les fichiers du plugin. Comment le apply_filter peut-il fonctionner que?
Ash
1
S'il n'y a pas de filtres ajoutés à un crochet, il retourne juste l'entrée d'origine tout de suite. Le filtre n'est pas là pour le plugin à utiliser, il est là pour que vous puissiez l'utiliser si vous en avez besoin / envie de ne pas avoir à modifier le plugin lui-même.
John P Bloch
+1 Excellente explication - se lit comme les documents devraient ;-)
Eddie B
+1 Excellente réponse, exactement ce que je cherchais, je
devenais
5

Vous avez ici deux fonctions différentes apply_filterset__()

La fonction apply_filters est la façon WordPress de vous permettre de changer / éditer la valeur des variables en utilisant vos propres fonctions de rappel et la add_filterfonction. il accepte de nombreux arguments mais les plus importants sont les deux premiers:

$something = apply_filters( $tag, $value, $var ... );

$ tag est le nom du hook de filtre utilisé par add_filterexemple dans :

add_filter($tag,callback_function);

$ value est la valeur réelle que vous pourrez modifier ou modifier.

$ var est une variable que votre fonction de rappel peut utiliser, une ou plusieurs.

__() est utilisée pour les traductions:

__($message,$text_domain);

$ message est le message à traduire.

$ text_domain est la balise de domaine de texte utilisée pour charger la traduction du plugin ou du thème avec load_plugin_textdomain()

ce qu'il fait?

Il recherche dans le module de localisation la traduction de $ message et transmet la traduction à l'instruction de retour PHP. Si aucune traduction n'est trouvée pour $ message, elle renvoie simplement $ message.

Alors maintenant, les deux fonctions dans votre cas fonctionnent de la même manière, les apply_filters enverront à toute fonction de rappel associée au simplr-reg-instructionscrochet de filtre la valeur traduite (si elle existe) de 'Veuillez remplir ce formulaire pour vous inscrire à ce site' en utilisant le texte- domaine desimplr-reg

Bainternet
la source
Bainternet, merci beaucoup! Comment se fait-il que je ne trouve aucune ligne "add_filter ('simplr-reg-instructions'," dans les fichiers du plugin?
Ash
C'est un crochet laissé aux développeurs qui souhaitent étendre ou filtrer la fonctionnalité des plugins.
Bainternet
Donc, add_filter n'est pas attendu ici? Je ne comprends pas pourquoi. Apply_filters ne devrait-il pas exécuter toutes les fonctions associées à son hook par les fonctions add_filter?
Ash
apply_filtersest un espace réservé qui vous permet d'accrocher vos propres fonctions en utilisant add_filter, donc aucun add_filter n'est prévu sauf si vous ajoutez le vôtre
Bainternet