Développer avec les crochets (hooks)

Au fur et à mesure que vous plongez dans le développement avec les crochets WordPress, il y a certains détails importants sur leur manière de fonctionner que vous devriez connaître.

Dans cette leçon, vous apprendrez quelques bonnes pratiques à suivre quand vous développez avec les crochets.

Nommer les crochets

La première bonne pratique concerne le nommage des crochets. Jetons un œil à certaines conventions que suit le cœur de WordPress.

Actions

Les actions sont généralement déclenchées au moment où quelque chose change, il est donc conseillé de choisir un verbe d’action en lien avec ce changement.

Par exemple, le crochet qui est déclenché par le cœur de WordPress quand un article est supprimé est appelé delete_post.

do_action( 'delete_post' );

Si vous voulez ajouter une action avant le changement, vous pouvez utiliser le préfixe pre_.

do_action( 'pre_delete_post' );

Pour terminer, si vous voulez ajouter une action après l’événement, la convention est d’utiliser le verbe au passé.

do_action( 'deleted_post' );

Filtres

Parce que les filtres sont généralement liés à une variable qui peut être modifiée, les crochets de filtre sont souvent nommés d’après cette variable.

Par exemple, le filtre qui vous permet de modifier le contenu d’un article est appelé the_content.

$content = apply_filters( 'the_content', get_the_content() );

Éviter les collisions de noms

Quand vous nommez vos crochets, il est important d’éviter les collisions de nommage avec d’autres extensions ou thèmes. Dans ce but, vous pouvez préfixer vos crochets avec le nom de votre extension ou un identifiant unique.

do_action( 'wp_learn_delete_book' );

apply_filters( 'wp_learn_lesson_url', 'https://example.org/lesson' );

Gestion des types retournés par les filtres

En utilisant un filtre, le type de variable qui est retourné n’est pas garanti, même s’il est documenté.

Le problème

La raison est que c’est la dernière fonction de rappel (callback) qui est utilisée par le filtre détermine le type de la variable.

À première vue, cela peut ne pas sembler être problématique, car comme vous êtes développeur, vous ferez en sorte de retourner une valeur du même type que celle reçue.

Cependant, si vous vous rappelez de la leçon sur les crochets personnalisés; comme vous pouvez vous accrocher à des actions et des filtres, d’autres développeurs le peuvent aussi.

Cela veut dire que si vous ajoutez un crochet à votre plugin, vous devez vous assurer que la valeur retournée est du bon type, sinon cela pourrait casser votre fonctionnalité.

La solution

La solution à ce problème vient en deux parties:

Validez la sortie de votre filtre

Le meilleur moyen d’être sûr que la valeur rendue par les fonctions de retour reste du même type que celui attendu est de valider le type de données dans votre code.

Pour les types simples comme les entiers, nombre ou booléens, vous pouvez utiliser le système de changement de type de PHP afin d’assurer que la valeur retournée est du bon type

  • boolean: $is_admin = (bool) apply_filters( 'wp_learn_is_admin', true );
  • integer: $book_count = (int) apply_filters( 'wp_learn_book_count', 10 );
  • float: $base_price = (float) apply_filters( 'wp_learn_base_price', 10.0 );

Cependant, pour des validations plus complexes ou pour d’autres types, il est plus approprié d’implémenter une validation manuelle.

Par exemple, pour une chaîne de caractères ou un tableau, il serait mieux de valider si la valeur retournée est du bon type plutôt que de forcer son type ce qui pourrait amener à une erreur fatale.

Par exemple, vous pouvez utiliser la fonction PHP is_string() pour vérifier que la valeur retournée par l’ensemble des fonctions est une chaîne de caractères.

$book_slug = apply_filters( 'wp_learn_book_slug', 'books' );

if ( ! is_string( $book_slug ) ) {
    // either reset the value or throw an error
}

Dans le cas contraire, vous pouvez écraser sa valeur ou déclencher une erreur.

Vérifiez la valeur de votre fonction de rappel

Le fait que le type de variable retourné par un filtre puisse être modifié veut également dire qu’une valeur de type incorrect peut également être passée à une fonction de rappel.

Par conséquent, si vous accrochez votre fonction de retour à un filtre, il est important de toujours vérifier le type de la valeur reçue avant d’effectuer des opérations dessus.

add_filter( 'wp_learn_book_slug', 'jon_doe_edit_book_slug' );
function jon_doe_edit_book_slug( $book_slug ) {
    if ( ! is_string( $book_slug ) ) {
        // throw some error because the type is incorrect 
    }

    // continue with your functionality because the type is correct
    return 'book';
}

Vous pouvez utiliser les mêmes méthodes que précédemment pour valider le type de la variable que vous recevez.

Pour plus d’information sur le Jonglage de type des variables PHP, vous pouvez vous référer à la documentation de PHP.

Il y a également une section dédiée aux fonctions de gestion des variables.

Obtenir des informations sur un crochet

Une autre chose à savoir sur les crochets, c’est comment obtenir des informations sur eux.

Déterminer le crochet courant

WordPress permet à une fonction de rappel ou méthode d’être utilisée par plus d’un crochet à la fois.

A cause de ça, le crochet auquel la fonction est actuellement rattachée est parfois incertain.

Dans chaque fonction il est possible d’utiliser les fonctions current_filter (en anglais) ou current_action (en anglais) pour déterminer quel est le filtre ou l’action qui a déclenché l’appel de la fonction.

Compter le nombre de fois qu’un crochet a été déclenché

Il est parfois important de savoir combien de fois un crochet a été appelé afin de prévenir une exécution supplémentaire.

Dans une fonction de retour, vous pouvez utiliser la fonction  did_filter (en anglais) pour vérifier combien de fois le filtre a été appelé durant la requête courante et la fonction did_action (en anglais) pour déterminer combien de fois l’action a été appelée.

Traduction : Timothee Moulin

Suggestions

Found a typo, grammar error or outdated screenshot? Contact us.