Crochets : Actions et Filtres

Pour générer votre site, Wordpress lance une multitude de fonctions qui se trouvent dans le noyau de son code.

Afin de nous donner la possibilité de modifier ces fonctions, WP a mis en place un système de Hooks (Crochets, Hameçons).

C'est à dire, que nous allons pouvoir modifier le comportement d'une fonction de WordPress, sans modifier directement cette fonction.

Il existe deux types de Hooks :

  • Les Hooks d'action : concerne les fonctions qui réalisent des actions

  • Les Hooks de filtre : concerne les fonctions qui retournent des valeurs

Pour comprendre le principe des Hooks, avant d'utiliser ceux de WP nous allons créer nos propres Hooks.

MéthodeAction

Un Hook action est en fait la possibilité d'ajouter plusieurs fonctions de rappel à une fonction

Dans votre fichier functions.php ajoutez le code suivant :

1
<?php
2
3
function act1_montheme()
4
{
5
    echo 'toto';
6
}
7
add_action('actions_montheme', 'act1_montheme');
8
9
function act2_montheme()
10
{
11
    echo 'titi';
12
}
13
add_action('actions_montheme', 'act2_montheme');
14

act1_montheme() : première fonction de rappel (vous donnez le nom que vous voulez)

actions_montheme : c'est le nom de votre Hook (vous donnez le nom que vous voulez)

add_action('actions_montheme', 'act1_montheme') : ajoute la fonction de rappel à votre Hook

Pour lancer votre Hook, il faut utiliser la fonction do_action('actions_montheme')

Dans votre fichier index.php ajoutez :

1
<?php get_header(); ?>
2
<main>
3
    <?php do_action('actions_montheme'); ?>
4
    ...
5

Les deux fonctions de rappel ont été lancées, vous devriez voir le texte tototiti qui s'affiche.

Pour simplifier l'utilisation des Hooks, une fonction portant habituellement le nom du Hook est créée dans le fichier functions.php :

1
<?php
2
...
3
function actions_montheme()
4
{
5
    do_action('actions_montheme');
6
}
7

Ce qui donne dans votre page index.php :

1
<?php get_header(); ?>
2
<main>
3
    <?php actions_montheme(); ?>
4
    ...
5

MéthodeFiltre

Un Hook filtre donne la possibilité de modifier le contenu d'une variable de votre Hook.

Le principe est de fournir à votre Hook des fonctions de rappel qui indique les manipulations à réaliser sur la variable.

Dans votre fichier functions.php ajoutez le code suivant :

1
<?php
2
...
3
function filt1_montheme($classes)
4
{
5
    $classes[] = 'toto';
6
    return $classes;
7
}
8
add_filter('filtres_montheme', 'filt1_montheme');
9
10
function filt2_montheme($classes)
11
{
12
    $classes[] = 'titi';
13
    return $classes;
14
}
15
add_filter('filtres_montheme', 'filt2_montheme');
16

filt1_montheme($classes) : première fonction de rappel (vous donnez le nom que vous voulez)

$classes : variable à modifier

filtres_montheme : c'est le nom de votre Hook (vous donnez le nom que vous voulez)

add_filter('filtres_montheme', 'filt1_montheme') : ajoute la fonction de rappel à votre Hook

Pour lancer votre Hook, il faut utiliser la fonction apply_filters('filtres_montheme', $classes). Cette fonction ne fait que lancer les fonctions de rappel avec la variable $classes.

Dans votre fichier index.php ajoutez :

1
<?php get_header(); ?>
2
<main>
3
    <?php
4
    $classes = [];
5
    $classes = apply_filters('filtres_montheme', $classes);
6
    var_dump($classes);
7
    ?>
8
    ...
9

Les deux fonctions de call-back ont été lancées, vous devriez voir le contenu de $classes.

Pour simplifier l'utilisation des Hooks, une fonction portant habituellement le nom du Hook est créée dans le fichier functions.php :

1
<?php
2
...
3
function filtres_montheme()
4
{
5
    $classes = apply_filters('filtres_montheme', []);
6
    echo "class='" . implode(' ', $classes) . "'";
7
}
8

Ce qui donne dans votre page index.php :

1
<?php get_header(); ?>
2
<main <?php filtres_montheme(); ?>>
3
    ...
4

Affichez le code source, vérifiez le contenu de la balise main.