Les Hooks de WordPress, bien comprendre les actions pour mieux développer

WordPress est actuellement sans conteste, LE CMS de référence. Plus de 25% des sites mondiaux sont désormais sous WordPress, ce dernier est a fortiori utilisé lors des nouvelles créations de site Internet. Outre sa facilité d’accès, c’est surtout sa grande évolutivité qui fait son succès. Les développeurs de la bête ont en effet pensé à faciliter la vie des codeurs notamment grâce aux hooks, permettant de développer sous WordPress sans avoir à intervenir dans le cœur. Les Hooks se différencient entre les actions et les filtres. Dans ce tuto nous allons voir comment utiliser les actions et donc dépasser le simple cadre des fonctionnalités natives.

Quelques prérequis avant de se lancer dans l’utilisation des hooks

Les hooks sont principalement utilisés dans le fichier function.php. Il n’est pas nécessaire d’être un développeur de génie en PHP, mais une connaissance des bases est plus que requise, de toute manière se lancer dans le développement de WordPress sans connaître un minimum ce langage n’aurait pas de sens.

On ne développe JAMAIS sur le thème parent, qu’il s’agisse d’un environnement de test ou sur un site en production, codez toujours sur le thème enfant, votre code est ainsi plus propre, à l’abri des mises à jour et il vous est bien plus facile de revenir en arrière en cas d’erreur. Pour vos premiers pas, nous vous conseillons de travailler sur un site test, en local ou en ligne.

Pour ce tuto, nous travaillons sur deux fichiers, le fichier function.php bien entendu et le fichier page.php. Créez une page vierge dans le back-office de WordPress pour mieux voir le résultat des hooks. Travailler entre le fichier de fonctions et un fichier PHP centré sur l’affichage est de manière générale la bonne méthode à appliquer.

La philosophie des actions de WordPress

Les actions sous WordPress répondent à la même logique que les niveaux d’exécution de Linux. Le meilleur système d’exploitation au monde (si si!) utilise une hiérarchisation de ses exécutions sur un nombre de niveaux prédéfinis (7 en général). Pour faire simple, disons qu’à son démarrage, Linux lance les services selon un ordre prédéfini, permettant ainsi un chargement coordonné et sans conflit du système.

Pour WordPress, c’est donc à peu près la même chose. Lors du chargement d’une page, le cœur du CMS exécute des tâches (les actions) selon une hiérarchie prédéterminée. Les actions ont en charge d’exécuter toutes les fonctions qui leur sont attribuées en fonction de leur ordre d’attribution, définie par l’argument d’ordonnance ou l’ordre d’apparition. On parle ainsi de Hooks (hameçon) pour désigner les niveaux d’exécution dans WordPress. En effet les actions viennent hameçonner les fonctions.

Comment utiliser les actions pour mieux coder dans WordPress

Nous voici enfin dans la partie technique ! Pour ces exemples nous utilisons un simple d’affichage de texte et de données, le but étant de se concentrer sur l’influence des actions sur votre manière de coder. Il s’agit simplement d’une base, si vous voulez développer des fonctions spécifiques, il faut vous en remettre à vos connaissances en PHP.

Créer sa première action

Dans votre fichier function.php, ajoutez le code suivant :

// ma première action
function dire_bonjour(){
	echo '<p class="hello"> Hello World !!</p>';
}
add_action( 'init', 'dire_bonjour');

En rafraîchissant votre page d’accueil, vous devriez obtenir ceci :

tutorial action hook wordpersse wordpress

Si ce n’est pas le cas, le texte se cache peut-être dans votre haut de page, écrit en noir sur un fond noir, ça ne donne pas grand-chose. Nous avons ajouté le css suivant pour ce genre de cas :

.hello{
	color: white;
	margin-top: 50px;
}

La fonction add_action(); sers à définir le contexte d’exécution de notre fonction dire_bonjour();. L’action comprend deux attributs, le premier « init », sert à définir la priorité d’exécution, la seconde appelle simplement la fonction que nous désirons déclencher (dire_bonjour(); dans le cas présent).

Init, n’est ici pas choisi arbitrairement, ce hook est défini par WordPress. Le CMS possède en effet toute une batterie de ces hameçons qu’il est possible d’utiliser pour hiérarchiser vos actions. Voici la liste des actions de WordPress, cette liste est classée par ordre d’exécution, certaines ayant un impact uniquement sur les pages d’administration et d’autres sur tout votre site.

Utiliser l’ordre de déclenchement d’une action

Pour jouer un peu avec l’ordre des exécutions de vos fonctions, plusieurs méthodes s’offrent à vous. Dans un contexte de développement, il est important de connaître un minimum les actions définies par WordPress afin de hiérarchiser plus facilement votre code.

La première méthode consiste simplement à déclarer différentes fonctions avec des hooks différents. L’ordre d’exécution suit scrupuleusement celui défini par WordPress :

function dire_bonjour(){
	echo '<p class="hello"> Hello World !!</p>';
}
add_action( 'init', 'dire_bonjour');

function dire_aurevoir(){
	echo '<p class="hello"> See ya World !!</p>';
}
add_action('wp','dire_aurevoir');

‘init’ est une action hiérarchiquement plus haute que ‘wp’, en toute logique, « Hello World!! » est déclenché avant « See ya World !! », apparaissant ainsi avant ce dernier.

wordpress tuto actions hooks woldpress

Il est également possible de donner un ordre d’exécution à un seul et même hook en y ajoutant un nouvel attribut numérique.

function dire_aurevoir(){
	echo '<p class="hello"> See ya World !!</p>';
}
add_action('wp','dire_aurevoir',2);

function dire_bonjour(){
	echo '<p class="hello"> Hello World !!</p>';
}
add_action( 'wp', 'dire_bonjour',1);

