Home WordPress Guide du débutant pour ajouter vos propres hooks WordPress

Guide du débutant pour ajouter vos propres hooks WordPress

by saber
Guide du débutant pour ajouter vos propres hooks WordPress


Les plugins sont la façon d’étendre WordPress. La raison pour laquelle il est si facile d’obtenir WordPress pour faire vos enchères est liée aux crochets qui sont dispersés dans le code source.

Vous souhaitez faire quelque chose dès qu’un article est publié ? Voulez-vous modifier la longueur de l’extrait ? Vous souhaitez créer vos propres statistiques de pages vues ? Trouver le bon crochet est tout ce que vous avez à faire.

Mais qu’en est-il de faire la même chose avec les plugins ? Les crochets ne sont pas seulement destinés à être utilisés dans WordPress, ils sont essentiellement un modèle de conception que vous pouvez implémenter dans votre propre travail.

Dans cet article, je vais vous montrer comment vous pouvez créer vos propres crochets pour faciliter le développement de votre travail par vous-même ou par d’autres.

Pourquoi avons-nous besoin de crochets?

Pour vous montrer à quel point les crochets peuvent être géniaux, regardons un exemple concret : Champs personnalisés avancés. Ce plugin vous permet d’ajouter des champs de données personnalisés flexibles aux messages ; nous parlons de Google Maps, de champs numériques, de choix multiples et plus encore.

Tout cela se fait via une interface utilisateur agréable, tout ce que vous avez à faire est d’utiliser des fonctions telles que get_field() Soit the_field() dans la partie avant. Jusqu’ici tout va bien.

Disons que vous construisez un outil qui permet aux gens de vendre des choses en proposant un champ pour le prix et un autre pour la devise. Cependant, en interne, vous souhaitez toujours stocker les prix en dollars, quelle que soit la devise que l’utilisateur choisit d’afficher.

Si ACF (Advanced Custom Fields) n’a pas de liaisons, cela serait difficile à faire, vous devrez peut-être utiliser un mécanisme en dehors d’ACF pour enregistrer ce champ. Heureusement, nous sommes couverts par le acf/save_post action. Vous pouvez utiliser cette action pour modifier $_POST données avant qu’elles ne soient enregistrées : un moment idéal pour convertir le prix en dollars.

C’est un exemple très pratique de crochets, mais il y a une autre raison : la pérennité et l’extensibilité. Les crochets sont comme une API, ils vous donnent des instructions ; un cadre pour ainsi dire. Si vous enregistrez des données importantes, cela devrait automatiquement créer un crochet afin que d’autres puissent manipuler les données si nécessaire. Si vous affichez quelque chose de critique pour votre application, des images par exemple, utilisez un filtre qui vous permet de définir le nombre d’images à afficher.

Comment les hooks fonctionnent en interne

Pour créer nos propres crochets, nous ferons exactement ce que WordPress fait en interne : utilisez le do_action() Oui apply_filters() fonctions pour exécuter toutes les fonctions liées. Passons au code source de WordPress pour voir comment ils fonctionnent.

WordPress utilise le wp_trim_excerpt() ils travaillent en interne pour créer un extrait. Dans WordPress 4.1, cette fonction est définie dans wp-includes/formatting.phpà partir de la ligne 2542. Si vous portez votre attention sur la ligne 2560, vous devriez voir ce qui suit :

$excerpt_length = apply_filters( 'excerpt_length', 55 );

Ce que cela signifie est le suivant : Exécutez toutes les fonctions connectées au excerpt_length crochets et renvoient la valeur finale. Disons que vous utilisez 3 plugins qui modifient la longueur de l’extrait, que se passe-t-il alors ? Rassemblons ces fonctions en un seul endroit et regardons :

add_filter( 'excerpt_length', 'plugin_a_excerpt_modify', 20 );
 plugin_a_excerpt_modify( $length ) {
 return $length - 10;
 }
 
 add_filter( 'excerpt_length', 'plugin_b_excerpt_modify', 32 );
 plugin_b_excerpt_modify( $length ) {
 return 104;
 }
 
 add_filter( 'excerpt_length', 'plugin_c_excerpt_modify', 16 );
 plugin_c_excerpt_modify( $length ) {
 return 20;
 }

