Comment créer un hook ?

29 janvier 2017 nakama

Développement

(Cet article a été écrit il y a très longtemps, dans une galaxie très très lointaine)

Avant tout un hook c’est quoi ?

En simplifié, c’est une fonction qui va être appelé à un moment précis du script ou lors d’un évènement particulier.

il existe 2 types de hooks comme nous l’explique le codex de WordPress :

  • les filtres : permet de modifier une valeur avant la sauvegarde en base de données ou avant l’affichage en front (on peut reconnaitre un filtre car la fonction doit retourner quelque chose)
  • les actions : permet de rajouter un élément à une étape du script, ici on ne peut pas modifier une valeur mais uniquement rajouter une « fonctionnalité »

Un hook ressemble à quoi ?

Il se compose de 3 éléments essentiels :

  • add_action ou add_filter
  • la fonction sur laquelle on va se greffer
  • notre fonction qui va traiter ou ajouter une fonctionnalité

Il est possible que vous utilisiez des hooks sans même le savoir 🙂

add_action('wp_enqueue_scripts', 'nakama_wp_enqueue_scripts');

function nakama_wp_enqueue_scripts() {}

Et oui, ici nous avons un hook action (add_action) qui « surveille » la fonction de WordPress wp_enqueue_scripts et lorsque celle-ci sera exécuté par le CMS, WordPress appellera notre fonction nakama_wp_enqueue_scripts afin que notre traitement soit pris en compte.

Pourquoi utiliser un hook ?

Je pense que c’est la grande question  que vous vous posiez 🙂 La réponse sera simple et rapide :

Un hook va vous permettre de modifier les fonctionnalités de WordPress sans toucher à la structure du CMS et du coup vous conservez la possibilité de faire les mises à jour sans avoir peur de perdre vos modifications, ce qui n’est pas négligeable 🙂
Second point positif c’est que la majorité des plugins utilisent les hooks du coup pouvez aussi interagir avec eux.

Création d’un hook ?

On va partir du principe que vous avez un plugin qui va rajouter des fonctionnalités pour chaque custom post types, vous avez donc une fonction qui va tous vous les récupérer, quelle que soit la provenance (plugins ou thèmes).
Après un tour sur le codex, vous avez trouvé cette fonction get_post_types() qui fait le boulot. Cependant, vous voulez laisser la possibilité à la personne utilisant votre plugin, de pouvoir gérer quel custom post type disposera ou non des fonctionnalités de votre plugin.

Et c’est là que notre hook rentre en jeu ! Comme c’est une donnée qui va être modifiée, on doit créer un hook add_filter afin de donner la possibilité de modifier ou non l’information.

function nakama_all_cpt() {
    /*
     * Uniquement les custom post types public
     */
    $args = array(
       'public'   => true,
       '_builtin' => false
    );
    $post_types = get_post_types( $args );

    return apply_filters( 'nakama_config_cpt', $post_types );
}

La ligne 11 est de loin la plus importante car elle met en place notre hook, en précisant :

  • son nom « nakama_config_cpt »
  • et la donnée à traiter « $post_types »

Utilisation du hook

Maintenant que notre hook est en place, n’importe qui utilisant votre plugin pourra modifier cette donnée et pour cela rien de plus simple, il faut ajouter un hook dans le fichier functions.php par exemple :

add_filter( 'nakama_config_cpt' , 'power_is_mine' );

function power_is_mine( $post_types ){
    $post_types['newcpt'] = 'newcpt';

    unset($post_types['nakama']);

    return $post_types;
}

Le tableau en paramètre de la fonction contient tous les custom post types, du coup nous pouvons soit :

  • ajouter ou supprimer une valeur du tableau

 

L’utilisant des hooks offrent énormément de possibilités lorsque vous développez sur WordPress, par exemple :

  • création de hooks entre thème parent et enfant
  • modification de WordPress sans toucher aux fichiers du CMS (idem pour les plugins)
  • mise en place de plugins avec une gestion « dynamique » des fonctionnalités en laissant l’utilisateur la possibilité de modifier ou non tel ou tel fonctionnalité
  • etc.
Mots-clés associés à cet article :

Retrouvez d'autres articles par catégories