Dans cet exemple, nous codons en premier la fonction dire_aurevoir(); mais dans la mesure où son troisième attribut est numériquement supérieur celui de la fonction dire_bonjour(); elle estexécutée après :

wordpress tuto actions hooks woldpress

Voici enfin deux cas que vous ne rencontrerez certainement jamais en production, mais qu’il est intéressant de connaître pour mieux cerner la hiérarchisation des actions.

  • Si vous déclarez deux fonctions avec exactement le même ordre d’exécution, c’est le langage PHP qui prend le relais pour décider quelle fonction sera en premier prise en compte, c’est à dire dans l’ordre dans lequel les deux fonctions ont été codées dans le fichier :
    function dire_aurevoir(){
    	echo '<p class="hello"> See ya World !!</p>';
    }
    add_action('wp','dire_aurevoir');
    
    function dire_bonjour(){
    	echo '<p class="hello"> Hello World !!</p>';
    }
    add_action( 'wp', 'dire_bonjour');

    Ici « See ya World!! » sera donc affiché avant « Hello World !! ».

  • Il est aussi possible de dupliquer une même fonction à différents endroits en déclarant plusieurs add_action();
    function dire_bonjour(){
    	echo '<p class="hello"> Hello World !!</p>';
    }
    add_action( 'wp', 'dire_bonjour',1);
    add_action('wp','dire_bonjour',2);

     

Créer et personnaliser ses hooks et ses actions

Voici certainement la fonctionnalité des actions la plus utile en terme de développement. Il est possible de créer soit même ses propres actions, ouvrant encore plus de possibilités en terme de hiérarchisation des fonctions, sans passer par l’ordre instauré par WordPress.

Dans un premier temps nous allons, dans le fichier page.php inclure le code suivant, juste en dessous de l’appel du header :

do_action('bonjour_aurevoir');
get_header();

Nous venons à l’instant de créer une action. Dans le chargement de page.php, donc d’un modèle de base de page, nous pouvons déclencher une fonction juste avant le chargement du header. Ne nous reste plus qu’à créer les fonctions, toujours dans function.php, et de les hameçonner avec « bonjour_aurevoir ».

function dire_bonjour(){
	echo '<p class="hello"> page test : Hello World !!</p>';
}
add_action( 'bonjour_aurevoir', 'dire_bonjour',1);

function dire_aurevoir(){
	echo '<p class="hello"> page test : See ya World !!</p>';
}
add_action('bonjour_aurevoir','dire_aurevoir',2);

Utiliser des arguments dans une action

La fonction do_action(); permet d’apporter un ou plusieurs arguments personnalisés. Cela peut permettre de récupérer des données, comme par exemple des informations de l’utilisateur.

Utiliser un argument unique dans un hook

Commençons avec un seul argument. Pour effectuer cet exercice, il est nécessaire d’être connecté, sans quoi il vous sera impossible de voir les informations récupérées. Nous allons créer une fonction qui va utiliser le nom de l’utilisateur. Dans page.php, nous inscrire ceci :

wp_get_current_user();
do_action('bonjour', $current_user->display_name );

wp_get_current_user() va chercher toutes les informations relatives à l’utilisateur connecté pour les stocker dans la variable $current_user. $current_user->display_name permet d’isoler l’affichage du nom.

function bonjour_nom($nom){
	echo '<p class="hello">Hello '.$nom.'!!</p>';
}
add_action('bonjour', 'bonjour_nom');

ce qui nous donne :

actions hooks wordpress world presse$current_user->display_name va automatiquement stocker la valeur du nom de l’utilisateur dans la variable $nom.

Plusieurs arguments dans un hook

Afin d’aller plus loin, il est possible d’intégrer plusieurs arguments dans un hook. Cette fois-ci nous allons afficher le nom et l’email de l’utilisateur.

Dans page.php :

wp_get_current_user();
do_action('bonjour', $current_user->display_name, $current_user->user_email);
get_header(); ?>

Dans function.php :

function bonjour_nom($nom,$mail){
	echo '<p class="hello">Bonjour '.$nom.'votre adresse email est : '.$mail.'!!</p>';
}
add_action('bonjour', 'bonjour_nom',false,2);

qui donne :

tuto hooks action wordpress word press

$current_user->display_name vient stocker le nom dans $nom, $current_user->user_email vient stocker l’email dans $mail. La fonction agit de la sorte uniquement, car l’ordre de déclaration correspond, si nous inversons par exemple $current_user->display_name avec $current_user->user_email, l’affichage de ces deux valeurs s’inversera.

On observe, également l’apparition d’un quatrième argument dans add_action();. Ici « 2 », ce quatrième argument permet d’indiquer à la fonction le nombre de valeurs qui seront utilisées. Si ce quatrième argument n’est pas renseigné, seul le premier argument sera pris en compte (ici le nom).

Remarquez également que le troisième argument devient « false », cela informe au système que cette action aura un ordre d’exécution par défaut (à savoir 10).

Aller plus loin dans le développement sous WordPress avec les actions

WordPress recèle en lui d’autres outils pour les développeurs, ces derniers permettent de mieux s’orienter avant de coder, voire d’invalider certaines actions.

did_action();

Fonction permettant de retourner le nombre de fois dont une action a été déclenchée.

has_action();

Très utile, cette fonction permet de connaître l’existence d’un hook, des fonctions qui lui sont associées ou encore de son ordre de priorité.

remove_action();

Il est ici possible de supprimer une action à condition d’indiquer tous les arguments qui lui sont associés. Cela peut permettre d’invalider une action indésirable de WordPress ou de la réécrire complètement.

A propos de l'auteur(e)

Une réponse

  1. PanPan 7 février 2018