Au final, la longueur du résumé sera de 104 mots. Les filtres sont exécutés dans leur ordre de priorité. Par conséquent, la fonction du plugin C est exécutée en premier. Si aucune autre fonction n’était connectée, la longueur serait maintenant de 20 mots. Ensuite, le complément A est activé et la longueur devient 10. Enfin, le complément B pèse, ce qui donne la longueur 104.

do_action() utilise exactement le même mécanisme en exécutant toutes les fonctions liées au hook défini en premier paramètre.

Notez que ce modèle est complètement fermé, il ne repose sur aucune définition particulière. Vous pouvez utiliser do_action( 'lol_hook' ) où vous voulez, dans le pire des cas, aucune fonction attachée à lol_hook. En d’autres termes, nous avons déjà l’infrastructure pour créer nos propres crochets !

Créer nos propres crochets

Comme je l’ai mentionné ci-dessus, tout ce que nous avons à faire est de nous assurer d’utiliser do_action() je add_filter et assurez-vous documentez-le. De cette façon, les codeurs et les utilisateurs sauront qu’il est là.

Supposons que nous créons une galerie des dernières images téléchargées extraites directement de la base de données, quelque chose comme ceci :

$args = array(
 'post_type' => 'attachment',
 'post_status' => 'any',
 'orderby' => 'date',
 'order' => 'DESC',
 'posts_per_page' => 10,
 'fields' => 'ids'
 );
 $images = new WP_Query( $args );
 $gallery = '['.'gallery ids="' . implode( ',', $images ) . '"'.']';
 echo do_shortcode( $gallery );

Dans cet exemple, nous créons une requête en veillant à ne récupérer que les images, triées par date et limitées à 10 résultats. En utilisant le fields paramètre Je me suis assuré qu’un tableau d’ID est renvoyé. J’ai ensuite construit un shortcode de galerie WordPress régulier à partir de ces informations.

Il existe deux approches que vous pouvez adopter pour ajouter des crochets ici. Vous pouvez simplement l’ajouter avant la définition du $args matrice, comme ceci :

$posts_per_page = apply_filters( 'my_gallery/posts_per_page', 10 );

Dans ce cas, vous devrez utiliser le $posts_per_page variable dans le tableau. Peut-être qu’une meilleure solution serait de laisser l’ensemble du tableau être modifié. Cela permettrait à d’autres plugins (ou à vous, à l’avenir) d’ajouter des catégories, des balises et d’autres restrictions sur les galeries ; voici le code complet :

$args = array(
 'post_type' => 'attachment',
 'post_status' => 'any',
 'orderby' => 'date',
 'order' => 'DESC',
 'posts_per_page' => 10,
 'fields' => 'ids'
 );
 
 $args = apply_filters( 'my_gallery/query_args', $args );
 
 $images = new WP_Query( $args );
 $gallery = '['.'gallery ids="' . implode( ',', $images ) . '"'.']';
 echo do_shortcode( $gallery );

C’est tout. D’autres plugins peuvent maintenant utiliser le my_gallery/query_args crochet pour modifier la fonctionnalité des galeries créées.

Une note sur le nom : la barre oblique n’est pas du tout nécessaire. Vous pouvez utiliser ‘my_plugin_query_args’ ou tout autre format de votre choix. Je préfère la barre oblique car elle indique clairement le plugin qui la crée et les fonctionnalités qu’elle fournit.

conclusion

Les hooks sont extrêmement puissants et peuvent être utilisés non seulement pour étendre WordPress, mais aussi pour étendre vos propres plugins ou même des thèmes. Vous devez faire attention à ne pas aller trop loin et à ajouter des crochets dans tous les coins et recoins de votre application.

Au lieu d’ajouter un lien vers la commande, le statut de la publication, le type de publication et les publications par page séparément, j’ai ajouté un filtre qui peut modifier l’ensemble du tableau à la fois. Cela n’a peut-être pas de sens d’ajouter d’autres bits de données pour ajouter des crochets, en fin de compte c’est à vous de décider.

Bonne chance pour créer des applications plus modulaires et extensibles, faites-nous savoir si vous avez déjà utilisé vos propres crochets dans un endroit sympa !



L’article est traduit, cliquez ici pour voir la source

Related Posts

Leave a Comment