Les points d'ancrage des actions et des filtres constituent un élément fondamental des différentes API WordPress. Sans eux, vous êtes limité à ce que vous pouvez faire dans vos thèmes et (surtout) vos plugins..
Mais parfois, il peut être facile de confondre les deux, en particulier dans les cas où WordPress possède à la fois un hook d’action et un hook de filtre du même nom..
Dans cet article, je vais définir les crochets d'action et de filtrage, et décrire la différence entre eux, et leur montrer comment les utiliser dans vos thèmes et plug-ins. Je vais également donner quelques exemples de quand vous pourriez utiliser chacun.
Lorsque vous ajoutez des actions et des points de filtrage à votre code (ou que vous y ajoutez des fonctions), il est utile de comprendre comment les actions et les filtres sont appelés par WordPress et ce qui se passe dans quel ordre. Je ne vais pas couvrir cela en détail ici car nous avons un autre tutoriel qui fait ce travail.
Commençons par quelques définitions. Je définirai aussi les actions et filtres, ainsi que les fonctions, afin que vous puissiez voir la différence entre eux.
Les fonctions sont la première chose que la plupart des gens travaillent lorsqu'ils apprennent le développement WordPress; si vous avez ajouté du code à celui de votre thème functions.php
fichier, alors vous aurez écrit une fonction.
Les fonctions spécifient comment quelque chose va se passer. Vous codez une fonction pour interroger des données, pour générer du contenu ou pour effectuer de nombreuses autres tâches. Vous pouvez appeler (exécuter) des fonctions directement dans les fichiers de modèle de votre thème, ou vous pouvez les associer à des actions ou à des points de filtrage. Les fonctions peuvent également inclure des balises de modèle, telles que des balises conditionnelles, pour spécifier quand la fonction doit s'appliquer.
Je vais vous montrer les différentes manières d'exécuter des fonctions plus tard dans cet article..
Les points d'accrochage (ou actions) sont déclenchés lorsqu'un événement se produit, tel que le chargement d'une page, la connexion d'un utilisateur ou une action personnalisée que vous définissez dans votre thème ou plug-in..
Vous pouvez ajouter vos propres crochets d’action à l’aide des boutons do_action ()
fonction, que je vais démontrer sous peu. Toutes les fonctions que vous associez à cette action seront exécutées à ce stade du code..
Les crochets de filtre, ou filtres, contrôlent comment quelque chose se passe ou modifient quelque chose qui est déjà en sortie. Vous pouvez utiliser un filtre pour produire des métadonnées dans un format spécifique, pour remplacer le texte produit par votre plug-in ou pour empêcher l'affichage d'un élément..
Vous ajoutez des filtres dans votre code en utilisant le apply_filters ()
fonction, que je vais démontrer sous peu. Comme le mot "appliquer" l'indique, vous appliquez des filtres au code existant, alors qu'une action créée à l'aide de do_action ()
est vide jusqu'à ce que vous accrochiez des fonctions.
Jetons un coup d'oeil à quelques exemples montrant comment vous utilisez chacune des fonctions, actions et filtres. Premièrement, nous verrons comment utiliser des fonctions directement dans votre code sans les attacher à un crochet.
Voici un exemple de fonction appelée directement dans un fichier de modèle. Dans mes sites clients, j'ajoute un colophon dans le pied de page, qui inclut les informations de copyright. Voici la fonction:
if (! function_exists ('compass_colophon')) function compass_colophon () ?>"title =""rel =" home "> Propulsé par WordPress et conçu par Compass Design. Cette fonction est connectable car je l’utilise dans un thème parent; si je crée ensuite une nouvelle fonction avec le même nom dans mon thème enfant, cette fonction sera prioritaire. Notez que la fonction inclut une autre fonction,
compass_colophon ()
, en l'appelant directement dans le code.Cette fonction est dans le
functions.php
fichier de mon thème parent. Je peux l'appeler directement dans lefooter.php
fichier de mon thème, comme suit:compass_colophon ();Cela renvoie le code dans la fonction au point de mon thème où je l'appelle. Vous pouvez également passer des paramètres à vos fonctions, qui sont ensuite utilisées dans la fonction.
Comme je le montrerai tout à l'heure, cette fonction pourrait également être associée à une action ou à un filtre.
Accrocher des fonctions à des actions
Plutôt que d'appeler cette fonction colophon directement, j'aurai plus de flexibilité si je l'attache à un crochet.
Création de crochets d'action
Au lieu d'appeler le
compass_colophon ()
fonction dans mon fichier de pied de page, je peux ajouter un crochet d’action à ce stade de lafooter.php
fichier, en ajoutant ceci:do_action ('compass_in_footer');le
do_action ()
function a un paramètre obligatoire, qui est le nom de l'action. Vous pouvez également éventuellement y ajouter des arguments.Accrocher des fonctions à des actions
Alors maintenant, au lieu d’appeler ma fonction colophon, je dois l’accrocher à mon nouveau crochet d’action. Dans mon
functions.php
fichier, j'ajoute ceci avec ma fonction:add_action ('compass_in_footer', 'compass_colophon');Cela accroche ma fonction au
compass_in_footer
action, ce qui signifie que le code dans ma fonction sera exécuté à l'endroit du code où l'action a été placée. Le premier paramètre est le nom du hook d’action, et le second est le nom de ma fonction..Un des avantages de cette méthode est que vous pouvez associer plusieurs fonctions à la même action et que vous pouvez définir la priorité pour qu'elles se déclenchent dans l'ordre de votre choix..
Alors disons que j'ai une autre fonction que je veux accrocher à mon
compass_in_footer
crochet, appelécompass_smallprint ()
, qui contient encore quelques petits caractères:if (! function_exists (compass_smallprint ())) function compass_smallprint () // contenu de la fonction ici add_action ('compass_in_footer', 'compass_smallprint', 20);Vous pouvez voir ici que j'ai ajouté un troisième paramètre à mon
add_action ()
fonction, qui est la priorité. La priorité par défaut estdix
, qui sera appliqué si vous laissez ce champ vide. Donc, parce que je n'ai pas défini de priorité pour moncompass_colophon ()
fonction, réglage 20 pour lecompass_smallprint ()
fonction va faire fonctionner cette fonction après lacompass_colophon ()
une fonction.Décrocher les fonctions des actions
Parfois, vous souhaitez arrêter l'exécution d'une fonction et vous ne pouvez pas la remplacer car elle n'est pas connectable. Si la fonction a été rattachée à un crochet d’action, vous pouvez le faire en utilisant le bouton
remove_action ()
une fonction.Donc si je veux empêcher mon
compass_smallprint ()
fonction de courir, je le décroche de lacompass_in_footer
action comme si:remove_action ('compass_in_footer', 'compass_smallprint', 20);le
remove_action ()
function a trois paramètres: le nom du hook d'action, le nom de la fonction et la priorité avec laquelle la fonction a été initialement connectée à l'action. Vous devez inclure la priorité pour que cela fonctionne.Vous pouvez également décrocher toutes les fonctions d'une action si vous souhaitez les empêcher toutes de s'exécuter. Soyez prudent lorsque vous faites cela, car il peut y avoir des fonctions que vous ne connaissez pas et qui sont liées à votre action..
Pour ce faire, utilisez le
remove_all_actions ()
une fonction:remove_all_actions ('compass_in_footer');L'ajout d'un numéro de priorité en tant que deuxième paramètre supprime uniquement les fonctions liées à ce crochet d'action avec la priorité que vous avez spécifiée, ce qui vous donne davantage de contrôle..
Fonctions de raccordement aux filtres
Vous avez également la possibilité d’accrocher vos fonctions pour filtrer les crochets. Vous faites cela lorsque vous souhaitez modifier ou remplacer un code existant. Lorsque vous créez le crochet de filtre (à l'aide de la
apply_filters ()
fonction), vous enroulez le code dans votre thème ou votre plugin, qui est ensuite modifié par les filtres attachés au hook.Cela peut être utile si vous avez des options de thème ou de plug-in que vous souhaitez remplacer par un paramètre par défaut, ou si vous créez un thème parent pouvant contenir des éléments remplacés par un thème enfant..
Création de crochets de filtre
le
apply_filters ()
function a trois paramètres: le nom du crochet de filtre, la valeur que vous souhaitez filtrer (c'est-à-dire la valeur par défaut) et les variables facultatives que vous transmettez ensuite aux fonctions rattachées au filtre..Vous pouvez ajouter un filtre dans vos fichiers de modèle de thème ou à l'intérieur d'une fonction liée via un crochet d'action. Jetons un coup d'oeil aux deux options.
Revenir à mon
compass_colophon ()
fonction, je convertis cela en filtre en ajoutant son contenu à monfooter.php
déposer à l'intérieur duapply_filters ()
fonctionne comme ceci:echo apply_filters ('compass_colophon', '"title =""rel =" home "> Propulsé par WordPress et conçu par Compass Design. ');Ceci sort le code que j'ai défini comme second paramètre de mon
apply_filters ()
une fonction.Cependant, je préfère ne pas l'ajouter directement à mon fichier de modèle de thème. Je vais donc ajouter le filtre à la fonction que j'attache déjà via un crochet d'action..
Alors j'ajoute le
compass_in_footer
action à monfooter.php
déposer en utilisant ledo_action ()
fonctionne comme indiqué ci-dessus, puis je crée une fonction dans monfunctions.php
fichier qui est relié à cette action et contient un filtre:if (! function_exists ('compass_colophon')) function compass_colophon () echo apply_filters ('compass_colophon_filter', '"title =""rel =" home "> Propulsé par WordPress et conçu par Compass Design. '); add_action ('compass_in_footer', 'compass_colophon');Cela signifie que je peux maintenant remplacer le contenu par défaut de l'une des trois manières suivantes:
compass_colophon ()
dans mon thème enfant, qui remplace la fonction de mon thème parent car il est enfichablecompass_colophon ()
fonction de la compass_in_footer
crochet d'action et l'écriture d'une nouvelle fonction que j'attache à sa placecompass_colophon_filter
crochet de filtre, qui remplace la valeur dans mon apply_filters ()
une fonctionDans la vie réelle, vous n'auriez pas besoin de toutes ces options. Il est donc plus probable que vous appliquiez des filtres à une partie du contenu de votre fonction plutôt qu'à la totalité..
Donc, je pourrais créer deux filtres, un pour la section copyright et un autre pour les crédits:
if (! function_exists ('compass_colophon')) function compass_colophon () echo ''; echo apply_filters ('compass_copyright_filter', ' "title =""rel =" home "> '); echo apply_filters ('compass_copyright_filter', ' Propulsé par WordPress et conçu par Compass Design. '); écho ' '; add_action ('compass_in_footer', 'compass_colophon');
Ensuite, je pourrais soit remplacer l’ensemble de ma fonction compass_colophon en le décrochant ou en en écrivant un nouveau dans le thème de mon enfant, soit créer une fonction liée à la compass_copyright_filter
ou compass_credits_filter
crochet de filtre, pour remplacer chaque élément individuellement.
Pour accrocher une fonction à un crochet de filtre, vous utilisez le add_filter ()
fonction, qui a deux paramètres: le nom du hook et le nom de la fonction.
Donc, pour changer les crédits, j'écrirais cette fonction:
fonction new_credits () ?> Propulsé par WordPress et conçu par Rachel McCollin.Cela remplace la valeur définie dans mon original
compass_credits_filter
crochet de filtrage avec le contenu de monnew_credits ()
fonction, mais conserve tout le reste dans lecompass_colophon ()
fonctionner de la même manière.Vous pouvez également spécifier des priorités lorsque vous raccordez des fonctions à des filtres, de la même manière que pour les crochets d'action. Les fonctions avec une priorité inférieure seront exécutées en premier.
Décrocher les fonctions des filtres
Comme avec les crochets d'action, vous pouvez également supprimer des fonctions des crochets de filtre. Pour ce faire, vous utilisez la fonction remove_filter (), qui comporte trois paramètres: le nom du crochet de filtre, le nom de la fonction et la priorité, qui est obligatoire si une priorité a été définie lors du rattachement initial de la fonction au filtre..
Donc pour enlever mon
new_credits ()
fonction, j'utilise ceci:remove_filter ('compass_credits_filter', 'new_credits');La sortie du code reviendrait alors à la valeur que j'avais spécifiée dans mon original
apply_filters ()
une fonction. Donc si je voulais enlever lenew_credits ()
fonctionner et ne rien avoir à la place, je devrais ajouter une nouvelle fonction. Je décroche alors la première fonction et accroche ma nouvelle fonction comme suit:fonction no_credits () return; remove_filter ('compass_credits_filter', 'new_credits'); add_filter ('compass_credits_filter', 'no_credits');Résumé
Comprendre la différence entre les crochets d’action et de filtrage et pouvoir les utiliser efficacement donnera un coup de pouce au développement de votre thème et de vos plugins. En fait, sans utiliser de hooks d'au moins un type, vous ne pouvez pas écrire de plugins, car le code d'activation de vos plugins se fait uniquement via l'action et les hooks de filtrage auxquels il est attaché..
Ce guide vous a montré comment ajouter la même fonctionnalité à l'aide d'une fonction, d'un crochet d'action et d'un ou plusieurs crochets de filtre, ainsi que des techniques pour supprimer des fonctions des crochets et vous indiquer quand chaque technique est plus utile..
En plus de lier les fonctions à vos propres actions et aux filtres que vous créez, vous pouvez les associer aux actions et aux filtres fournis par WordPress, tels que le
wp_head
action ou labody_class
filtre.