Crochets WordPress: Guide du débutant pour ajouter vos propres crochets

Crochets WordPress: Guide du débutant pour ajouter vos propres crochets

Crochets WordPress: Guide du débutant pour ajouter vos propres crochets
СОДЕРЖАНИЕ
02 июня 2020

Les plugins sont le façon d’étendre WordPress. La raison pour laquelle il est si facile de faire en sorte que WordPress fasse vos enchères concerne les crochets qui sont jonchés dans le code source.


Vous voulez faire quelque chose dès la publication d’un article? Vous souhaitez modifier la longueur de l’extrait? Vous voulez créer vos propres statistiques de vue de page? Trouver le bon crochet est tout ce que vous devez faire.

Mais qu’en est-il de la même chose avec les plugins? Les crochets ne sont pas uniquement 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 vous permettre, à vous ou à d’autres, de tirer parti de votre travail.

Pourquoi nous avons besoin de crochets

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

Tout cela se fait via une belle interface utilisateur, tout ce que vous avez à faire est d’utiliser des fonctions comme get_field () ou the_field () sur le front-end. Jusqu’ici tout va bien.

Supposons que vous construisez un outil qui permet aux gens de vendre des objets, en offrant un champ pour le prix et un pour la devise. Cependant, en interne, vous souhaitez toujours stocker les prix en dollars, quelle que soit la devise dans laquelle l’utilisateur choisit de s’afficher..

Si ACF (Advanced Custom Fields) n’a pas de hooks, 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 les données $ _POST avant leur enregistrement – 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: l’épreuvage futur et l’extensibilité. Les crochets sont un peu comme une API, ils vous donnent des instructions; un cadre pour ainsi dire. Si vous enregistrez des données importantes, vous devez créer automatiquement un point d’ancrage afin que d’autres personnes 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 permet aux utilisations de définir le nombre d’images affichées.

Comment les crochets fonctionnent en interne

Pour créer nos propres hooks, nous ferons exactement ce que WordPress fait en interne – utilisez les fonctions do_action () et apply_filters () pour exécuter toutes les fonctions hookées. Passons au code source de WordPress pour voir comment ceux-ci fonctionnent.

WordPress utilise la fonction wp_trim_excerpt () en interne pour créer un extrait. Dans WordPress 4.1, cette fonction est définie dans wp-includes / formating.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);

Cela signifie ce qui suit: Exécutez chaque fonction connectée aux crochets excerpt_length et retournez 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 jetons un œil:

add_filter (‘excerpt_length’, ‘plugin_a_excerpt_modify’, 20);
plugin_a_excerpt_modify ($ length) {
return $ longueur – 10;
}

add_filter (‘excerpt_length’, ‘plugin_b_excerpt_modify’, 32);
plugin_b_excerpt_modify ($ length) {
retour 104;
}

add_filter (‘excerpt_length’, ‘plugin_c_excerpt_modify’, 16);
plugin_c_excerpt_modify ($ length) {
retour 20;
}

Au final, la longueur de l’extrait 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 désormais de 20 mots. Ensuite, le plugin A entre en jeu et la longueur devient 10. Enfin, le plugin B pèse, ce qui rend la longueur 104.

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

Notez que ce modèle est complètement fermé, il ne repose sur aucune définition spéciale. Vous pouvez utiliser do_action (‘lol_hook’) où vous voulez, pire scénario, aucune fonction n’est lié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 devons faire est de nous assurer d’utiliser do_action () et / ou add_filter et de documenter. De cette façon, les codeurs et les utilisateurs sauront que c’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 = tableau (
‘post_type’ => ‘attachement’,
‘post_status’ => ‘tout’,
‘orderby’ => ‘Date’,
‘commande’ => «DESC»,
‘posts_per_page’ => dix,
‘champs’ => ‘ids’
);
$ images = new WP_Query ($ args);
$ gallery = ‘[‘ .’gallery ids ="’. imploser (‘,’, $ images). “"’.’] ‘;
echo do_shortcode ($ galerie);

Dans cet exemple, nous créons une requête en nous assurant de ne récupérer que les images, triées par date et limitées à 10 résultats. En utilisant le paramètre fields, 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.

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

$ posts_per_page = apply_filters (‘ma_gallerie / posts_per_page’, 10);

Dans ce cas, vous devrez utiliser la variable $ posts_per_page dans le tableau. Une meilleure solution serait peut-être 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 = tableau (
‘post_type’ => ‘attachement’,
‘post_status’ => ‘tout’,
‘orderby’ => ‘Date’,
‘commande’ => «DESC»,
‘posts_per_page’ => dix,
‘champs’ => ‘ids’
);

$ args = apply_filters (‘my_gallery / query_args’, $ args);

$ images = new WP_Query ($ args);
$ gallery = ‘[‘ .’gallery ids ="’. imploser (‘,’, $ images). “"’.’] ‘;
echo do_shortcode ($ galerie);

C’est tout ce qu’on peut en dire. D’autres plugins peuvent désormais utiliser le hook my_gallery / query_args pour modifier la fonctionnalité des galeries créées.

Une note sur la dénomination: la barre oblique n’est pas du tout nécessaire. Vous pouvez utiliser ‘my_plugin_query_args’ ou tout autre format que vous souhaitez. Je préfère la barre oblique car elle indique clairement le plugin qui le crée et la fonctionnalité qu’elle fournit.

Conclusion

Les crochets 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 prendre soin de ne pas aller trop loin et d’ajouter des crochets dans tous les coins et recoins de votre application.

Au lieu d’ajouter un crochet à la commande, à l’état du post, au post_type et au posts_per_page séparément, j’ai ajouté un filtre qui peut modifier l’ensemble du tableau à la fois. D’autres bits de données peuvent ne pas être judicieux d’ajouter des crochets, c’est à vous de décider.

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

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Это интересно
    Adblock
    detector