Source : https://kinsta.com/fr/blog/hooks-wordpress/
Les hooks WordPress sont lâun des outils les plus importants Ă avoir dans lâarsenal dâun dĂ©veloppeur WordPress. Ils sont la base du dĂ©veloppement des extensions et des thĂšmes WordPress. Vous pouvez utiliser les nombreux hooks intĂ©grĂ©s Ă WordPress pour vous « accrocher » au cĆur de WordPress avec votre code personnalisĂ© et faire ou modifier quelque chose.
Il existe deux types de hooks WordPress : Actions et Filtres. Les hooks sont si courants que mĂȘme le cĆur de WordPress les utilise lui-mĂȘme largement. WordPress inclut Ă©galement un moyen pour vous de dĂ©finir vos propres hooks personnalisĂ©s afin que dâautres dĂ©veloppeurs puissent sâaccrocher Ă votre code.
Apprendre comment fonctionnent les actions, les filtres et les hooks personnalisés est essentiel pour maßtriser le développement de WordPress.
La premiĂšre moitiĂ© de cet article couvre les bases des hooks WordPress et explique leur fonctionnement Ă lâaide de multiples exemples. Dans la deuxiĂšme moitiĂ©, vous apprendrez comment les utiliser pour personnaliser WordPress, crĂ©er vos propres hooks personnalisĂ©s et les utiliser pour construire vos propres extensions Ă©volutives.
Cela vous semble excitant ? Plongeons dans le vif du sujet !
Table des matiĂšres
- Que sont les hooks WordPress ?
- Hooks vs Actions vs Filtres
- Comment fonctionnent les hooks WordPress ?
- OĂč enregistrer les hooks et leurs fonctions ?
- Utilisation des hooks WordPress
- Liste et ressources de hooks WordPress
- Trouver des hooks enregistrés sur une page WordPress
- Le hook « all »
- OĂč sont stockĂ©s les hooks WordPress ?
- Comment créer vos hooks WordPress personnalisés
- Suppression des fonctions de rappel des hooks WordPress
- Tutoriels WordPress Hooks en prime
Que sont les hooks WordPress ?
Une page WordPress est assemblĂ©e par des tonnes de fonctions et dâinterrogations de bases de donnĂ©es. Le cĆur de WordPress, les extensions et le thĂšme travaillent ensemble pour produire les Ă©lĂ©ments de la page tels que le texte, les images, les scripts et les styles. Une fois les Ă©lĂ©ments assemblĂ©s, le navigateur les rassemble et affiche la page.
Les hooks de WordPress vous permettent de vous connecter Ă ce processus de construction Ă certains moments et dâexĂ©cuter votre code personnalisĂ©. La principale fonction des hooks est de vous permettre de modifier ou dâajouter des fonctionnalitĂ©s Ă WordPress sans toucher aux fichiers du cĆur.
LâAPI dâextension WordPress alimente la fonctionnalitĂ© des hooks WordPress. Vous utilisez les hooks en appelant certaines fonctions de WordPress appelĂ©es Hook Functions Ă des instances spĂ©cifiques pendant lâexĂ©cution de WordPress.
GrĂące aux fonctions de hook, vous pouvez regrouper votre code personnalisĂ© dans une fonction de rappel et lâenregistrer avec nâimporte quel hook. Une fois enregistrĂ©, ce rappel sâexĂ©cutera oĂč que soit le hook, vous permettant dâaugmenter ou de remplacer les fonctions par dĂ©faut de WordPress.
La position du crochet dans le processus dâexĂ©cution du code est un facteur important. Vous en apprendrez davantage sur sa signification dans les sections Ă venir.Devenez accros au #webdev avec ce guide des hooks WordPress. âĄïžCLICK TO TWEET
Deux types de hooks WordPress : Actions et filtres
WordPress comprend deux types de crochets appelĂ©s Actions et Filtres. Les actions vous permettent de faire quelque chose Ă certains points prĂ©dĂ©finis du temps dâexĂ©cution de WordPress, tandis que les filtres vous permettent de modifier toute donnĂ©e traitĂ©e par WordPress et de la return
.
Les actions sont définies dans le code WordPress comme suit :
do_action( 'action_name', [optional_arguments] );
La chaĂźne action_name
est le nom de lâaction. Vous pouvez spĂ©cifier la variable [optional_arguments]
pour passer des arguments supplĂ©mentaires Ă la fonction de rappel. Si ce champ nâest pas spĂ©cifiĂ©, alors sa valeur par dĂ©faut sera vide.
Exemple : Lâaction do_action( 'wp_head' )
peut ĂȘtre accrochĂ©e pour exĂ©cuter un code personnalisĂ© chaque fois que WordPress traite lâen-tĂȘte du site. Cette action nâa pas dâautres arguments.
Les filtres sont définis comme suit dans le code WordPress
apply_filters( 'filter_name', 'value_to_be_filtered', [optional_arguments] );
La chaĂźne filter_name
est le nom du filtre, la variable value_to_be_filtered
est la valeur qui doit ĂȘtre filtrĂ©e et retournĂ©e, et la variable [optional_arguments]
peut passer des arguments supplémentaires, tout comme pour les actions.
Exemple : Le filtre apply_filters( 'admin_footer_text' , string $text )
peut ĂȘtre accrochĂ©e pour modifier le texte affichĂ© dans le pied de page de lâadministration. Depuis WordPress 5.4, sa valeur par dĂ©faut affichera la phrase Merci de faire de WordPress votre outil de crĂ©ation
dans le pied de page de la zone dâadministration.
Vous apprendrez plus tard Ă vous accrocher aux actions et aux filtres grĂące Ă de nombreux exemples tirĂ©s du cĆur de WordPress.
Une fois accrochĂ©, vous pouvez diriger votre code pour faire ou personnaliser quelque chose sur votre site. Par exemple, vous pouvez utiliser des hooks pour envoyer un e-mail automatisĂ© aprĂšs avoir publiĂ© un article, ou charger des feuilles de style personnalisĂ©es pour modifier lâapparence de votre site.
La façon la plus simple de comprendre les hook est dâimaginer votre site WordPress comme la construction dâune maison.
Les hooks sâapparentent Ă lâutilisation dâune grue pour dĂ©placer des Ă©lĂ©ments de construction dâun cĂŽtĂ© Ă lâautre. Les Ă©lĂ©ments transfĂ©rĂ©s sont les fonctions de rappel qui comprennent votre code personnalisĂ©. Ces Ă©lĂ©ments (ou fonctions) peuvent vous aider Ă construire ou Ă modifier la maison.
Les fonctions de rappel (callback) peuvent ĂȘtre des fonctions PHP normales, des fonctions WordPress par dĂ©faut ou des fonctions personnalisĂ©es dĂ©finies par vous.
Nous ne pouvons transporter certains articles que sur des supports spĂ©cifiques attachĂ©s Ă des hooks particuliers. Ainsi, les actions ne peuvent ĂȘtre accrochĂ©es quâavec des fonctions dâaction. De mĂȘme, les filtres ne peuvent ĂȘtre accrochĂ©s quâavec des fonctions de filtre.
Alors quâil est fastidieux de changer les hooks et les supports dâune grue, WordPress le rend super facile en incluant plus de 2 200 types de hooks par dĂ©faut.
Vous pouvez trouver des hooks rĂ©partis dans le cĆur de WordPress, vous permettant de taper Ă lâendroit exact oĂč vous voulez vous accrocher et dâexĂ©cuter votre code personnalisĂ©.Les hooks WordPress vous permettent de vous « accrocher » au processus de construction de page … et vous donnent plus de contrĂŽle sur ce que vous crĂ©ez. »âĄïžCLICK TO TWEET
Hooks vs Actions vs Filtres
Selon le manuel des extensions de WordPress :
« Les hooks sont un moyen pour un morceau de code dâinteragir / modifier un autre morceau de code⊠Il existe deux types de hooks : Actions et Filtres. »
Il y a une incohérence généralisée dans la façon dont les termes Hook, Action et Filtre sont utilisés. Quelques tutoriels et guides les confondent avec les fonctions qui leur sont associées. Cette confusion est due en grande partie à la nature complexe du fonctionnement des hooks.
MĂȘme si vous regardez attentivement dans le cĆur de WordPress, vous verrez quâil nây a pas beaucoup de diffĂ©rence entre lâajout dâactions et de filtres. Voici le code source de la fonction add_action() du fichier wp-includes/plugin.php
:
function add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {
return add_filter( $tag, $function_to_add, $priority, $accepted_args );
}
La fonction add_action()
appelle simplement la fonction add_filter()
et retourne sa valeur. Pourquoi ? Parce quâelles fonctionnent toutes deux fondamentalement de la mĂȘme maniĂšre, Ă une diffĂ©rence prĂšs.
La fonction apply_filters()
retourne une valeur qui peut modifier les types de données existants, tandis que la fonction do_action()
ne renvoie rien (valeur NULL en PHP).
Si vous ĂȘtes encore confus, ne vous inquiĂ©tez pas ! Une fois que vous aurez terminĂ© la premiĂšre moitiĂ© de cet article, tout sera clair. Nous nous en tiendrons Ă la terminologie officielle du Codex WordPress car elle est claire, prĂ©cise et universelle.
Pour lâinstant, familiarisez-vous avec la routine du hook prĂ©sentĂ©e ci-dessous.
Faisons la part des choses entre les actions et les hooks.
WordPress Hooks | |
Actions | Filters |
Les actions sont utilisĂ©es pour exĂ©cuter des fonctions personnalisĂ©es Ă un moment prĂ©cis de lâexĂ©cution du cĆur de WordPress. | Les filtres sont utilisĂ©s pour modifier ou personnaliser les donnĂ©es utilisĂ©es par dâautres fonctions. |
Les actions sont définies / créées par la fonction do_action( 'action_name' ) dans le code de WordPress. | Les filtres sont définis / créés par la fonction apply_filters( 'filter_name', 'value_to_be_filtered' ) dans le code de WordPress. |
Les actions sont également appelées Action hooks. | Les filtres sont également appelés Filter hooks. |
Les actions ne peuvent ĂȘtre connectĂ©es quâĂ des fonctions dâaction. Par exemple, add_action() , remove_action() . | Les filtres ne peuvent ĂȘtre accrochĂ©s quâavec des fonctions de filtre. Par exemple, add_filter() , remove_filter() . |
Les fonctions dâaction nâont pas besoin de faire passer dâarguments Ă leurs fonctions de rappel. | Les fonctions de filtre doivent transmettre au moins un argument Ă leurs fonctions de rappel. |
Les fonctions dâaction peuvent effectuer tout type de tĂąche, y compris modifier le comportement du fonctionnement de WordPress. | Les fonctions de filtre nâexistent que pour modifier les donnĂ©es qui leur sont transmises par les filtres. |
Les fonctions dâaction ne doivent rien return . Cependant, elles peuvent faire echo Ă la sortie ou interagir avec la base de donnĂ©es. | Les fonctions de filtrage doivent return leurs modifications en sortie. MĂȘme si une fonction de filtre ne change rien, elle doit toujours return lâentrĂ©e non modifiĂ©e. |
Les actions peuvent exĂ©cuter presque tout, tant que le code est valide. | Les filtres doivent fonctionner de maniĂšre isolĂ©e, afin de ne pas avoir dâeffets secondaires involontaires. |
RĂ©sumĂ© : une action interrompt le processus normal dâexĂ©cution du code pour faire quelque chose avec les informations quâelle reçoit, mais ne retourne rien en retour, puis sort. | RĂ©sumĂ© : un filtre modifie lâinformation quâil reçoit, la renvoie Ă la fonction dâappel, et dâautres fonctions peuvent utiliser la valeur quâil retourne. |
Parfois, vous pouvez utiliser une action ou un filtre pour atteindre le mĂȘme objectif. Par exemple, si vous souhaitez modifier le texte dâun article, vous pouvez enregistrer une fonction de rappel avec lâaction publish_post et modifier le contenu de lâarticle lors de son enregistrement dans la base de donnĂ©es.
// define the callback function to change the text
function change_text_callback() {
// add the code to change text here
}
// hook in to the 'publish_post' action with the add_action() function
add_action( 'publish_post', 'change_text_callback' );
Vous pouvez Ă©galement enregistrer une autre fonction de rappel avec le filtre the_content pour modifier le contenu de lâarticle avant quâil ne soit affichĂ© dans le navigateur.
// define the callback function to modify the text
function change_text_another_callback( $content ) {
// add the code to change text here and then return it
return $filtered_content;
}
// hook in to 'the_content' filter with the add_filter() function
add_filter( 'the_content', 'change_text_another_callback');
Deux approches diffĂ©rentes avec le mĂȘme rĂ©sultat. Savoir quand utiliser lâune plutĂŽt que lâautre est la clĂ© pour ĂȘtre un bon dĂ©veloppeur WordPress.
Comment fonctionnent les hooks WordPress ?
Lâexemple de la maison Ă©tait assez simple pour comprendre le fonctionnement de base des hooks, mais il ne rend pas compte de la complexitĂ© de leur fonctionnement. Il sâagit surtout des concepts de position et de spĂ©cificitĂ© des hooks.
Un meilleur exemple serait dâimaginer le traitement dâune page web WordPress comme lâassemblage dâune voiture. Contrairement Ă la fabrication dâune voiture, qui prend du temps, lâassemblage dâune page web est presque instantanĂ©.
Tout comme une voiture est assemblée piÚce par piÚce dans une chaßne de montage moderne, une page web WordPress est assemblée élément par élément par le serveur et le client.
Le cĆur de WordPress est comme le moteur de la voiture, le chĂąssis et dâautres Ă©lĂ©ments essentiels, qui alimentent la fonctionnalitĂ© du « cĆur » du site web.
Vous pouvez avoir un site web fonctionnel avec seulement le cĆur de WordPress, mais oĂč est le plaisir dans tout cela ? Vous devez ajouter des fonctionnalitĂ©s intĂ©ressantes au site. Câest lĂ quâinterviennent les extensions et les thĂšmes WordPress, qui font tous deux largement appel aux hooks.
Dans lâexemple ci-dessus, chaque station numĂ©rotĂ©e est comme un hook Ă lâintĂ©rieur du cĆur de WordPress. Il existe deux types de stations, comme les actions et les filtres. Chaque station comprend un type de crĂ©neau spĂ©cifique qui nâaccepte que certains outils, comme les fonctions dâaction et les fonctions de filtre.
Toutes les stations sont placĂ©es Ă intervalles frĂ©quents pour des raisons de modularitĂ© et dâefficacitĂ©.
Selon les exigences dâun poste particulier, nous pouvons attacher (ou accrocher) lâoutil le plus appropriĂ© pour le travail Ă ce poste spĂ©cifique. Ces outils sont comme les fonctions de rappel utilisĂ©es pour interagir avec ou modifier WordPress.
Certains outils peuvent modifier considĂ©rablement le fonctionnement de la voiture, un peu comme les rappels enregistrĂ©s pour les actions. Dâautres outils ne sont utilisĂ©s que pour personnaliser lâapparence de la voiture, comme les rappels enregistrĂ©s pour les filtres.
Il est essentiel dâutiliser les bons outils dans les bonnes stations pour construire une voiture de premier ordre. De la mĂȘme maniĂšre, les hooks nous aident Ă personnaliser WordPress en fonction de nos besoins particuliers.
Si vous Ă©tendez cette analogie, les extensions sont comme lâajout de fonctions automobiles utiles telles que les airbags, la console de divertissement, le systĂšme de tĂ©lĂ©commande sans clĂ©, etc. Les thĂšmes sont analogues Ă la personnalisation de la partie visuelle de la voiture, comme la conception gĂ©nĂ©rale, la peinture, les jantes, etc. (voici comment personnaliser votre thĂšme WordPress).
OĂč enregistrer les hooks et leurs fonctions ?
Il y a deux façons recommandĂ©es dâajouter des hooks dans WordPress :
- Extensions : Créez votre propre extension et ajoutez-y tout votre code personnalisé.
- ThĂšmes enfants : Enregistrez les fonctions de hook et de rappel dans le fichier
functions.php
de votre thĂšme enfant.
Pour ce tutoriel, commençons par créer une extension. Pour ce faire, créez un nouveau dossier dans votre répertoire /wp-content/plugins/
.
Je vais nommer mon extension salhooks
, mais vous pouvez lui donner le nom que vous voulez. ConformĂ©ment aux directives de WordPress, vous devez crĂ©er un fichier PHP portant le mĂȘme nom (salhooks.php
) dans le répertoire de votre extension.
Ajoutez les champs dâen-tĂȘte suivants dans le fichier de votre extension pour lâenregistrer avec WordPress. Vous pouvez en savoir plus sur les exigences relatives aux en-tĂȘtes dâextension dans le Codex de WordPress.
<?php
/*
Plugin Name: Salhooks
Version : 1.0
Description: Demonstrating WordPress Hooks (Actions and Filters) with multiple examples.
Author : Salman Ravoof
Author URI : https://www.salmanravoof.com/
License : GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: salhooks
*/
//=================================================
// Security: Abort if this file is called directly
//=================================================
if ( !defined('ABSPATH') ) {
die;
}
Enregistrez ce fichier, puis activez lâextension dans votre tableau de bord WordPress. Je vais utiliser cette extension dans une installation locale de WordPress pour dĂ©montrer comment fonctionnent les hooks.
Vous pouvez Ă©galement modifier directement les fichiers du cĆur de WordPress pour enregistrer les hooks. Cependant, ce nâest pas recommandĂ© car tout votre code personnalisĂ© sera Ă©crasĂ© chaque fois que vous mettrez Ă jour WordPress. Vous ne devriez pas ajouter de hooks dans votre thĂšme parent pour la mĂȘme raison.
Utilisation des hooks WordPress
Un hook WordPress ne fait rien en soi. Il se contente de rester dans le code, en attendant quâune fonction de hook lâactive. Pour utiliser un hook, vous devez appeler au moins 2 autres fonctions.
Tout dâabord, vous devez enregistrer le hook avec une fonction de hook et y faire rĂ©fĂ©rence Ă une fonction de rappel. Ensuite, vous devez dĂ©finir la fonction de rappel que vous avez mentionnĂ©e prĂ©cĂ©demment dans la fonction de hook. WordPress exĂ©cutera cette fonction de rappel Ă chaque fois que le hook est dĂ©clenchĂ©.
Lâordre dans lequel vous dĂ©finissez ces fonctions nâa pas dâimportance, mais il est bon de les placer Ă proximitĂ© les unes des autres.
Les actions et les filtres ont des fonctions dâaccrochage distinctes. DorĂ©navant, nous les appellerons fonctions dâaction et fonctions de filtre. Comme vous le verrez, elles ont leur propre syntaxe et leurs propres exigences en matiĂšre de paramĂštres.
- Accrocher une action
- Accrocher un filtre
- Personnaliser la page de connexion WordPress avec des hooks
Accrocher une action
Les actions permettent dâexĂ©cuter votre code personnalisĂ© Ă un moment particulier de lâexĂ©cution du cĆur, des extensions ou des thĂšmes WordPress.
La fonction dâaction add_action()
Vous pouvez enregistrer une fonction de rappel avec une action en suivant ces Ă©tapes :
- DĂ©finissez une fonction de rappel avec votre code personnalisĂ© Ă lâintĂ©rieur. Cette fonction de rappel sera exĂ©cutĂ©e lorsque toute action Ă laquelle elle est enregistrĂ©e est dĂ©clenchĂ©e pendant lâexĂ©cution du code de WordPress.
- Accrochez votre fonction de rappel Ă lâaction que vous voulez avec la fonctionÂ
add_action()
. Comme le prĂ©voit le Codex WordPress, la fonction add_action() doit passer au moins deux paramĂštres :- Nom de lâaction Ă laquelle sâaccrocher.
- Nom de la fonction de rappel qui sera exĂ©cutĂ©e lorsque lâaction est dĂ©clenchĂ©e.
- La fonction
add_action()
accepte Ă©galement deux paramĂštres optionnels pour fixer lapriority
et lenumber of arguments
. Nous discuterons de ces deux paramĂštres plus tard.
Il est bon de nommer vos paramÚtres de fonction de rappel aussi prÚs que possible des paramÚtres passés par la fonction du hook.
Voyons un exemple dâutilisation de la fonction add_action()
.
// define the callback function, the arguments are optional
function example_callback( $arg1, $arg2 ) {
// make your code do something with the arguments
}
// hook the callback function to the 'example_action'
add_action( 'example_action', 'example_callback', [priority], [no_of_args] );
// 'priority' and 'number of arguments' are optional parameters
Exemple dâaccrochage dâune action
WordPress comprend une action intĂ©grĂ©e appelĂ©e init qui se dĂ©clenche aprĂšs que WordPress a fini de charger et dâauthentifier lâutilisateur, mais avant que les en-tĂȘtes ne soient envoyĂ©s. De nombreuses extensions utilisent ce hook comme point de dĂ©part pour instancier leur code car presque toutes les principales fonctionnalitĂ©s de WordPress ont fini de se charger au moment oĂč WordPress exĂ©cute cette action.
WordPress a une action similaire appelĂ©e admin_init. Elle se dĂ©clenche pendant que lâĂ©cran dâadministration est en cours dâinitialisation, tandis que lâaction init
ne se dĂ©clenche quâune fois que WordPress a fini de se charger.
Lançons un code personnalisé pour faire echo
Ă un simple message pendant lâexĂ©cution dâune action init
. Voici comment faire :
function custom_callback_function(){
// add your custom code here to do something
echo 'I will be fired on WordPress initialization';
}
add_action( 'init', 'custom_callback_function' );
Vous pouvez voir lâĂ©cho du message dans le coin supĂ©rieur gauche de mon installation WordPress locale.
Trouver des actions prises en charge par WordPress
WordPress inclut des actions Ă chaque fois quâil fait quelque chose, comme un utilisateur qui se connecte ou qui publie un nouvel article. Vous pouvez trouver une liste complĂšte de toutes les actions exĂ©cutĂ©es par WordPress sur la page Plugin API/Action Reference.
Le Codex a divisĂ© toutes les actions qui y sont Ă©numĂ©rĂ©es en diffĂ©rentes catĂ©gories et les a classĂ©es de la premiĂšre Ă la derniĂšre dans lâordre dâexĂ©cution de WordPress.
Dans la plupart des cas, beaucoup de ces actions ne feront rien car rien nây est accrochĂ©. Mais si vous en avez besoin, elles sont lĂ pour que vous vous y accrochiez.
Vous vous sentez un peu dĂ©passĂ© par toutes ces actions ? Câest naturel. Au fur et Ă mesure que vous gagnerez en expĂ©rience et que vous parcourrez le code source du cĆur de WordPress, il vous sera plus facile de trouver le hook parfait pour vos besoins. Il vous suffit de faire une recherche sur le terme « do_action » et vous trouverez de nombreuses actions auxquelles vous pourrez vous accrocher.
ParamÚtres supplémentaires pour add_action()
La fonction add_action()
peut accepter deux autres paramĂštres : lâun pour fixer la priority
et lâautre pour fixer le number of arguments
. Bien quâils soient optionnels, sâils sont utilisĂ©s correctement, ils peuvent ĂȘtre trĂšs utiles.
Priority
Le premier paramÚtre supplémentaire pris en charge par la fonction add_action()
fixe la priority
. Ce paramĂštre ne peut ĂȘtre quâun entier positif. Plus le numĂ©ro de prioritĂ© est bas, plus la fonction sera exĂ©cutĂ©e tĂŽt. Sa valeur par dĂ©faut est 10 si vous ne le spĂ©cifiez pas.
Pour voir comment cela fonctionne, enregistrons trois fonctions de rappel Ă lâaction init
, mais chacune avec des priorités différentes.
// priority is set to 9, which is lower than 10, hence it ranks higher
add_action( 'init', 'i_am_high_priority', 9 );
// if no priority is set, the default value of 10 will be used
add_action( 'init', 'i_am_default_priority');
// priority is set to 11, which is higher than 11, hence it ranks lower
add_action( 'init', 'i_am_low_priority', 11 );
Dans les exemples ci-dessus, la fonction de rappel ayant le numĂ©ro de prioritĂ© le plus bas sera exĂ©cutĂ©e en premier et celle ayant le numĂ©ro le plus Ă©levĂ© sera exĂ©cutĂ©e en dernier. Si leurs prioritĂ©s sont les mĂȘmes, elles seront exĂ©cutĂ©es dans lâordre dans lequel vous les avez enregistrĂ©es.
La prioritĂ© joue un rĂŽle important lorsquâun mĂȘme hook peut avoir plusieurs fonctions de rappel enregistrĂ©es avec lui. Pour Ă©viter les rĂ©sultats inattendus, vous pouvez dĂ©finir une prioritĂ© pour chaque fonction de rappel, afin quâelles se dĂ©clenchent dans lâordre que vous souhaitez.
Number of arguments
Par défaut, toute fonction de rappel enregistrée par la fonction add_action()
ne recevra quâun seul argument. Cependant, il peut arriver que vous deviez transmettre des donnĂ©es supplĂ©mentaires Ă la fonction de rappel.
Câest pourquoi la fonction add_action()
accepte un paramĂštre optionnel pour fixer le nombre dâarguments.
Lâaction comment_postt en est un bon exemple. Cette action sâexĂ©cute immĂ©diatement aprĂšs que WordPress a ajoutĂ© un commentaire Ă la base de donnĂ©es. Si vous ne dĂ©finissez pas le paramĂštre du number of arguments
, il ne transmettra quâune seule valeur Ă la fonction de rappel, qui dans ce cas sera comment_ID
.
// register the hook with 'priority' and 'number of arguments' parameters
add_action( 'comment_post', 'show_message_function', 10, 3 );
// define the callback function
function show_message_function( $comment_ID, $comment_approved, $commentdata ) {
// check whether a comment is approved with the second parameter
if( 1 === $comment_approved ){
// runs the code only if the comment is approved
}
}
Si vous fixez le paramĂštre number of arguments Ă 3 comme dans lâexemple ci-dessus, la fonction dâaction passera trois valeurs : comment_ID
, comment_approved
, et commentdata
.
WordPress définit la valeur de comment_approved
à 1 pour les commentaires approuvés, à 0 si non approuvés, et à « spam » si le commentaire est marqué comme indésirable.
La variable commentdata
est un tableau qui comprend toutes les donnĂ©es du commentaire, comme le nom de lâauteur du commentaire, son adresse de messagerie, son site web et le contenu du commentaire lui-mĂȘme. Vous pouvez consulter le Codex WordPress pour trouver toutes les paires de valeurs clĂ©s incluses dans le tableau « commentdata ».
Vous pouvez avoir autant dâarguments que vous le souhaitez, mais la fonction de rappel et la fonction add_action()
doivent spĂ©cifier le mĂȘme nombre dâarguments.
En passant des paramĂštres supplĂ©mentaires Ă la fonction de rappel, vous pouvez faire plus avec votre code. Par exemple, vous pouvez vĂ©rifier si un commentaire est approuvĂ© ou non et envoyer automatiquement le texte du commentaire Ă lâadministrateur sâil est approuvĂ©. Il nâest pas possible de faire cela sans spĂ©cifier les arguments supplĂ©mentaires car votre fonction de rappel nâaura pas accĂšs aux donnĂ©es de comment_content
.
Si vous ne voulez pas fixer la prioritĂ©, mais seulement changer le nombre dâarguments, vous devez quand mĂȘme fixer une prioritĂ©. Il suffit dâutiliser sa valeur par dĂ©faut (câest-Ă -dire 10).
Comment le cĆur de WordPress utilise les actions
Le cĆur de WordPress lui-mĂȘme utilise un grand nombre de ses actions intĂ©grĂ©es pour exĂ©cuter diverses fonctions.
Prenez lâaction wp_head par exemple. Elle est dĂ©clenchĂ©e lorsque WordPress affiche la section dâen-tĂȘte des pages web (le code qui va de <head>
Ă </head>
).
Vous pouvez trouver la plupart des fonctions dâaction du cĆur de WordPress Core liĂ©es au hook wp_head
dans le fichier wp-includes/default-filters.php
. Jâai parcouru le code et compilĂ© une liste de toutes les fonctions add_action()
qui invoquent lâaction wp_head
.
add_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 );
add_action( 'wp_head', '_wp_render_title_tag', 1 );
add_action( 'wp_head', 'wp_enqueue_scripts', 1 );
add_action( 'wp_head', 'wp_resource_hints', 2 );
add_action( 'wp_head', 'feed_links', 2 );
add_action( 'wp_head', 'feed_links_extra', 3 );
add_action( 'wp_head', 'rsd_link' );
add_action( 'wp_head', 'wlwmanifest_link' );
add_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );
add_action( 'wp_head', 'locale_stylesheet' );
add_action( 'wp_head', 'noindex', 1 );
add_action( 'wp_head', 'print_emoji_detection_script', 7 );
add_action( 'wp_head', 'wp_print_styles', 8 );
add_action( 'wp_head', 'wp_print_head_scripts', 9 );
add_action( 'wp_head', 'wp_generator' );
add_action( 'wp_head', 'rel_canonical' );
add_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );
add_action( 'wp_head', 'wp_custom_css_cb', 101 );
add_action( 'wp_head', 'wp_site_icon', 99 );
add_action( 'wp_head', 'wp_no_robots' );
Cela fait beaucoup de fonctions de rappel accrochées à une seule action. Il est essentiel de fixer la priority
pour sâassurer que les fonctions de rappel les plus importantes se lancent en premier.
Dans lâexemple ci-dessus, le chargement des scripts avec la fonction de rappel wp_enqueue_scripts()
est plus important (priority = 1) que le chargement des balises mĂ©ta de lâicĂŽne du site avec la fonction de rappel wp_site_icon()
(priority = 99).
Info
Toutes les fonctions de rappel utilisĂ©es dans lâexemple ci-dessus sont des fonctions de WordPress. Vous pouvez Ă©galement les utiliser dans nâimporte quel code. Visitez la page de rĂ©fĂ©rence des fonctions sur le Codex WordPress pour plus dâinformations.
Autres fonctions dâaction
Bien que add_action()
soit la fonction dâaction la plus utilisĂ©e, il en existe beaucoup dâautres qui sont tout aussi utiles. Voyons comment elles fonctionnent toutes.
Cette fonction dâaction vĂ©rifie si une action a Ă©tĂ© accrochĂ©e. Elle accepte deux paramĂštres. Le premier est le nom de lâaction. Le second paramĂštre est facultatif et est le nom de la fonction de rappel.
has_action( 'action_name', 'function_to_check' );
Si vous ne spécifiez que le premier paramÚtre, cela renvoie true
si une fonction est accrochée au paramÚtre action_name
.
Mais si vous spécifiez également le second paramÚtre, cela retournera false
si la fonction de rappel spĂ©cifiĂ©e nâest pas enregistrĂ©e pour lâaction mentionnĂ©e.
Sâil trouve la fonction de rappel attachĂ©e Ă lâaction du hook, cela renvoie la priority
(un entier) fixée pour cette fonction sur cette action de hook.
Nous avons dĂ©jĂ rencontrĂ© cette fonction dâaction. WordPress lâutilise pour dĂ©finir toutes ses actions par dĂ©faut, ce qui permet Ă dâautres fonctions de sây raccrocher. Tout comme WordPress, vous pouvez Ă©galement utiliser la fonction do_action()
pour crĂ©er une nouvelle action personnalisĂ©e en spĂ©cifiant un nouveau nom dâaction comme paramĂštre.
do_action( 'action_name', [argument1], [argument2] );
Le simple fait de dĂ©clarer cette fonction ne fera rien en soi. Mais elle restera dans le code, en attendant que dâautres fonctions dâaction lâactivent. La transmission dâarguments supplĂ©mentaires est facultative, mais elle est importante si vous voulez que vos fonctions de rappel les utilisent.
Cette fonction dâaction est identique Ă do_action()
, Ă une diffĂ©rence prĂšs. Tout argument qui lui est passĂ© doit ĂȘtre un tableau. Lorsque vous avez beaucoup dâarguments Ă passer ou que vos arguments sont dĂ©jĂ dans un tableau, cette fonction est trĂšs utile.
// here's an example array
$arguments_array = array( 'arg_1', 'foo', true, 'arg_4' );
do_action_ref_array( 'example_action', $arguments_array );
Comme les tableaux PHP sont une carte ordonnée, assurez-vous que les arguments que vous passez sont dans le bon ordre.
Lâaction admin_bar_menu est un exemple de lâutilisation de cette fonction dâaction. Elle peut ĂȘtre accrochĂ©e pour ajouter, manipuler ou supprimer les diffĂ©rents Ă©lĂ©ments de la barre dâadministration. Tous les Ă©lĂ©ments de la barre dâadministration sont dĂ©finis comme des Ă©lĂ©ments dâun tableau.
Si vous voulez compter le nombre de fois quâune action est dĂ©clenchĂ©e, vous pouvez invoquer cette fonction dâaction.
did_action( 'action_name' );
Cette fonction retourne une valeur entiĂšre.
La fonction did_action()
est extrĂȘmement pratique lorsque vous souhaitez exĂ©cuter une fonction de rappel uniquement la premiĂšre fois quâune action est exĂ©cutĂ©e et jamais plus ensuite.
function example_callback_function() {
if( did_action( 'example_action' ) === 1 ) {
// checks if the 'example_action' hook is fired once, and only runs then, and never again!
}
}
add_action('example_action', 'example_callback_function');
Cette fonction dâaction supprime une fonction de rappel liĂ©e Ă lâaction spĂ©cifiĂ©e. Par exemple, vous pouvez utiliser cette fonction pour supprimer les fonctions de WordPress par dĂ©faut accrochĂ©es aux actions intĂ©grĂ©es et les remplacer par les vĂŽtres.
remove_action( 'action_name', 'function_to_be_removed', [priority] );
Il y a quelques conditions prĂ©alables Ă lâappel de la fonction remove_action()
:
- Les paramĂštres
function_to_be_removed
etpriority
doivent ĂȘtre les mĂȘmes que ceux utilisĂ©s Ă lâorigine dans la fonctionadd_action()
. - Vous ne pouvez pas appeler la fonction
remove_action()
directement. Vous devez lâappeler depuis une autre fonction. - Si la fonction de rappel est enregistrĂ©e depuis une classe, sa suppression a dâautres exigences. Vous pouvez consulter la documentation du Codex WordPress pour plus de dĂ©tails.
- Vous ne pouvez pas supprimer la fonction de rappel avant quâelle ne soit enregistrĂ©e ou aprĂšs quâelle ait Ă©tĂ© exĂ©cutĂ©e.
Voici un exemple de la façon dont WooCommerce utilise cette fonction dâaction pour supprimer la miniature par dĂ©faut du produit sur la page principale de la boutique.
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
Cette fonction dâaction supprime tout ce qui est liĂ© Ă une action. Le paramĂštre de prioritĂ© est facultatif.
remove_all_actions( 'action_name', [priority] );
Nâoubliez pas que cette fonction ne peut pas ĂȘtre appelĂ©e Ă partir de lâaction dont vous souhaitez annuler les fonctions de rappel. Cela provoquerait une boucle infinie. Vous pouvez vous connecter Ă une action qui a Ă©tĂ© lancĂ©e plus tĂŽt pour exĂ©cuter cette fonction sans aucune erreur.
Cette fonction dâaction vĂ©rifie si lâaction spĂ©cifiĂ©e est en cours dâexĂ©cution ou non. Elle renvoie une valeur boolĂ©enne (true
ou false
).
// check whether the 'action_name' action is being executed
if ( doing_action( 'action_name' ) ) {
// execute your code here
}
Vous pouvez laisser le paramĂštre action_name
vide pour vĂ©rifier si une action est en cours dâexĂ©cution. Cela retournera true
Ă chaque fois quâune action est exĂ©cutĂ©e.
// check if any action is running and do something
if ( doing_action() ) {
// the code here is run when any action is fired
}
Exemple dâactions 1 : Afficher un message de maintenance aux visiteurs de votre site
Parfois, il est préférable de mettre votre site hors ligne et de créer une page de maintenance. Heureusement, WordPress offre un moyen facile de le faire.
// show a maintenance message for all your site visitors
add_action( 'get_header', 'maintenance_message' );
function maintenance_message() {
if (current_user_can( 'edit_posts' )) return;
wp_die( '<h1>Stay Pawsitive!</h1><br>Sorry, we\'re temporarily down for maintenance right meow.' );
}
DĂ©composons le code et passons en revue chaque Ă©tape :
- get_header est une action qui se dĂ©clenche avant le chargement du fichier de modĂšle dâen-tĂȘte du site. Câest une action parfaite Ă laquelle se raccorder si vous voulez interrompre le chargement du site principal.
- Accrochez-vous Ă lâaction
get_header
en utilisant la fonctionadd_action()
avec la fonction de rappelmaintenance_message()
. - DĂ©finissez la fonction de rappel
maintenance_message()
. current_user_can( 'edit_posts' )
est une fonction de test de capacitĂ© de lâutilisateur qui vĂ©rifie si lâutilisateur actuel est connectĂ© et peut modifier des articles. Chaque utilisateur enregistrĂ© sur un site WordPress, Ă lâexception de ceux qui ont un rĂŽle dâabonnĂ©, a la possibilitĂ© de modifier des articles. Il existe dâautres moyens robustes dâeffectuer ce contrĂŽle, mais nous nous en tiendrons Ă cette mĂ©thode simple ici.- Utilisez la fonction par dĂ©faut wp_die() pour stopper lâexĂ©cution de WordPress avec grĂące et afficher une page HTML avec un message dâerreur. Vous pouvez utiliser la syntaxe HTML dans le paramĂštre du message dâerreur pour le formater.
AprĂšs avoir enregistrĂ© le code dans mon extension personnalisĂ©e, jâai chargĂ© mon installation locale de WordPress en mode de navigation privĂ©e. La page « En maintenance » est un succĂšs !
Le site se charge correctement si je suis connectĂ© car il passe le test de capacitĂ© de lâutilisateur. Vous pouvez maintenant continuer Ă travailler Ă la rĂ©paration de votre site pendant quâil affiche cette page pour les visiteurs normaux.
Exemple dâactions 2 : Masquer les Ă©lĂ©ments de menu du tableau de bord aux utilisateurs non administrateurs
Si vous gĂ©rez un blog avec plusieurs auteurs ou un site pour vos clients, vous devrez peut-ĂȘtre masquer certains menus dâadministration du tableau de bord de WordPress pour les utilisateurs non administrateurs. Vous pouvez le faire en vous accrochant Ă lâaction admin_menu
.
// remove specific dashboard menus for non-admin users
add_action( 'admin_menu', 'hide_admin_menus' );
function hide_admin_menus() {
if (current_user_can( 'create_users' )) return;
if (wp_get_current_user()->display_name == "Salman") return;
remove_menu_page( 'plugins.php' );
remove_menu_page( 'themes.php' );
remove_menu_page( 'tools.php' );
remove_menu_page( 'users.php' );
remove_menu_page( 'edit.php?post_type=page' );
remove_menu_page( 'options-general.php' );
}
Voici un aperçu Ă©tape par Ă©tape de lâextrait de code ci-dessus :
- admin_menu est une action qui se dĂ©clenche avant le chargement du menu dâadministration dans la zone du tableau de bord de WordPress.
- Accrochez-vous Ă lâaction
admin_menu
Ă lâaide de la fonctionadd_action()
en utilisant la fonction de rappelhide_admin_menus()
. - La fonction de rappel
hide_admin_menus()
dĂ©finit la logique du code. Elle est exĂ©cutĂ©e Ă chaque fois que se dĂ©clenche lâactionadmin_menu
. - Dans la fonction de rappel, la fonction
current_user_can( 'create_users' )
vĂ©rifie si lâutilisateur connectĂ© est un administrateur. Ătant donnĂ© que seuls les administrateurs de site ont la capacitĂ©create_user
, la fonction se termine par une déclarationreturn
si lâutilisateur est un administrateur. - La fonction WordPress wp_get_current_user() rĂ©cupĂšre lâobjet current user. Avec cette fonction, nous pouvons vĂ©rifier si lâutilisateur connectĂ© a un
display_name
particulier. Cette ligne est facultative, au cas oĂč vous souhaiteriez Ă©viter que certains utilisateurs non administrateurs soient bloquĂ©s en raison de cette fonction de rappel. - La fonction remove_menu_page() de WordPress supprime les menus dâadministration de haut niveau. Dans lâexemple de code ci-dessus, je supprime les menus dâadministration suivants : Extensions, ThĂšmes, Outils, Utilisateurs, Pages et Options.
AprĂšs avoir enregistrĂ© le fichier de lâextension, voici un aperçu du tableau de bord de WordPress avec un administrateur connectĂ©.
Et voici une capture dâĂ©cran du tableau de bord de WordPress avec un utilisateur non administrateur connectĂ©.
Cette solution ne fait que masquer les Ă©lĂ©ments du menu dâadministration spĂ©cifiĂ©s pour quâils nâapparaissent pas dans le tableau de bord de WordPress. Tous les utilisateurs peuvent toujours y accĂ©der en saisissant les URL des menus dans leur navigateur.
Pour dĂ©sactiver lâaccĂšs de certains rĂŽles dâutilisateur Ă des menus spĂ©cifiques, vous devez modifier leurs capacitĂ©s.
Accrocher un filtre
Les filtres permettent Ă votre code personnalisĂ© de modifier les donnĂ©es utilisĂ©es par dâautres fonctions de WordPress. Contrairement aux actions, les fonctions liĂ©es aux filtres doivent retourner une valeur.
La fonction de filtre add_filter()
Vous pouvez accrocher une fonction de rappel Ă un filtre en suivant les Ă©tapes suivantes :
- Définissez une fonction de rappel qui sera exécutée lorsque WordPress lancera le filtre. Les fonctions de rappel pour les filtres doivent avoir au moins un argument spécifié, car tous les filtres transmettent au moins une valeur à leurs fonctions de rappel.
- Enregistrez la fonction de rappel Ă un filtre avec la fonctionÂ
add_filter()
. Le filtre se chargera dâappeler la fonction de rappel. Selon le Codex WordPress, la fonction add_filter() doit passer au moins deux paramĂštres :- Le nom du filtre auquel sâaccrocher.
- Le nom de la fonction de rappel qui sera exécutée lorsque le filtre se déclenchera.
- La fonction
add_filter()
accepte également deux paramÚtres optionnels supplémentaires pour fixer lapriority
et lenumber of arguments
. Ces paramĂštres fonctionnent de la mĂȘme maniĂšre que la fonctionadd_action()
.
Voici un exemple de la façon dont vous pouvez utiliser la fonction add_filter()
pour accrocher une fonction de rappel Ă un filtre.
// define the filter callback function with at least one argument passed
// the number of arguments that you can pass depends on how the filter is defined
function filter_callback_function( $arg1, $arg2 ) {
// make your code do something with the arguments and return something
return $something;
}
// now hook the callback function to the 'example_filter'
add_filter( 'example_filter', 'filter_callback_function', [priority], [no_of_args] );
// '10' is the default priority set for the callback function
// and '1' is the default number of arguments passed
Exemple dâaccrochage dâun filtre
WordPress fournit un filtre appelé login_message pour filtrer le message affiché sur la page de connexion au-dessus du formulaire de connexion. La valeur renvoyée par ce filtre peut avoir un balisage HTML.
Accrochez-vous au filtre « login_message
» et modifiez le message affichĂ© sur lâĂ©cran de connexion.
// show a custom login message above the login form
function custom_login_message( $message ) {
if ( empty( $message ) ) {
return "<h2>Welcome to Let's Develop by Salman Ravoof! Please log in to start learning.</h2>";
}
else {
return $message;
}
}
add_filter( 'login_message', 'custom_login_message' );
La déclaration if-else
de la fonction de rappel vĂ©rifie si le message de connexion est dĂ©jĂ dĂ©fini, le plus souvent par une autre extension ou un autre thĂšme. Dans ce cas, la fonction de rappel renvoie la valeur originale sans la modifier. Câest une façon dâĂ©viter les conflits avec dâautres extensions ou thĂšmes.
Vous pouvez voir le message sâafficher au-dessus du formulaire de connexion dans la page de connexion de WordPress.
Vous pouvez styliser tous les éléments de la page de connexion en appelant des feuilles de style personnalisées. Cela vous permettra de personnaliser entiÚrement votre page de connexion WordPress par défaut.
Vous apprendrez comment charger des feuilles de style personnalisĂ©es Ă lâaide dâactions dans la section « Personnaliser la page de connexion Ă WordPress avec des hooks ».
Trouver les filtres pris en charge par WordPress
Partout oĂč WordPress traite ou modifie des donnĂ©es, vous pouvez presque certainement trouver un filtre auquel vous accrocher et le modifier. ConsidĂ©rez les filtres comme une interface entre la base de donnĂ©es WordPress et le navigateur.
Vous pouvez trouver une liste exhaustive de tous les filtres supportés par WordPress dans la page Plugin API/Filter Reference.
Tous les filtres qui y sont listĂ©s sont divisĂ©s en plusieurs catĂ©gories et classĂ©s de haut en bas dans lâordre dâexĂ©cution de WordPress.
Si vous souhaitez trouver des filtres à intégrer dans le code source de WordPress, faites une recherche avec le terme « apply_filters » et vous obtiendrez des tonnes de résultats. La référence du code WordPress est également un excellent endroit pour rechercher tout ce qui est inclus dans WordPress, y compris les actions et les filtres.
Comment le cĆur de WordPress utilise les filtres
Le cĆur de WordPress lui-mĂȘme utilise beaucoup de ses filtres intĂ©grĂ©s pour modifier les donnĂ©es utilisĂ©es par ses diffĂ©rentes fonctions.
Prenons par exemple le filtre the_content. Il filtre le contenu des articles aprĂšs quâil ait Ă©tĂ© extrait de la base de donnĂ©es et avant quâil ne soit affichĂ© sur le navigateur.
Tout comme pour les actions, vous pouvez trouver la plupart des fonctions de filtrage de WordPress Core liées au hook the_content
dans le fichier wp-includes/default-filters.php
.
Voici une liste de toutes les fonctions add_filter()
du cĆur base qui sâaccrochent au filtre the_content
:
add_filter( 'the_content', 'do_blocks', 9 );
add_filter( 'the_content', 'wptexturize' );
add_filter( 'the_content', 'convert_smilies', 20 );
add_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'shortcode_unautop' );
add_filter( 'the_content', 'prepend_attachment' );
add_filter( 'the_content', 'wp_make_content_images_responsive' );
add_filter( 'the_content', 'do_shortcode', 11 ); // AFTER wpautop().
Notez la priorité spécifiée pour certaines fonctions de rappel.
Par exemple, la fonction do_blocks() analyse tous les blocs dynamiques du contenu de lâarticle et les rend compatibles avec le nouvel Ă©diteur de blocs de WordPress. Elle a une prioritĂ© plus Ă©levĂ©e que la valeur par dĂ©faut (10) afin de sâassurer que le contenu est prĂȘt Ă recevoir des blocs avant que les autres fonctions ne soient exĂ©cutĂ©es.
La fonction convert_smilies() est configurĂ©e pour fonctionner avec une prioritĂ© infĂ©rieure, car sa tĂąche consiste Ă convertir les smileys de texte en sprites dâimage. Il est logique de lâexĂ©cuter Ă la fin aprĂšs avoir filtrĂ© tout le contenu de lâarticle.
Fait amusant : les codes courts sont un sous-ensemble de filtres. Ils reçoivent les donnĂ©es dâentrĂ©e du code court, les traitent, puis lui renvoient les donnĂ©es de sortie. Pour en savoir plus sur les codes courts, consultez ce guide des codes courts WordPress.
Autres fonctions de filtre
Bien que add_filter()
soit la fonction de filtre la plus utilisée, il existe de nombreuses autres fonctions de filtre utiles. Examinons-les toutes en détail.
Cette fonction vérifie si le filtre spécifié est accroché par une fonction quelconque. Elle accepte deux paramÚtres. Le premier paramÚtre sert à saisir le nom du filtre. Le second paramÚtre est facultatif et sert à saisir le nom de la fonction de rappel.
has_filter( 'filter_name', 'function_to_check' );
Si vous ne spécifiez que le premier paramÚtre, il retournera true
si le filter_name
est accroché par une fonction quelconque.
Cependant, si vous spécifiez les deux paramÚtres, il retournera false
si la fonction de rappel mentionnĂ©e nâest pas enregistrĂ©e avec le filtre donnĂ©. Sâil trouve la fonction de rappel enregistrĂ©e avec le filtre, il renvoie alors la priority
(un entier) définie pour cette fonction sur ce filtre.
Une application possible de la fonction has_filter()
est de vĂ©rifier si un filtre a dĂ©jĂ Ă©tĂ© accrochĂ© et, sur cette base, de procĂ©der Ă lâexĂ©cution du code.
// check to see if 'the_content' filter has been hooked
if ( ! has_filter( 'the_content' ) {
// hook the filter if and only if it hasn't been hooked before
add_filter( 'the_content', 'modify_the_content' );
}
Cette fonction de filtre est comme la fonction dâaction do_action()
. Toute fonction de rappel liĂ©e Ă ce filtre sera exĂ©cutĂ©e lĂ oĂč cette fonction se trouve dans le code WordPress.
Vous pouvez également utiliser cette fonction pour créer un nouveau filtre personnalisé en spécifiant le nom du filtre et la valeur du filtre comme paramÚtres.
apply_filters( 'filter_name', 'value_to_filter', [argument1], [argument2] );
Nâoubliez pas de prĂ©ciser les arguments supplĂ©mentaires si vous souhaitez les transmettre Ă vos fonctions de rappel. La plupart des filtres nâutilisent quâun seul argument, il est donc facile de ne pas dĂ©finir les arguments supplĂ©mentaires.
Cette fonction est semblable Ă la fonction apply_filters()
, sauf que tous les arguments quâelle accepte sont regroupĂ©s dans un tableau.
// an example array
$arguments_array = array( 'some_value', 'foo', false, 'another_value' );
apply_filters_ref_array( 'example_filter', $arguments_array );
Cette fonction de filtre peut ĂȘtre pratique lorsque vous avez de nombreux arguments Ă faire valoir ou si tous sont dĂ©jĂ dans un tableau. Assurez-vous que les arguments Ă lâintĂ©rieur du tableau sont dans le bon ordre.
Cette fonction de filtre rĂ©cupĂšre le nom du filtre ou de lâaction en cours dâexĂ©cution. Vous nâavez pas besoin de spĂ©cifier de paramĂštres car elle sâexĂ©cute dans le cadre de la fonction de rappel.
Voici un exemple de son utilisation :
function example_callback() {
echo current_filter(); // 'the_title' will be echoed
return
}
add_filter( 'the_title', 'example_callback' );
Malgré son nom, cette fonction peut récupérer le nom des actions et des filtres.
Cette fonction de filtre supprime la fonction de rappel attachée au filtre spécifié. Elle fonctionne exactement comme la fonction remove_action()
. Vous pouvez lâutiliser pour supprimer les fonctions WordPress par dĂ©faut enregistrĂ©es avec un filtre spĂ©cifique, et si nĂ©cessaire les remplacer par vos propres fonctions.
remove_filter( 'filter_name', 'function_to_be_removed', [priority] );
Pour libérer une fonction de rappel accrochée à un filtre, les paramÚtres function_to_be_removed
et priority
doivent ĂȘtre identiques aux arguments utilisĂ©s lors de lâaccrochage de la fonction de rappel.
Si le filtre a Ă©tĂ© ajoutĂ© Ă partir dâune classe, ce qui est gĂ©nĂ©ralement le cas lorsquâils sont ajoutĂ©s par des extensions, vous devez alors accĂ©der Ă la variable de classe pour supprimer le filtre.
// access the class variable first, and then remove the filter through it
global $some_class;
remove_filter( 'the_content', array($some_class, 'class_filter_callback') );
Voici un excellent exemple dâutilisation de remove_filter()
.
Lâextension WooCommerce utilise la fonction dâappel wc_lostpassword_url() reliĂ©e Ă son filtre lostpassword_url pour rediriger « Mot de passe perdu ? » des utilisateurs.
Tout utilisateur qui clique sur ce lien est dirigĂ© vers une page personnalisĂ©e avec lâURL /my-account/lost-password
. Sans ce filtre, ils seraient dirigĂ©s vers lâURL de connexion standard de WordPress, Ă lâadresse /wp-login.php
.
Si vous voulez réinitialiser cette fonctionnalité et envoyer vos utilisateurs à la page de récupération de mot de passe par défaut ou à une page séparée. Vous pouvez supprimer cette fonction de rappel comme ceci :
remove_filter( 'lostpassword_url', 'wc_lostpassword_url', 10 );
Cette fonction de filtre supprime toutes les fonctions de rappel enregistrées sur un filtre.
remove_all_filters( 'filter_name', [priority] );
Elle est similaire Ă la fonction remove_all_actions()
.
Lâextension populaire Advanced Excerpts utilise cette fonction pour supprimer toutes les fonctions par dĂ©faut liĂ©es aux filtres the_excerpt
et get_the_excerpt
. AprĂšs avoir fait cela, elle accroche ensuite sa propre fonction de rappel au filtre.
// Ensure our filter is hooked, regardless of the page type
if ( ! has_filter( 'get_the_excerpt', array( $advanced_excerpt, 'filter_excerpt' ) ) ) {
remove_all_filters( 'get_the_excerpt' );
remove_all_filters( 'the_excerpt' );
add_filter( 'get_the_excerpt', array( $advanced_excerpt, 'filter_excerpt' ) );
}
Cette fonction de filtre vĂ©rifie si le filtre spĂ©cifiĂ© est en cours dâexĂ©cution Ă ce moment.
if ( doing_filter( 'save_post' ) ) {
// run your code here
}
Cela retourne une valeur booléenne (true
ou false
).
Vous devez noter la différence entre cette fonction et la fonction current_filter()
, qui renvoie le nom du filtre ou de lâaction en cours dâexĂ©cution (une chaĂźne de caractĂšres).
Exemple de filtres 1 : ajout dâun filtre de blasphĂšmes pour les commentaires
La gestion de tous les commentaires sur votre site WordPress peut ĂȘtre un processus lourd. Le filtre comment_text vous permet de dĂ©finir des rĂšgles pour modifier les commentaires avant quâils ne soient affichĂ©s Ă lâĂ©cran.
Vous pouvez demander Ă WordPress de supprimer automatiquement les jurons avant quâils ne soient affichĂ©s aux visiteurs de votre site. Allons-y.
// hook into the 'comment_text' filter with the callback function
add_filter( 'comment_text', 'the_profanity_filter' );
// define a callback function to filter profanities in comments
function the_profanity_filter( $comment_text ) {
// define an array of profane words and count how many are there
$profaneWords = array('fudge', 'darn', 'pickles', 'blows', 'dangit');
$profaneWordsCount = sizeof($profaneWords);
// loop through the profanities in $comment_text and replace them with '*'
for($i=0; $i < $profaneWordsCount; $i++) {
$comment_text = str_ireplace( $profaneWords[$i], str_repeat('*', strlen( $profaneWords[$i]) ), $comment_text );
}
return $comment_text;
}
Voici une explication ligne par ligne du code :
- comment_text est un filtre qui vous permet de modifier le texte dâun commentaire avant que le navigateur ne lâaffiche. Vous pouvez enregistrer votre fonction de rappel avec lui pour filtrer sa sortie.
- La fonction
add_filter()
vous permet de vous connecter au filtrecomment_text
et de lui associer une fonction de rappel. the_profanity_filter()
est le nom de la fonction de rappel. Elle nâaccepte quâun seul paramĂštre, qui est une chaĂźne de caractĂšres contenant le texte du commentaire. DĂ©finissez cette fonction personnalisĂ©e avec la logique de code appropriĂ©e.- Stockez tous les mots profanes dans un tableau PHP appelĂ©
profaneWords
. Vous pouvez ajouter autant de mots que vous le souhaitez Ă ce tableau. Je stocke la taille de ce tableau dans la variableprofaneWordsCount
Ă lâaide de la fonction PHP sizeof(). - Passez en boucle tous les mots profanes et utilisez la fonction str_ireplace() par dĂ©faut de PHP pour remplacer tous les jurons correspondants par des symboles
*
. Comme il sâagit dâune fonction de remplacement de chaĂźne insensible Ă la casse, vous nâavez pas Ă vous soucier des majuscules. - Utilisez
return
pour afficher le texte de commentaire filtré.
Enregistrez les changements dans votre fichier dâextension personnalisĂ©e et rechargez tout message avec des commentaires. Tous les mots que vous avez inclus dans le tableau profaneWords
doivent maintenant ĂȘtre remplacĂ©s par des symboles « * ».
Les commentaires originaux seront toujours disponibles tels quels dans la base de donnĂ©es. Ce filtre ne modifie que le texte du commentaire avant quâil ne soit transmis Ă lâinterface publique.
Une fois que vous ĂȘtes accrochĂ© au bon filtre, vous pouvez faire beaucoup de choses sympas avec lui.
Par exemple, vous pouvez Ă©galement utiliser le filtre comment_text
pour supprimer les URLs de tous les commentaires (assurez-vous de lire ce guide détaillé sur la maniÚre de bloquer les commentaires indésirables dans WordPress).
Vous pouvez également vous accrocher au filtre pre_comment_approved et marquer les commentaires comme approuvés, indésirables ou dans la corbeille en fonction de critÚres prédéfinis.
Exemple de filtres 2 : Insérer un contenu aprÚs un article
Vous avez déjà vu comment WordPress utilise le filtre the_content
pour modifier le contenu dâun article ou dâune page. Utilisons le mĂȘme filtre pour ajouter quelque chose Ă la fin de chaque article.
// hook into 'the_content' filter with a callback function
add_filter( 'the_content', 'insert_content_below' );
// define the callback function to insert something below the post
function insert_content_below( $content ) {
// check to see if we're inside the main loop in a single post
if ( is_single() && in_the_loop() && is_main_query() ) {
return $content . "<h3 style=\"text-align: center;\">Let me insert myself here</h3><p style=\"text-align: center;border: 3px solid #5333ed;\">I'll appear after the post. You can insert anything here. Even HTML. Headers, links, images, scripts, I'll take them all and append it to the end of the post content. You can also give me a class, so you can style me easily with CSS style sheets.</p>" ;
}
return $content;
}
Comprennons la logique du code dans lâexemple ci-dessus :
- Le filtre de hook
the_content
vous aide Ă rĂ©cupĂ©rer le contenu de lâarticle en cours et Ă le personnaliser. - Utilisez la fonction
add_filter()
pour vous connecter au filtrethe_content
avec la fonction de rappelinsert_content_below()
. - DĂ©finissez la fonction de rappel en passant le contenu de lâarticle en cours comme paramĂštre (
$content
). - Dans la fonction de rappel, vĂ©rifiez que vous ne filtrez que le contenu de la requĂȘte principale, qui dans ce cas est le contenu de lâarticle. Si vous ne le vĂ©rifiez pas, le code filtrera parfois involontairement le contenu dâautres endroits, comme les colonnes latĂ©rales et les pieds de page.
- is_main_query() et in_the_loop() dĂ©terminent si la requĂȘte est une requĂȘte principale et se produit dans la boucle principale de WordPress.
- is_single() vĂ©rifie sous condition si la requĂȘte porte sur un article individuel.
- Utilisez lâopĂ©rateur de concatĂ©nation de chaĂźnes de PHP (
$content . "your additions"
) pour ajouter des éléments supplémentaires au contenu de la page. return
le commentaire filtrĂ© si toutes les conditions ci-dessus sont remplies. Si ce nâest pas le cas, retournez simplement le contenu sans le modifier.
Enregistrez votre fichier dâextension, chargez nâimporte quel article sur votre site et faites le dĂ©filer jusquâĂ la fin.
Vous pouvez utiliser la mĂȘme logique pour ajouter nâimporte quoi au dĂ©but de tous vos articles en inversant la position des paramĂštres de concatĂ©nation des chaĂźnes ("your additions" . $content
).
Personnaliser la page de connexion WordPress avec des hooks
Utilisons à la fois des actions et des filtres pour personnaliser la page de connexion par défaut de WordPress. Pour ce faire, je vais créer une nouvelle extension appelée Sal Custom Login Page. Vous pouvez trouver le code source complet de cette extension à la fin de cette section.
Commençons par ajouter les champs dâen-tĂȘte standard de lâextension et lâenregistrer dans WordPress.
<?php
/*
Plugin Name: Sal Custom Login Page
Version: 1.0
Description: Demonstrating WordPress Hooks (Actions and Filters) by customizing the WordPress login page.
Author: Salman Ravoof
Author URI: https://www.salmanravoof.com/License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: sal-custom-login-page
*/
// enqueueing the custom style sheet on WordPress login page
add_action( 'login_enqueue_scripts', 'salhooks_login_stylesheet');
function salhooks_login_stylesheet() {
// Load the style sheet from the plugin folder
wp_enqueue_style( 'sal-custom-login-page', plugin_dir_url( __FILE__ ).'sal-custom-login-page-styles.css' );
}
Tout dâabord, accrochez-vous Ă lâaction login_enque_scripts pour obtenir votre feuille de style personnalisĂ©e. Tous les scripts ou styles que vous mettez en file dâattente ici sont inclus dans la section dâen-tĂȘte de votre page de connexion.
Si vous souhaitez charger des scripts et des feuilles de style personnalisĂ©s sur lâinterface publique de votre site (plutĂŽt que sur la zone dâadministration ou la zone de connexion de lâadministration), vous devez vous accrocher Ă lâaction wp_enqueue_scripts
. Vous pouvez en savoir plus Ă ce sujet dans le Codex WordPress et dans lâarticle de Kinsta sur lâutilisation de wp_enqueue_scripts.
Ă lâintĂ©rieur de la fonction de rappel salhooks_login_stylesheet()
, utilisez la fonction wp_enqueue_style() pour charger la feuille de style personnalisée (sal-custom-login-page-styles.css
) placĂ©e dans le mĂȘme rĂ©pertoire de lâextension. La fonction plugin_dir_url( __FILE__ ) intĂ©grĂ©e Ă WordPress permet dâobtenir facilement le chemin de lâURL (avec une barre oblique Ă la fin) du rĂ©pertoire de lâextension.
Je ne vais pas expliquer les styles CSS appliqués ici, mais vous pouvez les trouver tous dans le code source lié à la fin de cette section.
// Custom login ERROR message to keep the site more secure
add_filter( 'login_errors', 'salhooks_remove_login_errors', 10 );
function salhooks_remove_login_errors() {
return 'Incorrect credentials. Please try again!';
}
Ensuite, accrochez-vous au filtre login_errors pour modifier le message dâerreur affichĂ© lorsque quelquâun saisit des informations dâidentification incorrectes. Le filtre du message dâerreur empĂȘchera les attaquants de deviner facilement votre nom dâutilisateur.
// Remove the login form box shake animation for incorrect credentials
add_action( 'login_head', 'remove_login_error_shake' );
function remove_login_error_shake() {
remove_action( 'login_head', 'wp_shake_js', 12 );
}
Chaque fois quâune personne saisit des donnĂ©es de connexion incorrectes, la boĂźte du formulaire de connexion tremble agressivement. Cette Ă©tape est facultative, mais je lâai incluse pour montrer que vous pouvez Ă©galement supprimer certaines fonctionnalitĂ©s de la page de connexion.
Vous en apprendrez plus sur les fonctions remove_action()
et remove_filter()
dans la derniĂšre section de cet article.
// Change the logo and header link above the login form
add_filter( 'login_headerurl', 'salhooks_login_headerurl');
function salhooks_login_headerurl( $url ) {
$url = 'https://salmanravoof.com';
return $url;
}
add_filter( 'login_headertext', 'salhooks_login_headertext');
function salhooks_login_headertext( $text ) {
$text = 'Salman Ravoof';
return $text;
}
LâĂ©tape finale consiste Ă modifier lâURL et le texte de lâen-tĂȘte de connexion. Vous pouvez vous connecter aux filtres login_headerurl et login_headertext pour les modifier tous les deux.
Si vous souhaitez vous appuyer sur cette extension et poursuivre vos expĂ©riences, vous pouvez tĂ©lĂ©charger le code source de lâextension et vous lancer.
Liste et ressources de hooks WordPress
Il est difficile de mĂ©moriser tous les diffĂ©rents hooks de WordPress. Il y a des milliers dâactions et de filtres intĂ©grĂ©s auxquels il est possible de sâaccrocher. Par consĂ©quent, trouver un hook appropriĂ© peut parfois ressembler Ă une chasse au trĂ©sor.
Heureusement, il existe diverses ressources que vous pouvez utiliser pour trouver le hook parfait pour vos besoins.
Le premier endroit pour se familiariser avec les hooks est le Codex WordPress, en particulier sa section sur les hooks dans le manuel des extensions. Vous y trouverez des informations essentielles sur les hooks et des liens pour compléter la documentation sur toutes les actions et les filtres.
Ajoutez ces liens utiles du manuel des extensions à vos favoris pour accélérer votre recherche :
- Plugin API â RĂ©fĂ©rence de fonction des hooks
- Plugin API â RĂ©fĂ©rence de lâaction
- Plugin API â RĂ©fĂ©rence du filtre
Les pages de rĂ©fĂ©rence des actions et des filtres vous donneront une liste de tous les hooks qui sâexĂ©cutent gĂ©nĂ©ralement lors dâune requĂȘte WordPress spĂ©cifique.
Par exemple, vous pouvez trouver tous les hooks dĂ©clenchĂ©s lorsque vous accĂ©dez Ă une page dâadministration, lorsque vous traitez des fichiers joints de pages dâarticles ou des catĂ©gories.
Le Codex WordPress comprend Ă©galement un outil de recherche pratique pour trouver toutes ses fonctions, ses crochets, ses mĂ©thodes et ses classes. Cette page rĂ©pertorie Ă©galement les nouveaux composants et les mises Ă jour de la derniĂšre version de WordPress. Dirigez-vous dâabord ici si vous voulez trouver ce qui se passe dans WordPress.
Cet index des hooks WordPress classe tous les hooks par type, par version de WordPress oĂč ils ont Ă©tĂ© lancĂ©s, et sâils sont obsolĂštes.
En triant les hooks par ordre dâapparition, vous verrez que les hooks les plus anciens de WordPress sont toujours les plus utilisĂ©s. Si vous ĂȘtes nouveau dans le dĂ©veloppement de WordPress, vous familiariser avec ces actions et filtres populaires est le moyen le plus rapide de vous rattraper.
Bien que cet index nâait pas Ă©tĂ© mis Ă jour depuis WordPress 5.1, il est toujours utile de parcourir tous les principaux hooks.
Vous avez toujours du mal à trouver le hook que vous voulez ? Une recherche en ligne avec le bon mot-clé est toujours un bon moyen de commencer. Si tout le reste échoue, vous pouvez toujours creuser dans le code de WordPress.
Trouver des hooks enregistrés sur une page WordPress
Comme nous lâavons vu, WordPress a des tonnes de hooks disponibles, mais tous les hooks ne se dĂ©clenchent pas sur chaque page. Si vous pouvez trouver quelles actions et quels filtres vous pouvez utiliser sur une page particuliĂšre, alors vous avez gagnĂ© la moitiĂ© de la bataille.
Bien que vous puissiez utiliser des outils de débogage PHP avancés comme xdebug et PHPCS pour vous aider, il existe des outils de développement plus simples comme Debug Bar et Query Monitor que vous pouvez exécuter dans WordPress.
Barre de débogage avec des actions et des modules de filtre
Debug Bar est une extension officielle de WordPress qui ajoute un menu Debug Ă votre barre dâadministration. Elle affiche les avertissements et les notices de PHP, les requĂȘtes de cache, les requĂȘtes MySQL et dâautres informations utiles pour le dĂ©bogage.
Info
Cette extension nâa pas Ă©tĂ© rĂ©cemment mise Ă jour, ni testĂ©e avec les derniĂšres versions majeures de WordPress. Nous la mentionnons comme une extension pratique pour en savoir plus sur les hooks de WordPress. Utilisez-la dans un environnement de staging.
AprĂšs avoir installĂ© lâextension, vous devez ajouter le code ci-dessous au fichier wp-config.php
de votre site pour activer ses fonctions de débogage.
define( 'WP_DEBUG', true ); // tracks PHP Warnings and Notices
define( 'SAVEQUERIES', true ); // tracks and displays MySQL queries
Vous devriez maintenant voir lâoption de menu Debug sâafficher dans votre barre dâadministration. En cliquant sur cette option, vous accĂ©derez Ă son tableau de bord oĂč vous pourrez voir les diffĂ©rentes requĂȘtes et caches attachĂ©es Ă la page Ă partir de laquelle vous y avez accĂ©dĂ©.
Ensuite, vous devez installer lâextension Debug Bar Actions ans Filters Addon. Il sâagit dâune extension pratique qui ajoutera deux onglets supplĂ©mentaires Ă votre tableau de bord de la barre de dĂ©bogage pour afficher les actions et les filtres dĂ©clenchĂ©s sur la requĂȘte en cours.
Elle listera également toutes les fonctions qui leur sont rattachées avec leur priorité.
Vous pouvez cliquer sur le menu Debug depuis nâimporte quelle page de votre site pour connaĂźtre toutes les actions et les filtres auxquels vous pouvez accĂ©der sur cette page.
Query Monitor
Query Monitor est un puissant panneau dâoutils de dĂ©veloppement pour WordPress. Vous pouvez lâutiliser pour creuser dans les hooks disponibles sur une page et leur ordre de chargement.
Contrairement Ă Debug Bar, vous nâavez pas besoin dâinstaller de modules pour voir les actions et les filtres dĂ©clenchĂ©s sur une certaine page.
Query Monitor vous donne Ă©galement plus dâinformations sur lâendroit exact dâoĂč un hook est tirĂ©.
Dans la colonne des composants, vous pouvez voir que la plupart des hooks sont enregistrĂ©s Ă partir du cĆur. Mais certains hooks sont enregistrĂ©s Ă partir dâun thĂšme ou dâune extension. Quelques hooks peuvent ĂȘtre enregistrĂ©s Ă partir de plus dâun composant.
Vous pouvez utiliser les menus déroulants de hook et de composant pour ne voir que les hooks dont vous avez besoin.
Note : Query Monitor utilise le terme « Hooks » pour dĂ©signer Ă la fois les actions et les filtres, mais il appelle les fonctions de rappel enregistrĂ©es « Actions ». Il sâagit dâune mauvaise dĂ©finition technique qui peut prĂȘter Ă confusion, alors gardez bien cela Ă lâesprit.
Vous pouvez faire plus que simplement vĂ©rifier toutes les requĂȘtes et demandes avec Query Monitor. Il comprend Ă©galement des fonctionnalitĂ©s avancĂ©es telles que la liste des styles, des scripts, des langages, des appels Ajax, des contrĂŽles de capacitĂ© utilisateur et des appels API REST.
Le hook « all »
WordPress possĂšde un hook spĂ©cial appelĂ© « all » que vous pouvez utiliser pour lancer une fonction de rappel pour chaque hook, quâil soit ou non enregistrĂ© avec tous les autres. Il est utile pour dĂ©boguer les plantages de pages ou si vous voulez savoir quand un Ă©vĂ©nement particulier se produit.
Par exemple, vous pouvez utiliser le crochet all
comme dans lâexemple ci-dessous pour faire un echo
Ă toutes les actions en cours.
// echo all the actions being run
function debug_helper_function(){
echo '<p>' . current_action() . '</p>';
}
add_action( 'all', 'debug_helper_function' );
function debug_helper_function()
dĂ©finie ci-dessus sera exĂ©cutĂ©e lorsquâune action se dĂ©clenchera. Savoir quelle Ă©tait la derniĂšre action exĂ©cutĂ©e vous donnera une meilleure idĂ©e de ce que vous devez examiner.
OĂč sont stockĂ©s les hooks WordPress ?
WordPress utilise la classe WP_Hook pour implémenter le fonctionnement des hooks. Cette classe de base est utilisée pour gérer toutes les actions et les filtres intégrés à WordPress. Vous pouvez trouver presque tout le code relatif à cette classe dans le fichier wp-includes/class-wp-hook.php.
Techniquement, la classe WP_Hook
est un tableau dâobjets comprenant des propriĂ©tĂ©s telles que les appels, les itĂ©rations, current_priority, nesting_level et doing_action. Elle dĂ©finit Ă©galement un grand nombre de fonctions de hook utiles qui peuvent ĂȘtre appelĂ©es Ă lâaide des mĂ©thodes WP_Hook.
La plupart des dĂ©veloppeurs de WordPress nâont pas Ă se soucier de lâemplacement des hooks des boutiques WordPress tant quâils respectent les directives de lâAPI des extensions.Il existe deux types de hooks WordPress : les actions et les filtres, et ce guide explique exactement quand (et comment !) utiliser chacun d’entre eux đ„CLICK TO TWEET
Comment créer vos hooks WordPress personnalisés
Vous avez vu les diffĂ©rents hooks que WordPress fournit grĂące Ă son API dâextension. Vous avez Ă©galement regardĂ© comment vous pouvez utiliser les hooks par dĂ©faut pour injecter votre propre code dans le WordPress.
Si vous ĂȘtes un dĂ©veloppeur dâextensions ou de thĂšmes, il est bon de fournir aux autres dĂ©veloppeurs un moyen dâinteragir avec votre code de la mĂȘme maniĂšre. Câest exactement ce que vous permettent de faire les hooks personnalisĂ©s. Ils permettent aux autres dĂ©veloppeurs dâĂ©tendre et de modifier les fonctionnalitĂ©s de vos extensions et thĂšmes.
Il est assez simple de crĂ©er ses propres actions et filtres. Vous utilisez les mĂȘmes fonctions que celles que le cĆur de WordPress utilise pour crĂ©er des hooks. Voyons quelques exemples.
- How to Create Custom Actions in WordPress
- Comment créer un filtre personnalisé dans WordPress
- Convention de dénomination des hooks personnalisés
- Démonstration de hooks personnalisés avec une extension évolutive
- Travailler avec des hooks personnalisés de développeurs tiers
- Quand utiliser les hooks personnalisés ?
How to Create Custom Actions in WordPress
Utilisez la fonction do_action()
pour crĂ©er un hook dâaction personnalisĂ©. Voici comment faire :
// the position where you insert your action is where it'll run when called
do_action( ' my_unique_custom_action' );
// continue with the rest of your code
Maintenant, dâautres dĂ©veloppeurs peuvent se connecter Ă votre extension ou Ă votre thĂšme sans modifier le code source. Il leur suffit dâenregistrer leurs fonctions de rappel Ă lâaction personnalisĂ©e de votre extension en utilisant la fonction add_action()
.
add_action( 'my_unique_custom_action', 'some_callback_function' );
// define the callback function you mentioned in the above action function
some_callback_function() {
// this code will run wherever your custom action hook is
}
Veillez Ă bien documenter vos hooks personnalisĂ©s, en expliquant en dĂ©tail ce quâils font. AprĂšs tout, la crĂ©ation de hooks personnalisĂ©s sert principalement Ă aider dâautres dĂ©veloppeurs Ă interagir avec votre code.
Comment créer un filtre personnalisé dans WordPress
Utilisez la fonction apply_filters()
pour créer un filtre personnalisé. Voici comment vous pouvez le faire :
$value_to_filter = "I'm a string, but this can be any PHP data type";
// filters modify a value and are typically tied to a predefined variable
apply_filters( 'my_custom_filter', $value_to_filter );
Les paramĂštres de votre filtre personnalisĂ© doivent inclure un identifiant unique et une valeur Ă filtrer. Dâautres dĂ©veloppeurs peuvent se connecter Ă votre filtre personnalisĂ© avec la fonction add_filter()
et modifier la valeur passée.
add_filter( 'my_custom_filter', 'some_callback_function' );
// define the callback function you mentioned in the above filter function
function some_callback_function( $value_to_filter ) {
// modify the passed value (or not)
return $value_to_filter; // returning a value is a must for filters
}
Lorsque vous dĂ©finissez votre filtre personnalisĂ©, assurez-vous quâil nâest pas positionnĂ© avant que la valeur quâil est censĂ© filtrer ne soit dĂ©finie. Si vous ne positionnez pas le filtre correctement, la valeur filtrĂ©e sera ensuite Ă©crasĂ©e par la valeur par dĂ©faut.
Convention de dénomination des hooks personnalisés
Il est important de choisir un nom unique pour tous vos hooks personnalisĂ©s. Comme chaque extension ou thĂšme peut avoir ses propres hooks personnalisĂ©s, le fait dâavoir des noms de hook identiques peut entraĂźner des collisions de codes avec des rĂ©sultats inattendus.
Par exemple, si vous nommez votre action send_email
, il est fort probable que dâautres dĂ©veloppeurs dâextensions choisissent le mĂȘme terme car il nâest pas assez unique. Si un site web installe Ă la fois votre extension et celui de lâautre dĂ©veloppeur, cela peut provoquer des erreurs qui seront difficiles Ă repĂ©rer.
Vous pouvez faire prĂ©cĂ©der tous vos hooks personnalisĂ©s dâun identifiant commun pour quâils restent Ă la fois simples et uniques. Ainsi, au lieu de send_email
, vous pouvez le nommer plugin_name_send_email
(plugin_name_ est ici le préfixe unique).
Démonstration de hooks personnalisés avec une extension évolutive
CrĂ©ons une extension Ă©volutive qui permettra Ă dâautres dĂ©veloppeurs dâinteragir avec elle en utilisant ses hooks personnalisĂ©s.
Je vais nommer cette extension Custom Hooks Demo. Sa fonction principale est de produire une boĂźte de citation Ă chaque fois que vous insĂ©rez un code court. Elle comprendra des actions et des filtres personnalisĂ©s aux bons endroits pour permettre Ă dâautres dĂ©veloppeurs de modifier ou dâĂ©tendre ses fonctionnalitĂ©s.
Vous pouvez vous référer à mon guide des codes courts WordPress pour en savoir plus sur le fonctionnement des codes courts.
Commençons par lâextension Ă©volutive.
<?php
/*
Plugin Name : Custom Hooks Demo
Description : Demonstrating how to create an extensible WordPress plugin using custom hooks.
Author : Salman Ravoof
Author URI : https://salmanravoof.com/
License : GPLv2 or later
License URI : https://www.gnu.org/licenses/gpl-2.0.html
Text Domain : custom-hooks-demo
*/
/**
* the [custom_hooks_demo] shortcode returns the HTML code for a quote box.
* @return string HTML code for a quote box
*/
add_shortcode( 'custom_hooks_demo', 'my_shortcode_callback' );
function my_shortcode_callback ( $arguments ) {
ob_start(); // start object buffering to collect all output before sending it to the browser
// set an action hook to run before you output anything
do_action( 'the_topmost_custom_action' );
// define your variables which you want to allow to be filtered
$quote_content = "Z.E.R.O. That's the number of people who'd like to have any website autoplay music on their browsers.";
$quote_author = "John Doenuts";
// create your custom filters after you've set the variables
$quote_content = apply_filters( 'custom_quote_content', $quote_content );
$quote_author = apply_filters( 'custom_quote_author', $quote_author );
// build the shortcode output template
echo "<div style=\"border:3px solid #5333ed;\"><blockquote style=\"margin:20px;border-color:#5333ed;\">";
echo $quote_content;
echo "<br><br>";
echo "â <strong>" . $quote_author . "</strong>";
echo "</blockquote></div>";
// set an action hook to run after you output everything
do_action( 'the_ending_custom_action' );
return ob_get_clean(); // get buffer contents, delete the buffer, and then stop buffering
}
- La fonction
add_shortcode()
est utilisĂ©e pour crĂ©er le code court personnalisĂ©. Ensuite, vous dĂ©finissez la fonction de rappel du code court avec toutes les fonctionnalitĂ©s de cette extension. - ob_start() est une fonction PHP qui permet de mettre en mĂ©moire tampon lâaffichage. Câest une fonction trĂšs pratique qui indique Ă PHP de conserver toute sortie dans la mĂ©moire tampon du serveur plutĂŽt que de lâafficher immĂ©diatement. Vous pouvez lâutiliser pour construire du code HTML complexe et lisible en PHP.
do_action("the_topmost_custom_action")
dĂ©finit votre premiĂšre action personnalisĂ©e. Pour la rendre utile, vous devez la dĂ©finir avant que lâextension ne produise quoi que ce soit. Les autres dĂ©veloppeurs peuvent se connecter Ă cette action personnalisĂ©e pour exĂ©cuter leur code avant que ce code court personnalisĂ© nâaffiche quoi que ce soit.- CrĂ©ez les variables que vous voulez filtrer. Dans cette extension, ces variables sont
$quote_content
et$quote_author
. Ce sont toutes deux des chaĂźnes de caractĂšres dans cet exemple, mais vous pouvez les dĂ©finir comme nâimporte quel type de donnĂ©es PHP (par exemple, entier, boolĂ©en, tableau). - Utilisez la fonction
apply_filters()
pour crĂ©er vos filtres personnalisĂ©s. Comme tous les filtres retournent une valeur, vous pouvez affecter les variables prĂ©cĂ©demment dĂ©finies Ă la valeur renvoyĂ©e par ce filtre. Dâautres dĂ©veloppeurs peuvent maintenant se connecter Ă ce filtre pour modifier les valeurs par dĂ©faut des variables prĂ©dĂ©finies. - Utilisez les dĂ©clarations
echo
pour construire ligne par ligne lâaffichage de votre code court. Comme nous avons activĂ© la mise en mĂ©moire tampon, aucun affichage sortie nâatteindra le navigateur immĂ©diatement. do_action( 'the_ending_custom_action' )
dĂ©finit votre derniĂšre action personnalisĂ©e. Vous devez la dĂ©finir Ă la toute fin, mais avant de retourner tout le contenu du tampon.- ob_get_clean() est une fonction PHP 3-en-1 par dĂ©faut. Elle rĂ©cupĂšre le contenu de la mĂ©moire tampon, Ă©limine toutes les donnĂ©es de la mĂ©moire tampon, puis arrĂȘte la mise en mĂ©moire tampon. Elle
return
le contenu de la mémoire tampon collecté sous forme de chaßne concaténée unique.
Une fois enregistrĂ© et activĂ©, lâajout du code [custom_hooks_demo]
au contenu de votre article et produira une boßte de citation avec les valeurs par défaut.
Maintenant, crĂ©ons une autre extension appelĂ©e Custom Hooks Demo Extension. Elle se connectera Ă tous les hooks personnalisĂ©s crĂ©Ă©s par lâextension prĂ©cĂ©dente et fera ou modifiera quelque chose.
<?php
/*
Plugin Name : Custom Hooks Demo Extension
Description : Demonstrating how you can extend WordPress plugin functionality with its custom hooks.
Author : Salman Ravoof
Author URI : https://salmanravoof.com/
License : GPLv2 or later
License URI : https://www.gnu.org/licenses/gpl-2.0.html
Text Domain : custom-hooks-demo-extension
*/
/**
* replace the quote content by hooking into the 'custom_quote_content' filter
*/
add_filter( 'custom_quote_content', 'new_quote_content_callback' );
function new_quote_content_callback( $content ) {
$content = "There are no bugs in programming. Only unexpected features.";
return $content;
}
/**
* replace the quote author by hooking into the 'custom_quote_author'
*/
add_filter( 'custom_quote_author', 'new_quote_author_callback' );
function new_quote_author_callback( $author ) {
$author = "Jane Doodle";
return $author;
}
/**
* add an image to the top of the shortcode output by hooking into the 'the_topmost_custom_action'
*/
add_action( 'the_topmost_custom_action', 'quote_image_callback' );
function quote_image_callback() {
$url = "https://upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Quote-right-cs.svg/75px-Quote-right-cs.svg.png";
echo '<div><img class="aligncenter" src="'.$url.'"></div>';
}
/**
* add a button below the shortcut output by hooking into the 'the_ending_custom_action'
*/
add_action( 'the_ending_custom_action', 'add_button_callback' );
function add_button_callback() {
echo '<div style="text-align:center;"><button name="nice">Nice Quote!</button></div>';
}
Comme vous pouvez le voir, cette extension ne contient rien dâautre que des fonctions dâaction et de filtrage qui sâaccrochent Ă lâextension originale aux bons endroits pour y apporter des modifications.
Elle utilise les fonctions add_action()
et add_filter()
pour enregistrer ses fonctions de rappel avec les actions et les filtres personnalisĂ©s crĂ©Ă©s par lâextension originale (par exemple, the_topmost_custom_action
, custom_quote_author
).
Des hooks dâaction personnalisĂ©s vous permettent dâintercaler votre code aux bons endroits dans lâextension originale et dâexĂ©cuter vos propres scripts. Ici, nous ajoutons une image en haut et un bouton en bas.
De mĂȘme, des filtres personnalisĂ©s vous permettent de modifier les valeurs du contenu de la citation et son nom dâauteur. Le rĂ©sultat final est une extension qui est entiĂšrement Ă©volutive par nâimporte qui sans modifier son code source.
Travailler avec des hooks personnalisés de développeurs tiers
Les hooks personnalisĂ©s permettent aux extensions et aux thĂšmes WordPress dâavoir un riche Ă©cosystĂšme dâextensions Ă©volutives. Prenons lâexemple de lâextension WooCommerce. Elle ajoute une fonctionnalitĂ© de commerce Ă©lectronique Ă WordPress, mais il inclut Ă©galement des tonnes de hooks dans son code.
WooCommerce dispose de centaines dâextensions et de plugins qui utilisent ses hooks pour dĂ©velopper ses fonctionnalitĂ©s de base et les amĂ©liorer.
Vous pouvez utiliser ces extensions pour intégrer WooCommerce avec Stripe, MailChimp, Salesforce, Zapier, et bien plus encore.
Une bonne pratique consiste Ă consulter la section de documentation des extensions WordPress les plus populaires pour voir comment elles mettent en Ćuvre des hooks personnalisĂ©s. Quelques-unes de mes principales suggestions sont Easy Digital Downloads, BuddyPress, Quiz and Survey Master et Gravity Forms.
Quand utiliser les hooks personnalisés ?
En fonction du thĂšme ou de lâextension que vous crĂ©ez, et de la personne Ă qui cela est destinĂ©, vous pouvez vous demander sâil est nĂ©cessaire dâajouter des hooks personnalisĂ©s.
Une bonne rĂšgle de base pour dĂ©cider dâajouter ou non des hooks personnalisĂ©s est de vĂ©rifier sâils offrent des avantages dâextensibilitĂ© aux autres dĂ©veloppeurs. Si ce nâest pas le cas, il vaut mieux attendre que dâautres dĂ©veloppeurs vous demandent de les ajouter.
Vous devez ĂȘtre trĂšs sĂ»r dâajouter des hooks personnalisĂ©s Ă votre extension ou Ă votre thĂšme. Une fois quâil est publiĂ©, et si dâautres dĂ©veloppeurs lâont dĂ©jĂ utilisĂ©, vous ne pouvez pas le modifier sans rompre la rĂ©trocompatibilitĂ©.
Suppression des fonctions de rappel des hooks WordPress
Vous avez dĂ©jĂ vu des exemples de suppression des fonctions de rappel enregistrĂ©es pour certains hooks. Ces rappels peuvent ĂȘtre enregistrĂ©s par des extensions, des thĂšmes, ou mĂȘme par le cĆur de WordPress lui-mĂȘme. Examinons la suppression des fonctions de rappel accrochĂ©es avec plus dâexemples.
Pour supprimer une fonction de rappel dâun hook, selon quâelle est enregistrĂ©e dans une action ou un filtre, vous devez utiliser les fonctions remove_action()
ou remove_filter()
.
Une mise en garde sâimpose : vous devez appeler ces fonctions avec les mĂȘmes paramĂštres que ceux utilisĂ©s pour enregistrer la fonction de rappel. Fondamentalement, il faut copier-coller les paramĂštres depuis leurs fonctions add_action()
ou add_filter()
.
En outre, vous ne pouvez supprimer les fonctions de rappel quâaprĂšs leur enregistrement. Si vous essayez de les supprimer avant quâelles ne soient enregistrĂ©es, la procĂ©dure de suppression Ă©chouera. Vous devez obtenir lâordre dâexĂ©cution des hooks correctement.
Supposons que vous vouliez supprimer une fonction de rappel enregistrĂ©e par un thĂšme ralentit votre site (vous voulez un site rapide, nâest-ce pas ?).
function wp_bloated_callback_function() {
// some code that adds a lot of bloat to the site
}
add_action( 'template_redirect', 'wp_bloated_callback_function', 5 );
Par exemple, la fonction de rappel ci-dessus pourrait charger de nombreux scripts et feuilles de style inutiles. Sa suppression donnera Ă votre site un Ă©norme coup de pouce en termes de performances.
Cependant, vous devez vous assurer que la fonction remove_action()
ne sâexĂ©cute quâaprĂšs lâaction template_redirect. Une façon de le faire est de sâaccrocher Ă lâaction after_setup_theme telle quâelle est dĂ©clenchĂ©e aprĂšs lâaction template_redirect
.
function wp_remove_bloat() {
// ensure all parameters are identical to the original add_action() function
remove_action( 'template_redirect', 'wp_bloated_callback_function', 5 );
}
// ensure that remove_action() is called only after add_action()
add_action( 'after_setup_theme', 'wp_remove_bloat' );
La fonction wp_bloated_callback_function()
va maintenant se dĂ©tacher de lâaction template_redirect
.
Cas particuliers pour la suppression des fonctions de rappel
La suppression des fonctions de rappel ne se limite pas à leur désactivation. Parfois, vous devez les supprimer temporairement, exécuter votre code, puis les ajouter à nouveau.
Par exemple, lâaction save_post Ă se dĂ©clenche Ă chaque fois que les fonctions wp_insert_post()
et wp_publish_post()
sont appelées. Vous pouvez les trouver toutes les deux définies dans le fichier wp-includes/post.php
.
Ainsi, si vous avez une fonction de rappel liĂ©e Ă lâaction save_post
, et si vous appelez les fonctions wp_insert_post()
ou wp_publish_post()
dans votre fonction de rappel, lâaction save_post
se déclenchera plusieurs fois.
function some_callback_function( $post_id, $post ) {
// do something here
wp_insert_post( [some_array] ); // this function also calls the 'save_post' action
// maybe do something more
}
add_action( 'save_post', 'some_callback_function', 10, 2 );
Une fonction qui appelle lâaction qui lâappelle aussi peut crĂ©er des rĂ©sultats inattendus. Une façon de contourner ce problĂšme est dâutiliser la fonction remove_action()
Ă lâintĂ©rieur de votre fonction de rappel avant dâappeler wp_insert_post()
.
function some_callback_function( $post_id, $post ) {
// do something here
// remove the callback function from the âsave_postâ action
remove_action( 'save_post', 'some_callback_function', 10, 2 );
// now run the wp_insert_post() function
wp_insert_post( [some_array] );
// add the callback function back to the âsave_postâ action
add_action( 'save_post', 'some_callback_function', 10, 2 );
// maybe do something more
}
add_action( 'save_post', 'some_callback_function', 10, 2 );
Câest une autre utilisation pratique des fonctions remove_action()
ou remove_filter()
. En approfondissant le cĆur de WordPress, vous comprendrez comment mieux Ă©viter ces situations.
Tutoriels WordPress Hooks en prime
- Ajouter manuellement du code Ă lâen-tĂȘte et au pied de page de WordPress
- Votre guide complet sur la bibliothÚque de médias de WordPress
- Comment créer et modifier un Cron WordPress
- Comment créer un thÚme enfant WordPress
- Désactiver le chargement des extensions WordPress sur des pages et des articles spécifiques
- DĂ©sactiver les Ă©mojis dans WordPress avec du code
Résumé
Lâutilisation des hooks WordPress prĂ©sente de multiples avantages si vous ĂȘtes un dĂ©veloppeur WordPress.
Non seulement les hooks vous permettent de modifier ou dâĂ©tendre les fonctionnalitĂ©s de base de WordPress, mais vous pouvez Ă©galement les utiliser pour modifier des extensions, des thĂšmes, et laisser dâautres dĂ©veloppeurs interagir avec vos extensions ou thĂšmes.
Il est temps de sâaccrocher Ă WordPress !