Comprendre le fonctionnement des hooks dans WordPress (part 1)
Un hook (ou « hameçon », « crochet ») va vous permettre d’exécuter une fonction lors d’un événement particulier ou à un moment précis. Il existe deux types de hook : les actions et les filtres.
- les actions permettent de faire quelque chose à un moment précis, ou lorsque un événement se produit.
- les filtres permettent de modifier du texte avant son affichage ou son enregistrement dans la base de donnée.
WordPress propose par défaut près de 700 actions et 1500 filtres prêts à être personnalisés par vos soins. Et si vous ne trouvez pas votre bonheur parmi cette liste, il vous suffira de les créer vous-même !
L’utilisation est archi-simple mais demande un petit peu de pratique pour s’imprégner de la logique de fonctionnement.
Filtrer un contenu avec add_filter() :
Imaginons que vous souhaitez que tous les liens affichés dans vos articles soient suivis d’une petite icône (comme sur ce blog). Vous cherchez donc à intervenir sur l’affichage du contenu, en l’occurrence de the_content()
que vous allez devoir filtrer.
Le code suivant sera placé dans le fichier functions.php
de votre thème (ou dans une extension).
- D’abord il faut créer notre fonction, ici appelée
MY_filter_content()
qui retourne notre contenu modifié. - Ensuite on cherche s’il existe déjà un filtre proposé nativement par WordPress. Après avoir consulté la longue liste des filtres disponibles, je m’arrête sur le hook nommé logiquement
the_content
. - Pour finir, il faut dire à WordPress qu’il va devoir exécuter notre filtre. Pour cela on utilise la fonction
add_filter()
. Cette fonction attend 2 paramètres obligatoires : le nom du hook (the_content) et le nom de notre fonction personnalisée (MY_filter_content).
- Pour aller plus loin : Il peut s’avérer utile de définir à quel moment nous souhaitons que le filtre soit appliqué par rapports aux autres filtres. Par exemple, je peux vouloir filtrer mon contenu avant tout autre filtre, ou au contraire que mon filtre soit exécuté après tous les autres. Pour cela, il faudra renseigner l’argument $priority. (0, 10, 20, 30…)
- Les filtres ont la particularité d’accepter des arguments s’ils ont été prévus pour.
Exécuter une action avec add_action() :
Admettons maintenant que vous souhaitez que la case à cocher « Se souvenir de moi » soit automatiquement cochée sur le formulaire de connexion au back office. Vous cherchez donc à « faire quelque chose » au chargement du formulaire de connexion.
Le code suivant sera placé dans le fichier functions.php
de votre thème (ou dans une extension).
- D’abord il faut créer la fonction, ici appelée
MY_check_rememberme()
dans laquelle on coche par défaut la case « Se souvenir de moi ». - Ensuite on cherche s’il existe une action proposée nativement par WordPress pour agir sur le formulaire de connexion. Après avoir consulté la longue liste des actions disponibles, je m’arrête sur le hook nommé
form_login
. - Pour finir, il faut dire à WordPress qu’il va devoir exécuter notre action. Pour cela on utilise la fonction
add_action()
. Cette fonction attend 2 paramètres obligatoires : le nom du hook (form_login) et le nom de notre fonction personnalisée (MY_check_rememberme).
Sur le blog de screenfeed vous trouverez une multitude de filtres, actions et bonnes idées pour personnaliser votre backoffice !
A ce stade vous pouvez personnaliser un grand nombre de chose aussi bien dans vos thèmes, vos extensions, que dans le back office.
Mais il arrive de devoir créer nos propres hooks s’ils n’ont pas été prévus nativement par WordPress, ou encore de devoir en désactiver. A suivre…
Liens utiles :
Une liste d’actions de WordPress sur le codex
Une liste de filtres de WordPress sur le codex
Une liste de filtres et actions de Woocommerce
Si cet article vous a aidé, si vous avez des questions ou des améliorations à proposer, n'hésitez pas à me laisser un commentaire en bas de page !
1 réponse
[…] avons vu comment créer simplement des filtres et des actions avec les hooks natifs de wordpress, voyons maintenant comment déclarer de nouveaux hooks, passer des arguments à nos filtres et […]