{"id":39139,"date":"2020-05-29T00:16:47","date_gmt":"2020-05-29T07:16:47","guid":{"rendered":"https:\/\/kinsta.com\/?p=72202"},"modified":"2023-08-22T11:56:14","modified_gmt":"2023-08-22T10:56:14","slug":"hooks-wordpress","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/","title":{"rendered":"Le Bootcamp des hooks WordPress : Comment utiliser les actions, les filtres et les hooks personnalis\u00e9s"},"content":{"rendered":"<p>Les hooks WordPress sont l&rsquo;un des outils les plus importants \u00e0 avoir dans l&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/blog\/engager-developpeur-wordpress\/\">arsenal d&rsquo;un d\u00e9veloppeur WordPress<\/a>. Ils sont la base du d\u00e9veloppement des extensions et des th\u00e8mes WordPress. Vous pouvez utiliser les nombreux hooks int\u00e9gr\u00e9s \u00e0 WordPress pour vous \u00ab\u00a0accrocher\u00a0\u00bb au c\u0153ur de WordPress avec votre code personnalis\u00e9 et <strong>faire<\/strong> ou <strong>modifier<\/strong> quelque chose.<\/p>\n<p>Il existe deux types de hooks WordPress : <strong>Actions<\/strong> et <strong>Filtres<\/strong>. Les hooks sont si courants que m\u00eame le c\u0153ur de WordPress les utilise lui-m\u00eame largement. WordPress inclut \u00e9galement un moyen pour vous de d\u00e9finir vos propres <strong>hooks personnalis\u00e9s<\/strong> afin que d&rsquo;autres d\u00e9veloppeurs puissent s&rsquo;accrocher \u00e0 votre code.<\/p>\n<p>Apprendre comment fonctionnent les actions, les filtres et les hooks personnalis\u00e9s est essentiel pour ma\u00eetriser le d\u00e9veloppement de WordPress.<\/p>\n<p>La premi\u00e8re moiti\u00e9 de cet article couvre les bases des hooks WordPress et explique leur fonctionnement \u00e0 l&rsquo;aide de multiples exemples. Dans la deuxi\u00e8me moiti\u00e9, vous apprendrez comment les utiliser pour personnaliser WordPress, cr\u00e9er vos propres hooks personnalis\u00e9s et les utiliser pour construire vos propres extensions \u00e9volutives.<\/p>\n<p>Cela vous semble excitant ? Plongeons dans le vif du sujet !<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Que sont les hooks WordPress ?<\/h2>\n<p>Une <a href=\"https:\/\/kinsta.com\/fr\/blog\/dupliquer-page-article-wordpress\/\">page WordPress<\/a> est assembl\u00e9e par des tonnes de fonctions et d&rsquo;interrogations de bases de donn\u00e9es. Le c\u0153ur de WordPress, les extensions et le th\u00e8me travaillent ensemble pour produire les \u00e9l\u00e9ments de la page tels que le texte, les <a href=\"https:\/\/kinsta.com\/fr\/blog\/jpg-vs-jpeg\/\">images<\/a>, les scripts et les styles. Une fois les \u00e9l\u00e9ments assembl\u00e9s, le navigateur les rassemble et affiche la page.<\/p>\n<p>Les hooks de WordPress vous permettent de vous connecter \u00e0 ce processus de construction \u00e0 certains moments et d&rsquo;ex\u00e9cuter votre code personnalis\u00e9. La principale fonction des hooks est de vous permettre de modifier ou d&rsquo;ajouter des fonctionnalit\u00e9s \u00e0 WordPress sans toucher aux <a href=\"https:\/\/kinsta.com\/fr\/docs\/support\/portee-support\/portee-support-wordpress-infogere\/#what-is-wordpress-core\">fichiers du c\u0153ur<\/a>.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/hooks-aideront-etendre-wordpress-propre-code.png\" alt=\"Les hooks vous aideront \u00e0 \u00e9tendre WordPress avec votre propre code\" width=\"1100\" height=\"502\"><figcaption class=\"wp-caption-text\">Les hooks vous aideront \u00e0 \u00e9tendre WordPress avec votre propre code<\/figcaption><\/figure>\n<p>L&rsquo;<a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/\">API d\u2019extension WordPress<\/a> alimente la fonctionnalit\u00e9 des hooks WordPress. Vous utilisez les hooks en appelant certaines fonctions de WordPress appel\u00e9es <strong>Hook Functions <\/strong>\u00e0 des instances sp\u00e9cifiques pendant l&rsquo;ex\u00e9cution de WordPress.<\/p>\n<p>Gr\u00e2ce aux fonctions de hook, vous pouvez regrouper votre code personnalis\u00e9 dans une <strong>fonction de rappel<\/strong> et l\u2019enregistrer avec n&rsquo;importe quel hook. Une fois enregistr\u00e9, ce rappel s&rsquo;ex\u00e9cutera o\u00f9 que soit le hook, vous permettant d&rsquo;augmenter ou de remplacer les fonctions par d\u00e9faut de WordPress.<\/p>\n<p>La position du crochet dans le processus d&rsquo;ex\u00e9cution du code est un facteur important. Vous en apprendrez davantage sur sa signification dans les sections \u00e0 venir.<\/p>\n\n<h3>Deux types de hooks WordPress : Actions et filtres<\/h3>\n<p>WordPress comprend deux types de crochets appel\u00e9s <strong>Actions<\/strong> et <strong>Filtres<\/strong>. Les actions vous permettent de faire quelque chose \u00e0 certains points pr\u00e9d\u00e9finis du temps d&rsquo;ex\u00e9cution de WordPress, tandis que les filtres vous permettent de modifier toute donn\u00e9e trait\u00e9e par WordPress et de la <code><strong>return<\/strong><\/code>.<\/p>\n<p>Les actions sont d\u00e9finies dans le code WordPress comme suit :<\/p>\n<pre><code class=\"language-php\">do_action( 'action_name', [optional_arguments] );<\/code><\/pre>\n<p>La cha\u00eene <code><strong>action_name<\/strong><\/code> est le nom de l&rsquo;action. Vous pouvez sp\u00e9cifier la variable <code><strong>[optional_arguments]<\/strong><\/code> pour passer des arguments suppl\u00e9mentaires \u00e0 la fonction de rappel. Si ce champ n&rsquo;est pas sp\u00e9cifi\u00e9, alors sa valeur par d\u00e9faut sera vide.<\/p>\n<p><strong>Exemple :<\/strong> L&rsquo;action <code><strong>do_action( 'wp_head' )<\/strong><\/code> peut \u00eatre accroch\u00e9e pour ex\u00e9cuter un code personnalis\u00e9 chaque fois que WordPress traite l&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/blog\/ajouter-code-wordpress-header-footer\/\">en-t\u00eate du site<\/a>. Cette action n&rsquo;a pas d&rsquo;autres arguments.<\/p>\n<p>Les filtres sont d\u00e9finis comme suit dans le code WordPress<\/p>\n<pre><code class=\"language-php\">apply_filters( 'filter_name', 'value_to_be_filtered', [optional_arguments] );<\/code><\/pre>\n<p>La cha\u00eene <code><strong>filter_name<\/strong><\/code> est le nom du filtre, la variable <code><strong>value_to_be_filtered<\/strong><\/code> est la valeur qui doit \u00eatre filtr\u00e9e et retourn\u00e9e, et la variable <code><strong>[optional_arguments]<\/strong><\/code> peut passer des arguments suppl\u00e9mentaires, tout comme pour les actions.<\/p>\n<p><strong>Exemple :<\/strong> Le filtre <code><strong>apply_filters( 'admin_footer_text' , string $text )<\/strong><\/code> peut \u00eatre accroch\u00e9e pour modifier le texte affich\u00e9 dans le pied de page de l&rsquo;administration. Depuis WordPress 5.4, sa valeur par d\u00e9faut affichera la phrase <code><em>Merci de faire de <\/em><a href=\"https:\/\/fr.wordpress.org\/\"><em>WordPress<\/em><\/a><em> votre outil de cr\u00e9ation<\/em><\/code> dans le pied de page de la zone d&rsquo;administration<em>.<\/em><\/p>\n<p>Vous apprendrez plus tard \u00e0 vous accrocher aux actions et aux filtres gr\u00e2ce \u00e0 de nombreux exemples tir\u00e9s du c\u0153ur de WordPress.<\/p>\n<p>Une fois accroch\u00e9, vous pouvez diriger votre code pour <strong>faire<\/strong> ou <strong>personnaliser<\/strong> quelque chose sur votre site. Par exemple, vous pouvez utiliser des hooks pour envoyer un <a href=\"https:\/\/kinsta.com\/fr\/blog\/meilleures-pratiques-email-marketing\/#email-marketing-platform\">e-mail automatis\u00e9<\/a> apr\u00e8s avoir publi\u00e9 un article, ou charger des <a href=\"https:\/\/kinsta.com\/fr\/blog\/theme-enfant-wordpress\/#the-files-in-a-wordpress-child-theme\">feuilles de style personnalis\u00e9es<\/a> pour modifier l&rsquo;apparence de votre site.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/hooks-wordpress-aident-interagir-site-web-modifier.png\" alt=\"Les hooks WordPress vous aident \u00e0 interagir avec votre site web ou \u00e0 le modifier\" width=\"1100\" height=\"600\"><figcaption class=\"wp-caption-text\">Les hooks WordPress vous aident \u00e0 interagir avec votre site web ou \u00e0 le modifier<\/figcaption><\/figure>\n<p>La fa\u00e7on la plus simple de comprendre les hook est d&rsquo;imaginer votre <a href=\"https:\/\/kinsta.com\/fr\/blog\/exemples-de-sites-wordpress\/\">site WordPress<\/a> comme la construction d&rsquo;une maison.<\/p>\n<p>Les hooks s&rsquo;apparentent \u00e0 l&rsquo;utilisation d&rsquo;une grue pour d\u00e9placer des \u00e9l\u00e9ments de construction d&rsquo;un c\u00f4t\u00e9 \u00e0 l&rsquo;autre. Les \u00e9l\u00e9ments transf\u00e9r\u00e9s sont <strong>les fonctions de rappel<\/strong> qui comprennent votre <a href=\"https:\/\/kinsta.com\/fr\/blog\/modifier-code-wordpress\/\">code personnalis\u00e9<\/a>. Ces \u00e9l\u00e9ments (ou fonctions) peuvent vous aider \u00e0 construire ou \u00e0 modifier la maison.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/exemple-hook-action-wp_head-wordpress.png\" alt=\"Exemple de hook dans l'action \u00ab\u00a0wp_head\u00a0\u00bb de WordPress\" width=\"1100\" height=\"636\"><figcaption class=\"wp-caption-text\">Exemple de hook dans l&rsquo;action \u00ab\u00a0wp_head\u00a0\u00bb de WordPress<\/figcaption><\/figure>\n<p>Les fonctions de rappel (callback) peuvent \u00eatre des fonctions PHP normales, des fonctions WordPress par d\u00e9faut ou des fonctions personnalis\u00e9es d\u00e9finies par vous.<\/p>\n<p>Nous ne pouvons transporter certains articles que sur des supports sp\u00e9cifiques attach\u00e9s \u00e0 des hooks particuliers. Ainsi, les actions ne peuvent \u00eatre accroch\u00e9es qu&rsquo;avec des <strong>fonctions d&rsquo;action<\/strong>. De m\u00eame, les filtres ne peuvent \u00eatre accroch\u00e9s qu&rsquo;avec des <strong>fonctions de filtre<\/strong>.<\/p>\n<p>Alors qu&rsquo;il est fastidieux de changer les hooks et les supports d&rsquo;une grue, WordPress le rend super facile en incluant <a href=\"https:\/\/adambrown.info\/p\/wp_hooks\">plus de 2 200 types de hooks par d\u00e9faut<\/a>.<\/p>\n<figure style=\"width: 900px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/wordpress-5-1-plus-2200-hooks-natifs.png\" alt=\"WordPress 5.1 a plus de 2200 hooks natifs (Source : Adam Brown)\" width=\"900\" height=\"357\"><figcaption class=\"wp-caption-text\">WordPress 5.1 a plus de 2200 hooks natifs (Source : Adam Brown)<\/figcaption><\/figure>\n<p>Vous pouvez trouver des hooks r\u00e9partis dans le c\u0153ur de WordPress, vous permettant de taper \u00e0 l&rsquo;endroit exact o\u00f9 vous voulez vous accrocher et d&rsquo;ex\u00e9cuter votre code personnalis\u00e9.<\/p>\n\n<h2>Hooks vs Actions vs Filtres<\/h2>\n<p>Selon le <a href=\"https:\/\/developer.wordpress.org\/plugins\/hooks\/\">manuel des extensions de WordPress<\/a> :<\/p>\n<blockquote><p>\u00ab\u00a0Les hooks sont un moyen pour un morceau de code d&rsquo;interagir\u00a0\/\u00a0modifier un autre morceau de code&#8230; Il existe deux types de hooks : Actions et Filtres.\u00a0\u00bb<\/p><\/blockquote>\n<p>Il y a une incoh\u00e9rence g\u00e9n\u00e9ralis\u00e9e dans la fa\u00e7on dont les termes <strong>Hook<\/strong>, <strong>Action<\/strong> et <strong>Filtre<\/strong> sont utilis\u00e9s. Quelques tutoriels et guides les confondent avec les fonctions qui leur sont associ\u00e9es. Cette confusion est due en grande partie \u00e0 la nature complexe du fonctionnement des hooks.<\/p>\n<p>M\u00eame si vous regardez attentivement dans le c\u0153ur de WordPress, vous verrez qu&rsquo;il n&rsquo;y a pas beaucoup de diff\u00e9rence entre l&rsquo;ajout d&rsquo;actions et de filtres. Voici le <a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/5.4\/src\/wp-includes\/plugin.php#L403\">code source de la fonction add_action()<\/a> du fichier <code><strong>wp-includes\/plugin.php<\/strong><\/code> :<\/p>\n<pre><code class=\"language-php\">function add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {\u00a0 \u00a0 \u00a0 \n    return add_filter( $tag, $function_to_add, $priority, $accepted_args );\n}<\/code><\/pre>\n<p>La fonction <code><strong>add_action()<\/strong><\/code> appelle simplement la fonction <code><strong>add_filter()<\/strong><\/code> et retourne sa valeur. Pourquoi ? Parce qu&rsquo;elles fonctionnent toutes deux fondamentalement de la m\u00eame mani\u00e8re, \u00e0 une diff\u00e9rence pr\u00e8s.<\/p>\n<p>La fonction <code><strong>apply_filters()<\/strong><\/code> retourne une valeur qui peut modifier les types de donn\u00e9es existants, tandis que la fonction <code><strong>do_action()<\/strong><\/code> ne renvoie rien (<a href=\"https:\/\/www.php.net\/manual\/en\/functions.returning-values.php\">valeur NULL en PHP)<\/a>.<\/p>\n<p>Si vous \u00eates encore confus, ne vous inqui\u00e9tez pas ! Une fois que vous aurez termin\u00e9 la premi\u00e8re moiti\u00e9 de cet article, tout sera clair. Nous nous en tiendrons \u00e0 la terminologie officielle du Codex WordPress car elle est claire, pr\u00e9cise et universelle.<\/p>\n<p>Pour l&rsquo;instant, familiarisez-vous avec la routine du hook pr\u00e9sent\u00e9e ci-dessous.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/routine-du-hook.png\" alt=\"La routine du hook : Hooks, fonctions de hook et fonctions de rappel\" width=\"1100\" height=\"1161\"><figcaption class=\"wp-caption-text\">La routine du hook : Hooks, fonctions de hook et fonctions de rappel<\/figcaption><\/figure>\n<p>Faisons la part des choses entre les actions et les hooks.<\/p>\n<table>\n<tbody>\n<tr>\n<td style=\"text-align: center\" colspan=\"2\"><strong>WordPress Hooks<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center\"><strong>Actions<\/strong><\/td>\n<td style=\"text-align: center\"><strong>Filters<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Les actions sont utilis\u00e9es pour ex\u00e9cuter des fonctions personnalis\u00e9es \u00e0 un moment pr\u00e9cis de l&rsquo;ex\u00e9cution du c\u0153ur de WordPress.<\/td>\n<td>Les filtres sont utilis\u00e9s pour modifier ou personnaliser les donn\u00e9es utilis\u00e9es par d&rsquo;autres fonctions.<\/td>\n<\/tr>\n<tr>\n<td>Les actions sont d\u00e9finies\u00a0\/\u00a0cr\u00e9\u00e9es par la fonction <code><strong>do_action( 'action_name' )<\/strong><\/code> dans le code de WordPress.<\/td>\n<td>Les filtres sont d\u00e9finis\u00a0\/\u00a0cr\u00e9\u00e9s par la fonction <code><strong>apply_filters( 'filter_name', 'value_to_be_filtered' )<\/strong><\/code> dans le code de WordPress.<\/td>\n<\/tr>\n<tr>\n<td>Les actions sont \u00e9galement appel\u00e9es <strong>Action hooks<\/strong>.<\/td>\n<td>Les filtres sont \u00e9galement appel\u00e9s <strong>Filter hooks<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td>Les actions ne peuvent \u00eatre connect\u00e9es qu&rsquo;\u00e0 des fonctions d&rsquo;action. Par exemple, <code><strong>add_action()<\/strong><\/code>, <code><strong>remove_action()<\/strong><\/code>.<\/td>\n<td>Les filtres ne peuvent \u00eatre accroch\u00e9s qu&rsquo;avec des fonctions de filtre. Par exemple, <code><strong>add_filter()<\/strong><\/code>, <code><strong>remove_filter()<\/strong><\/code>.<\/td>\n<\/tr>\n<tr>\n<td>Les fonctions d&rsquo;action n&rsquo;ont pas besoin de faire passer d&rsquo;arguments \u00e0 leurs fonctions de rappel.<\/td>\n<td>Les fonctions de filtre doivent transmettre au moins un argument \u00e0 leurs fonctions de rappel.<\/td>\n<\/tr>\n<tr>\n<td>Les fonctions d&rsquo;action peuvent effectuer tout type de t\u00e2che, y compris modifier le comportement du fonctionnement de WordPress.<\/td>\n<td>Les fonctions de filtre n&rsquo;existent que pour modifier les donn\u00e9es qui leur sont transmises par les filtres.<\/td>\n<\/tr>\n<tr>\n<td>Les fonctions d&rsquo;action ne doivent rien <code><strong>return<\/strong><\/code>. Cependant, elles peuvent faire <code><strong>echo<\/strong><\/code> \u00e0 la sortie ou interagir avec la base de donn\u00e9es.<\/td>\n<td>Les fonctions de filtrage doivent <code><strong>return<\/strong><\/code> leurs modifications en sortie. M\u00eame si une fonction de filtre ne change rien, elle doit toujours <code><strong>return<\/strong><\/code> l&rsquo;entr\u00e9e non modifi\u00e9e.<\/td>\n<\/tr>\n<tr>\n<td>Les actions peuvent ex\u00e9cuter presque tout, tant que le code est valide.<\/td>\n<td>Les filtres doivent fonctionner de mani\u00e8re isol\u00e9e, afin de ne pas avoir d&rsquo;effets secondaires involontaires.<\/td>\n<\/tr>\n<tr>\n<td><strong>R\u00e9sum\u00e9 : <\/strong>une action interrompt le processus normal d&rsquo;ex\u00e9cution du code pour faire quelque chose avec les informations qu&rsquo;elle re\u00e7oit, mais ne retourne rien en retour, puis sort.<\/td>\n<td><strong> R\u00e9sum\u00e9 : <\/strong>un filtre modifie l&rsquo;information qu&rsquo;il re\u00e7oit, la renvoie \u00e0 la fonction d&rsquo;appel, et d&rsquo;autres fonctions peuvent utiliser la valeur qu&rsquo;il retourne.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Parfois, vous pouvez utiliser une action ou un filtre pour atteindre le m\u00eame objectif. Par exemple, si vous souhaitez modifier le texte d&rsquo;un article, vous pouvez enregistrer une fonction de rappel avec l&rsquo;action <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/publish_post\">publish_post<\/a> et modifier le contenu de l\u2019article lors de son enregistrement dans la <a href=\"https:\/\/kinsta.com\/fr\/blog\/bases-de-donnees-wordpress\/\">base de donn\u00e9es<\/a>.<\/p>\n<pre><code class=\"language-php\">\/\/ define the callback function to change the text\nfunction change_text_callback() { \n    \/\/ add the code to change text here\n}\n\n\/\/ hook in to the 'publish_post' action with the add_action() function\nadd_action( 'publish_post', 'change_text_callback' );<\/code><\/pre>\n<p>Vous pouvez \u00e9galement enregistrer une autre fonction de rappel avec le filtre <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/the_content\/\">the_content<\/a> pour modifier le contenu de l&rsquo;article avant qu&rsquo;il ne soit affich\u00e9 dans le navigateur.<\/p>\n<pre><code class=\"language-php\">\/\/ define the callback function to modify the text\nfunction change_text_another_callback( $content ) { \n    \/\/ add the code to change text here and then return it \n    return $filtered_content;\n}\n\n\/\/ hook in to 'the_content' filter with the add_filter() function\nadd_filter( 'the_content', 'change_text_another_callback');<\/code><\/pre>\n<p>Deux approches diff\u00e9rentes avec le m\u00eame r\u00e9sultat. Savoir quand utiliser l&rsquo;une plut\u00f4t que l&rsquo;autre est la cl\u00e9 pour \u00eatre un <a href=\"https:\/\/kinsta.com\/fr\/blog\/salaire-developpeur-wordpress\/\">bon d\u00e9veloppeur WordPress<\/a>.<\/p>\n<h2>Comment fonctionnent les hooks WordPress ?<\/h2>\n<p>L&rsquo;exemple de la maison \u00e9tait assez simple pour comprendre le fonctionnement de base des hooks, mais il ne rend pas compte de la complexit\u00e9 de leur fonctionnement. Il s&rsquo;agit surtout des concepts de position et de sp\u00e9cificit\u00e9 des hooks.<\/p>\n<p>Un meilleur exemple serait d&rsquo;imaginer le traitement d&rsquo;une page web WordPress comme l&rsquo;assemblage d&rsquo;une voiture. Contrairement \u00e0 la fabrication d&rsquo;une voiture, qui prend du temps, l&rsquo;assemblage d&rsquo;une page web est presque instantan\u00e9.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/assembler-page-web-comme-assembler-voiture.png\" alt=\"Assembler une page web, c'est comme assembler une voiture\" width=\"1100\" height=\"1223\"><figcaption class=\"wp-caption-text\">Assembler une page web, c&rsquo;est comme assembler une voiture<\/figcaption><\/figure>\n<p>Tout comme une voiture est assembl\u00e9e pi\u00e8ce par pi\u00e8ce dans une cha\u00eene de montage moderne, une page web WordPress est assembl\u00e9e \u00e9l\u00e9ment par \u00e9l\u00e9ment par le serveur et le client.<\/p>\n<p>Le c\u0153ur de WordPress est comme le moteur de la voiture, le ch\u00e2ssis et d&rsquo;autres \u00e9l\u00e9ments essentiels, qui alimentent la fonctionnalit\u00e9 du \u00ab\u00a0c\u0153ur\u00a0\u00bb du site web.<\/p>\n<p>Vous pouvez avoir un site web fonctionnel avec seulement le c\u0153ur de WordPress, mais o\u00f9 est le plaisir dans tout cela ? Vous devez ajouter des fonctionnalit\u00e9s int\u00e9ressantes au site. C&rsquo;est l\u00e0 qu&rsquo;interviennent les <a href=\"https:\/\/kinsta.com\/fr\/sujets\/extensions-wordpress\/\">extensions<\/a> et les <a href=\"https:\/\/kinsta.com\/fr\/blog\/theme-wordpress-plus-rapide\/\">th\u00e8mes WordPress<\/a>, qui font tous deux largement appel aux hooks.<\/p>\n<p>Dans l&rsquo;exemple ci-dessus, chaque station num\u00e9rot\u00e9e est comme un hook \u00e0 l&rsquo;int\u00e9rieur du c\u0153ur de WordPress. Il existe deux types de stations, comme les actions et les filtres. Chaque station comprend un type de cr\u00e9neau sp\u00e9cifique qui n&rsquo;accepte que certains outils, comme les fonctions d&rsquo;action et les fonctions de filtre.<\/p>\n<p>Toutes les stations sont plac\u00e9es \u00e0 intervalles fr\u00e9quents pour des raisons de modularit\u00e9 et d&rsquo;efficacit\u00e9.<\/p>\n<p>Selon les exigences d&rsquo;un poste particulier, nous pouvons attacher (ou accrocher) l&rsquo;outil le plus appropri\u00e9 pour le travail \u00e0 ce poste sp\u00e9cifique. Ces outils sont comme les fonctions de rappel utilis\u00e9es pour interagir avec ou modifier WordPress.<\/p>\n<p>Certains outils peuvent modifier consid\u00e9rablement le fonctionnement de la voiture, un peu comme les rappels enregistr\u00e9s pour les actions. D&rsquo;autres outils ne sont utilis\u00e9s que pour personnaliser l&rsquo;apparence de la voiture, comme les rappels enregistr\u00e9s pour les filtres.<\/p>\n<p>Il est essentiel d&rsquo;utiliser les bons outils dans les bonnes stations pour construire une voiture de premier ordre. De la m\u00eame mani\u00e8re, les hooks nous aident \u00e0 personnaliser WordPress en fonction de nos besoins particuliers.<\/p>\n<p>Si vous \u00e9tendez cette analogie, les extensions sont comme l&rsquo;ajout de fonctions automobiles utiles telles que les airbags, la console de divertissement, le syst\u00e8me de t\u00e9l\u00e9commande sans cl\u00e9, etc. Les th\u00e8mes sont analogues \u00e0 la personnalisation de la partie visuelle de la voiture, comme la conception g\u00e9n\u00e9rale, la peinture, les jantes, etc. (voici comment <a href=\"https:\/\/kinsta.com\/fr\/blog\/comment-personnaliser-theme-wordpress\/\">personnaliser votre th\u00e8me WordPress<\/a>).<\/p>\n<h2>O\u00f9 enregistrer les hooks et leurs fonctions ?<\/h2>\n<p>Il y a deux fa\u00e7ons recommand\u00e9es d&rsquo;ajouter des hooks dans WordPress :<\/p>\n<ul>\n<li><strong>Extensions<\/strong> <strong>:<\/strong> Cr\u00e9ez votre propre extension et ajoutez-y tout votre code personnalis\u00e9.<\/li>\n<li><strong>Th\u00e8mes enfants :<\/strong> Enregistrez les fonctions de hook et de rappel dans le <a href=\"https:\/\/kinsta.com\/fr\/blog\/theme-enfant-wordpress\/\">fichier <code><strong>functions.php<\/strong><\/code> de votre th\u00e8me enfant<\/a>.<\/li>\n<\/ul>\n<p>Pour ce tutoriel, commen\u00e7ons par cr\u00e9er une extension. Pour ce faire, cr\u00e9ez un nouveau dossier dans votre r\u00e9pertoire <code><strong>\/wp-content\/plugins\/<\/strong><\/code>.<\/p>\n<p>Je vais nommer mon extension <code><strong>salhooks<\/strong><\/code>, mais vous pouvez lui donner le nom que vous voulez. Conform\u00e9ment aux directives de WordPress, vous devez cr\u00e9er un fichier PHP portant le m\u00eame nom (<code><strong>salhooks.php<\/strong><\/code>) dans le r\u00e9pertoire de votre extension.<\/p>\n<p>Ajoutez les champs d&rsquo;en-t\u00eate suivants dans le fichier de votre extension pour l&rsquo;enregistrer avec WordPress. Vous pouvez en savoir plus sur les <a href=\"https:\/\/developer.wordpress.org\/plugins\/plugin-basics\/header-requirements\/\">exigences relatives aux en-t\u00eates d\u2019extension<\/a> dans le Codex de WordPress.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/*\nPlugin Name:  Salhooks\nVersion    :  1.0\nDescription:  Demonstrating WordPress Hooks (Actions and Filters) with multiple examples.\nAuthor     :  Salman Ravoof\nAuthor URI :  https:\/\/www.salmanravoof.com\/\nLicense    :  GPLv2 or later\nLicense URI:  https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\nText Domain:  salhooks\n*\/\n\n\/\/=================================================\n\/\/ Security: Abort if this file is called directly\n\/\/=================================================\nif ( !defined('ABSPATH') ) { \n    die;\n}<\/code><\/pre>\n<p>Enregistrez ce fichier, puis activez l\u2019extension dans votre <a href=\"https:\/\/kinsta.com\/fr\/blog\/tableau-de-bord-admin-wordpress\/\">tableau de bord WordPress<\/a>. Je vais utiliser cette extension dans une <a href=\"https:\/\/kinsta.com\/fr\/blog\/installer-wordpress-localement\/\">installation locale de WordPress<\/a> pour d\u00e9montrer comment fonctionnent les hooks.<\/p>\n<p>Vous pouvez \u00e9galement modifier directement les fichiers du c\u0153ur de WordPress pour enregistrer les hooks. Cependant, ce n&rsquo;est pas recommand\u00e9 car tout votre code personnalis\u00e9 sera \u00e9cras\u00e9 chaque fois <a href=\"https:\/\/kinsta.com\/fr\/blog\/mises-a-jour-wordpress-automatiques\/\">que vous mettrez \u00e0 jour WordPress<\/a>. Vous ne devriez pas ajouter de hooks dans votre th\u00e8me parent pour la m\u00eame raison.<\/p>\n<h2>Utilisation des hooks WordPress<\/h2>\n<p>Un hook WordPress ne fait rien en soi. Il se contente de rester dans le code, en attendant qu&rsquo;une fonction de hook l&rsquo;active. Pour utiliser un hook, vous devez appeler au moins 2 autres fonctions.<\/p>\n<p>Tout d&rsquo;abord, vous devez enregistrer le hook avec une fonction de hook et y faire r\u00e9f\u00e9rence \u00e0 une fonction de rappel. Ensuite, vous devez d\u00e9finir la fonction de rappel que vous avez mentionn\u00e9e pr\u00e9c\u00e9demment dans la fonction de hook. WordPress ex\u00e9cutera cette fonction de rappel \u00e0 chaque fois que le hook est d\u00e9clench\u00e9.<\/p>\n<p>L&rsquo;ordre dans lequel vous d\u00e9finissez ces fonctions n&rsquo;a pas d&rsquo;importance, mais il est bon de les placer \u00e0 proximit\u00e9 les unes des autres.<\/p>\n<p>Les actions et les filtres ont des fonctions d&rsquo;accrochage distinctes. Dor\u00e9navant, nous les appellerons <strong>fonctions d&rsquo;action<\/strong> et <strong>fonctions de filtre<\/strong>. Comme vous le verrez, elles ont leur propre syntaxe et leurs propres exigences en mati\u00e8re de param\u00e8tres.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"3\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>Accrocher une action<\/h3>\n<p>Les actions permettent d&rsquo;ex\u00e9cuter votre code personnalis\u00e9 \u00e0 un moment particulier de l&rsquo;ex\u00e9cution du c\u0153ur, des extensions ou des th\u00e8mes WordPress.<\/p>\n<h4>La fonction d&rsquo;action add_action()<\/h4>\n<p>Vous pouvez enregistrer une fonction de rappel avec une action en suivant ces \u00e9tapes :<\/p>\n<ol>\n<li>D\u00e9finissez une <strong>fonction de rappel<\/strong> avec votre code personnalis\u00e9 \u00e0 l&rsquo;int\u00e9rieur. Cette fonction de rappel sera ex\u00e9cut\u00e9e lorsque toute action \u00e0 laquelle elle est enregistr\u00e9e est d\u00e9clench\u00e9e pendant l&rsquo;ex\u00e9cution du code de WordPress.<\/li>\n<li>Accrochez votre fonction de rappel \u00e0 l&rsquo;action que vous voulez avec la fonction <code><strong>add_action()<\/strong><\/code>. Comme le pr\u00e9voit le Codex WordPress, la fonction <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_action\/\">add_action()<\/a> doit passer au moins deux param\u00e8tres :\n<ol>\n<li style=\"list-style-type: none\">\n<ul>\n<li>Nom de l&rsquo;action \u00e0 laquelle s&rsquo;accrocher.<\/li>\n<li>Nom de la fonction de rappel qui sera ex\u00e9cut\u00e9e lorsque l&rsquo;action est d\u00e9clench\u00e9e.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<\/li>\n<li>La fonction <code><strong>add_action()<\/strong><\/code> accepte \u00e9galement deux param\u00e8tres optionnels pour fixer la <code><strong>priority<\/strong><\/code> et le <code><strong>number of arguments<\/strong><\/code>. Nous discuterons de ces deux param\u00e8tres plus tard.<\/li>\n<\/ol>\n<p>Il est bon de nommer vos param\u00e8tres de fonction de rappel aussi pr\u00e8s que possible des param\u00e8tres pass\u00e9s par la fonction du hook.<\/p>\n<p>Voyons un exemple d&rsquo;utilisation de la fonction <code><strong>add_action()<\/strong><\/code>.<\/p>\n<pre><code class=\"language-php\">\/\/ define the callback function, the arguments are optional\nfunction example_callback( $arg1, $arg2 ) {\n\u00a0 \u00a0 \/\/ make your code do something with the arguments\n}\n\n\/\/ hook the callback function to the 'example_action'\nadd_action( 'example_action', 'example_callback', [priority], [no_of_args] );\n\n\/\/ 'priority' and 'number of arguments' are optional parameters<\/code><\/pre>\n<h4>Exemple d&rsquo;accrochage d&rsquo;une action<\/h4>\n<p>WordPress comprend une action int\u00e9gr\u00e9e appel\u00e9e <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/init\/\">init<\/a> qui se d\u00e9clenche apr\u00e8s que WordPress a fini de charger et d&rsquo;authentifier l&rsquo;utilisateur, mais avant que les en-t\u00eates ne soient envoy\u00e9s. De nombreuses extensions utilisent ce hook comme point de d\u00e9part pour instancier leur code car presque toutes les principales fonctionnalit\u00e9s de WordPress ont fini de se charger au moment o\u00f9 WordPress ex\u00e9cute cette action.<\/p>\n<p>WordPress a une action similaire appel\u00e9e <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/admin_init\/\">admin_init<\/a>. Elle se d\u00e9clenche pendant que l&rsquo;\u00e9cran d&rsquo;administration est en cours d&rsquo;initialisation, tandis que l&rsquo;action <code><strong>init<\/strong><\/code> ne se d\u00e9clenche qu&rsquo;une fois que WordPress a fini de se charger.<\/p>\n<p>Lan\u00e7ons un code personnalis\u00e9 pour faire <code><strong>echo<\/strong><\/code> \u00e0 un simple message pendant l&rsquo;ex\u00e9cution d&rsquo;une action <code><strong>init<\/strong><\/code>. Voici comment faire :<\/p>\n<pre><code class=\"language-php\">function custom_callback_function(){\n\u00a0 \u00a0 \/\/ add your custom code here to do something\n\u00a0 \u00a0 echo 'I will be fired on WordPress initialization';\n}\nadd_action( 'init', 'custom_callback_function' );<\/code><\/pre>\n<p>Vous pouvez voir l&rsquo;\u00e9cho du message dans le coin sup\u00e9rieur gauche de mon <a href=\"https:\/\/kinsta.com\/fr\/blog\/installer-wordpress-localement\/\">installation WordPress locale<\/a>.<\/p>\n<figure id=\"attachment_72244\" aria-describedby=\"caption-attachment-72244\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72244 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/pas-tres-joli-bon-debut.jpg\" alt=\"Pas tr\u00e8s joli, mais c'est un bon d\u00e9but !\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72244\" class=\"wp-caption-text\">Pas tr\u00e8s joli, mais c&rsquo;est un bon d\u00e9but !<\/figcaption><\/figure>\n<h4>Trouver des actions prises en charge par WordPress<\/h4>\n<p>WordPress inclut des actions \u00e0 chaque fois qu&rsquo;il fait quelque chose, comme un <a href=\"https:\/\/kinsta.com\/fr\/blog\/url-connexion-wordpress\/\">utilisateur qui se connecte<\/a> ou qui <a href=\"https:\/\/kinsta.com\/fr\/blog\/erreur-publication-programmee-echouee-wordpress\/\">publie un nouvel article<\/a>. Vous pouvez trouver une liste compl\u00e8te de toutes les actions ex\u00e9cut\u00e9es par WordPress sur la page <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\">Plugin API\/Action Reference<\/a>.<\/p>\n<figure id=\"attachment_72247\" aria-describedby=\"caption-attachment-72247\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72247 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/action-presque-chaque-utilisation.png\" alt=\"Il y a une action pour presque chaque utilisation\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72247\" class=\"wp-caption-text\">Il y a une action pour presque chaque utilisation<\/figcaption><\/figure>\n<p>Le Codex a divis\u00e9 toutes les actions qui y sont \u00e9num\u00e9r\u00e9es en diff\u00e9rentes cat\u00e9gories et les a class\u00e9es de la premi\u00e8re \u00e0 la derni\u00e8re dans l&rsquo;ordre d&rsquo;ex\u00e9cution de WordPress.<\/p>\n<p>Dans la plupart des cas, beaucoup de ces actions ne feront rien car rien n&rsquo;y est accroch\u00e9. Mais si vous en avez besoin, elles sont l\u00e0 pour que vous vous y accrochiez.<\/p>\n<p>Vous vous sentez un peu d\u00e9pass\u00e9 par toutes ces actions ? C&rsquo;est naturel. Au fur et \u00e0 mesure que vous gagnerez en exp\u00e9rience et que vous parcourrez le code source du c\u0153ur de WordPress, il vous sera plus facile de trouver le hook parfait pour vos besoins. Il vous suffit de faire une recherche sur le terme \u00ab\u00a0<strong>do_action\u00a0<\/strong>\u00bb et vous trouverez de nombreuses actions auxquelles vous pourrez vous accrocher.<\/p>\n<h4>Param\u00e8tres suppl\u00e9mentaires pour add_action()<\/h4>\n<p>La fonction <code><strong>add_action()<\/strong><\/code> peut accepter deux autres param\u00e8tres : l&rsquo;un pour fixer la <code><strong>priority<\/strong><\/code> et l&rsquo;autre pour fixer le <code><strong>number of arguments<\/strong><\/code>. Bien qu&rsquo;ils soient optionnels, s&rsquo;ils sont utilis\u00e9s correctement, ils peuvent \u00eatre tr\u00e8s utiles.<\/p>\n<h5>Priority<\/h5>\n<p>Le premier param\u00e8tre suppl\u00e9mentaire pris en charge par la fonction <code><strong>add_action()<\/strong><\/code> fixe la <code><strong>priority<\/strong><\/code>. Ce param\u00e8tre ne peut \u00eatre qu&rsquo;un entier positif. Plus le num\u00e9ro de priorit\u00e9 est bas, plus la fonction sera ex\u00e9cut\u00e9e t\u00f4t. Sa valeur par d\u00e9faut est 10 si vous ne le sp\u00e9cifiez pas.<\/p>\n<p>Pour voir comment cela fonctionne, enregistrons trois fonctions de rappel \u00e0 l&rsquo;action <code><strong>init<\/strong><\/code>, mais chacune avec des priorit\u00e9s diff\u00e9rentes.<\/p>\n<pre><code class=\"language-php\">\/\/ priority is set to 9, which is lower than 10, hence it ranks higher\nadd_action( 'init', 'i_am_high_priority', 9 );\n\n\/\/ if no priority is set, the default value of 10 will be used\nadd_action( 'init', 'i_am_default_priority');\n\n\/\/ priority is set to 11, which is higher than 11, hence it ranks lower\nadd_action( 'init', 'i_am_low_priority', 11 );<\/code><\/pre>\n<p>Dans les exemples ci-dessus, la fonction de rappel ayant le num\u00e9ro de priorit\u00e9 le plus bas sera ex\u00e9cut\u00e9e en premier et celle ayant le num\u00e9ro le plus \u00e9lev\u00e9 sera ex\u00e9cut\u00e9e en dernier. Si leurs priorit\u00e9s sont les m\u00eames, elles seront ex\u00e9cut\u00e9es dans l&rsquo;ordre dans lequel vous les avez enregistr\u00e9es.<\/p>\n<p>La priorit\u00e9 joue un r\u00f4le important lorsqu&rsquo;un m\u00eame hook peut avoir plusieurs fonctions de rappel enregistr\u00e9es avec lui. Pour \u00e9viter les r\u00e9sultats inattendus, vous pouvez d\u00e9finir une priorit\u00e9 pour chaque fonction de rappel, afin qu&rsquo;elles se d\u00e9clenchent dans l&rsquo;ordre que vous souhaitez.<\/p>\n<h5>Number of arguments<\/h5>\n<p>Par d\u00e9faut, toute fonction de rappel enregistr\u00e9e par la fonction <code><strong>add_action()<\/strong><\/code> ne recevra qu&rsquo;un seul argument. Cependant, il peut arriver que vous deviez transmettre des donn\u00e9es suppl\u00e9mentaires \u00e0 la fonction de rappel.<\/p>\n<p>C&rsquo;est pourquoi la fonction <code><strong>add_action()<\/strong><\/code> accepte un param\u00e8tre optionnel pour fixer le nombre d&rsquo;arguments.<\/p>\n<p>L&rsquo;action <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/comment_post\/\">comment_postt<\/a> en est un bon exemple. Cette action s&rsquo;ex\u00e9cute imm\u00e9diatement apr\u00e8s que <a href=\"https:\/\/kinsta.com\/fr\/blog\/plugins-commentaires-wordpress\/\">WordPress a ajout\u00e9 un commentaire \u00e0 la base de donn\u00e9es<\/a>. Si vous ne d\u00e9finissez pas le param\u00e8tre du <strong><code>number of arguments<\/code><\/strong>, il ne transmettra qu&rsquo;une seule valeur \u00e0 la fonction de rappel, qui dans ce cas sera <code><strong>comment_ID<\/strong><\/code>.<\/p>\n<pre><code class=\"language-php\">\/\/ register the hook with 'priority' and 'number of arguments' parameters\nadd_action( 'comment_post', 'show_message_function', 10, 3 );\n\n\/\/ define the callback function\nfunction show_message_function( $comment_ID, $comment_approved, $commentdata ) {\n\u00a0 \u00a0 \/\/ check whether a comment is approved with the second parameter\n\u00a0 \u00a0 if( 1 === $comment_approved ){\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ runs the code only if the comment is approved\n\u00a0 \u00a0 }\n}<\/code><\/pre>\n<p>Si vous fixez le param\u00e8tre <strong>number of arguments<\/strong> \u00e0 <strong>3<\/strong> comme dans l&rsquo;exemple ci-dessus, la fonction d&rsquo;action passera trois valeurs : <code><strong>comment_ID<\/strong><\/code>, <code><strong>comment_approved<\/strong><\/code>, et <code><strong>commentdata<\/strong><\/code>.<\/p>\n<p>WordPress d\u00e9finit la valeur de <code><strong>comment_approved<\/strong><\/code> \u00e0 <strong>1<\/strong> pour les commentaires approuv\u00e9s, \u00e0 <strong>0<\/strong> si non approuv\u00e9s, et \u00e0 \u00ab\u00a0<strong>spam\u00a0\u00bb<\/strong> si le <a href=\"https:\/\/kinsta.com\/fr\/blog\/spams-commentaires-wordpress\/\">commentaire est marqu\u00e9 comme ind\u00e9sirable<\/a>.<\/p>\n<p>La variable <code><strong>commentdata<\/strong><\/code> est un tableau qui comprend toutes les donn\u00e9es du commentaire, comme le nom de l&rsquo;auteur du commentaire, son adresse de messagerie, son site web et le contenu du commentaire lui-m\u00eame. Vous pouvez consulter le Codex WordPress pour trouver toutes les <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_new_comment\/#parameters\">paires de valeurs cl\u00e9s incluses dans le tableau \u00ab\u00a0commentdata\u00a0\u00bb<\/a>.<\/p>\n<p>Vous pouvez avoir autant d&rsquo;arguments que vous le souhaitez, mais la fonction de rappel et la fonction <code><strong>add_action()<\/strong><\/code> doivent sp\u00e9cifier le m\u00eame nombre d&rsquo;arguments.<\/p>\n<p>En passant des param\u00e8tres suppl\u00e9mentaires \u00e0 la fonction de rappel, vous pouvez faire plus avec votre code. Par exemple, vous pouvez v\u00e9rifier si un commentaire est approuv\u00e9 ou non et <a href=\"https:\/\/kinsta.com\/fr\/blog\/spams-commentaires-wordpress\/#3-enable-comment-moderation\">envoyer automatiquement le texte du commentaire \u00e0 l&rsquo;administrateur s&rsquo;il est approuv\u00e9<\/a>. Il n&rsquo;est pas possible de faire cela sans sp\u00e9cifier les arguments suppl\u00e9mentaires car votre fonction de rappel n&rsquo;aura pas acc\u00e8s aux donn\u00e9es de <code><strong>comment_content<\/strong><\/code>.<\/p>\n<p>Si vous ne voulez pas fixer la priorit\u00e9, mais seulement changer le nombre d&rsquo;arguments, vous devez quand m\u00eame fixer une priorit\u00e9. Il suffit d&rsquo;utiliser sa valeur par d\u00e9faut (c&rsquo;est-\u00e0-dire 10).<\/p>\n<h4>Comment le c\u0153ur de WordPress utilise les actions<\/h4>\n<p>Le c\u0153ur de WordPress lui-m\u00eame utilise un grand nombre de ses actions int\u00e9gr\u00e9es pour ex\u00e9cuter diverses fonctions.<\/p>\n<p>Prenez l&rsquo;action <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/wp_head\/\">wp_head<\/a> par exemple. Elle est d\u00e9clench\u00e9e lorsque WordPress affiche la section d&rsquo;en-t\u00eate des pages web (le code qui va de <code><strong>&lt;head&gt;<\/strong><\/code> \u00e0 <code><strong>&lt;\/head&gt;<\/strong><\/code>).<\/p>\n<p>Vous pouvez trouver la plupart des fonctions d&rsquo;action du c\u0153ur de WordPress Core li\u00e9es au hook <code><strong>wp_head<\/strong><\/code> dans le fichier <strong><code>wp-includes\/default-filters.php<\/code>.<\/strong> J&rsquo;ai parcouru <a href=\"https:\/\/github.com\/WordPress\/WordPress\/blob\/master\/wp-includes\/default-filters.php\">le code<\/a> et compil\u00e9 une liste de toutes les fonctions <code><strong>add_action()<\/strong><\/code> qui invoquent l&rsquo;action <code><strong>wp_head<\/strong><\/code>.<\/p>\n<pre><code class=\"language-php\">add_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 );\nadd_action( 'wp_head', '_wp_render_title_tag', 1 );\nadd_action( 'wp_head', 'wp_enqueue_scripts', 1 );\nadd_action( 'wp_head', 'wp_resource_hints', 2 );\nadd_action( 'wp_head', 'feed_links', 2 );\nadd_action( 'wp_head', 'feed_links_extra', 3 );\nadd_action( 'wp_head', 'rsd_link' );\nadd_action( 'wp_head', 'wlwmanifest_link' );\nadd_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );\nadd_action( 'wp_head', 'locale_stylesheet' );\nadd_action( 'wp_head', 'noindex', 1 );\nadd_action( 'wp_head', 'print_emoji_detection_script', 7 );\nadd_action( 'wp_head', 'wp_print_styles', 8 );\nadd_action( 'wp_head', 'wp_print_head_scripts', 9 );\nadd_action( 'wp_head', 'wp_generator' );\nadd_action( 'wp_head', 'rel_canonical' );\nadd_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );\nadd_action( 'wp_head', 'wp_custom_css_cb', 101 );\nadd_action( 'wp_head', 'wp_site_icon', 99 );\nadd_action( 'wp_head', 'wp_no_robots' );<\/code><\/pre>\n<p>Cela fait beaucoup de fonctions de rappel accroch\u00e9es \u00e0 une seule action. Il est essentiel de fixer la <code><strong>priority<\/strong><\/code> pour s\u2019assurer que les fonctions de rappel les plus importantes se lancent en premier.<\/p>\n<p>Dans l&rsquo;exemple ci-dessus, le chargement des scripts avec la fonction de rappel <code><strong>wp_enqueue_scripts()<\/strong><\/code> est plus important (priority = 1) que le chargement des balises m\u00e9ta de l&rsquo;ic\u00f4ne du site avec la fonction de rappel <code><strong>wp_site_icon()<\/strong><\/code> (priority = 99).<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Toutes les fonctions de rappel utilis\u00e9es dans l&rsquo;exemple ci-dessus sont des fonctions de WordPress. Vous pouvez \u00e9galement les utiliser dans n&rsquo;importe quel code. Visitez la <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\">page de r\u00e9f\u00e9rence des fonctions sur le Codex WordPress<\/a> pour plus d&rsquo;informations.<\/p>\n<\/aside>\n\n<h4>Autres fonctions d&rsquo;action<\/h4>\n<p>Bien que <code><strong>add_action()<\/strong><\/code> soit la fonction d&rsquo;action la plus utilis\u00e9e, il en existe beaucoup d&rsquo;autres qui sont tout aussi utiles. Voyons comment elles fonctionnent toutes.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/has_action\">has_action()<\/a><\/li>\n<\/ul>\n<p>Cette fonction d&rsquo;action v\u00e9rifie si une action a \u00e9t\u00e9 accroch\u00e9e. Elle accepte deux param\u00e8tres. Le premier est le nom de l&rsquo;action. Le second param\u00e8tre est facultatif et est le nom de la fonction de rappel.<\/p>\n<pre><code class=\"language-php\">has_action( 'action_name', 'function_to_check' );<\/code><\/pre>\n<p>Si vous ne sp\u00e9cifiez que le premier param\u00e8tre, cela renvoie <code><strong>true<\/strong><\/code> si <em>une<\/em> fonction est accroch\u00e9e au param\u00e8tre <code><strong>action_name<\/strong><\/code>.<\/p>\n<p>Mais si vous sp\u00e9cifiez \u00e9galement le second param\u00e8tre, cela retournera <code><strong>false<\/strong><\/code> si la fonction de rappel sp\u00e9cifi\u00e9e n&rsquo;est pas enregistr\u00e9e pour l&rsquo;action mentionn\u00e9e.<\/p>\n<p>S&rsquo;il trouve la fonction de rappel attach\u00e9e \u00e0 l&rsquo;action du hook, cela renvoie la <code><strong>priority<\/strong><\/code>\u00a0(un entier) fix\u00e9e pour cette fonction sur cette action de hook.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\">do_action()<\/a><\/li>\n<\/ul>\n<p>Nous avons d\u00e9j\u00e0 rencontr\u00e9 cette fonction d&rsquo;action. WordPress l&rsquo;utilise pour d\u00e9finir toutes ses actions par d\u00e9faut, ce qui permet \u00e0 d&rsquo;autres fonctions de s&rsquo;y raccrocher. Tout comme WordPress, vous pouvez \u00e9galement utiliser la fonction <code><strong>do_action()<\/strong><\/code> pour cr\u00e9er une nouvelle action personnalis\u00e9e en sp\u00e9cifiant un nouveau nom d&rsquo;action comme param\u00e8tre.<\/p>\n<pre><code class=\"language-php\">do_action( 'action_name', [argument1], [argument2] );<\/code><\/pre>\n<p>Le simple fait de d\u00e9clarer cette fonction ne fera rien en soi. Mais elle restera dans le code, en attendant que d&rsquo;autres fonctions d&rsquo;action l&rsquo;activent. La transmission d&rsquo;arguments suppl\u00e9mentaires est facultative, mais elle est importante si vous voulez que vos fonctions de rappel les utilisent.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/do_action_ref_array\">do_action_ref_array()<\/a><\/li>\n<\/ul>\n<p>Cette fonction d&rsquo;action est identique \u00e0 <code><strong>do_action()<\/strong><\/code>, \u00e0 une diff\u00e9rence pr\u00e8s. Tout argument qui lui est pass\u00e9 doit \u00eatre un tableau. Lorsque vous avez beaucoup d&rsquo;arguments \u00e0 passer ou que vos arguments sont d\u00e9j\u00e0 dans un tableau, cette fonction est tr\u00e8s utile.<\/p>\n<pre><code class=\"language-php\">\/\/ here's an example array\n$arguments_array = array( 'arg_1', 'foo', true, 'arg_4' );\n\ndo_action_ref_array( 'example_action', $arguments_array );<\/code><\/pre>\n<p>Comme les tableaux PHP sont une carte ordonn\u00e9e, assurez-vous que les arguments que vous passez sont dans le bon ordre.<\/p>\n<p>L&rsquo;action <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/admin_bar_menu\/\">admin_bar_menu<\/a> est un exemple de l&rsquo;utilisation de cette fonction d&rsquo;action. Elle peut \u00eatre accroch\u00e9e pour ajouter, manipuler ou supprimer les diff\u00e9rents \u00e9l\u00e9ments de la barre d&rsquo;administration. Tous les \u00e9l\u00e9ments de la barre d&rsquo;administration sont d\u00e9finis comme des \u00e9l\u00e9ments d&rsquo;un tableau.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/did_action\">did_action()<\/a><\/li>\n<\/ul>\n<p>Si vous voulez compter le nombre de fois qu&rsquo;une action est d\u00e9clench\u00e9e, vous pouvez invoquer cette fonction d&rsquo;action.<\/p>\n<pre><code class=\"language-php\">did_action( 'action_name' );<\/code><\/pre>\n<p>Cette fonction retourne une valeur enti\u00e8re.<\/p>\n<p>La fonction <code><strong>did_action()<\/strong><\/code> est extr\u00eamement pratique lorsque vous souhaitez ex\u00e9cuter une fonction de rappel uniquement la premi\u00e8re fois qu&rsquo;une action est ex\u00e9cut\u00e9e et jamais plus ensuite.<\/p>\n<pre><code class=\"language-php\">function example_callback_function() {\n    if( did_action( 'example_action' ) === 1 ) {\n    \/\/ checks if the 'example_action' hook is fired once, and only runs then, and never again!\n    }\n}\nadd_action('example_action', 'example_callback_function');<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/remove_action\">remove_action()<\/a><\/li>\n<\/ul>\n<p>Cette fonction d&rsquo;action supprime une fonction de rappel li\u00e9e \u00e0 l&rsquo;action sp\u00e9cifi\u00e9e. Par exemple, vous pouvez utiliser cette fonction pour supprimer les fonctions de WordPress par d\u00e9faut accroch\u00e9es aux actions int\u00e9gr\u00e9es et les remplacer par les v\u00f4tres.<\/p>\n<pre><code class=\"language-php\">remove_action( 'action_name', 'function_to_be_removed', [priority] );<\/code><\/pre>\n<p>Il y a quelques conditions pr\u00e9alables \u00e0 l&rsquo;appel de la fonction <code><strong>remove_action()<\/strong><\/code> :<\/p>\n<ol>\n<li>Les param\u00e8tres <code><strong>function_to_be_removed<\/strong><\/code> et <code><strong>priority<\/strong><\/code> doivent \u00eatre les m\u00eames que ceux utilis\u00e9s \u00e0 l&rsquo;origine dans la fonction <code><strong>add_action()<\/strong><\/code>.<\/li>\n<li>Vous ne pouvez pas appeler la fonction <code><strong>remove_action()<\/strong><\/code> directement. Vous devez l&rsquo;appeler depuis une autre fonction.<\/li>\n<li>Si la fonction de rappel est enregistr\u00e9e depuis une <em>classe, sa<\/em> suppression a d&rsquo;autres exigences. Vous pouvez consulter la documentation du Codex WordPress pour plus de d\u00e9tails.<\/li>\n<li>Vous ne pouvez pas supprimer la fonction de rappel avant qu&rsquo;elle ne soit enregistr\u00e9e ou apr\u00e8s qu&rsquo;elle ait \u00e9t\u00e9 ex\u00e9cut\u00e9e.<\/li>\n<\/ol>\n<p>Voici un exemple de la fa\u00e7on dont <a href=\"https:\/\/kinsta.com\/fr\/blog\/tutoriel-woocommerce\/\">WooCommerce<\/a> utilise cette fonction d&rsquo;action pour supprimer la miniature par d\u00e9faut du produit sur la page principale de la boutique.<\/p>\n<pre><code class=\"language-php\">remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/remove_all_actions\">remove_all_actions()<\/a><\/li>\n<\/ul>\n<p>Cette fonction d&rsquo;action supprime tout ce qui est li\u00e9 \u00e0 une action. Le param\u00e8tre de priorit\u00e9 est facultatif.<\/p>\n<pre><code class=\"language-php\">remove_all_actions( 'action_name', [priority] );<\/code><\/pre>\n<p>N&rsquo;oubliez pas que cette fonction ne peut pas \u00eatre appel\u00e9e \u00e0 partir de l&rsquo;action dont vous souhaitez annuler les fonctions de rappel. Cela provoquerait une boucle infinie. Vous pouvez vous connecter \u00e0 une action qui a \u00e9t\u00e9 lanc\u00e9e plus t\u00f4t pour ex\u00e9cuter cette fonction sans aucune erreur.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/doing_action\/\">doing_action()<\/a><\/li>\n<\/ul>\n<p>Cette fonction d&rsquo;action v\u00e9rifie si l&rsquo;action sp\u00e9cifi\u00e9e est en cours d&rsquo;ex\u00e9cution ou non. Elle renvoie une valeur bool\u00e9enne (<code><strong>true<\/strong><\/code> ou <code><strong>false<\/strong><\/code>).<\/p>\n<pre><code class=\"language-php\">\/\/ check whether the 'action_name' action is being executed\nif ( doing_action( 'action_name' ) ) {\n\u00a0 \u00a0 \/\/ execute your code here\n}<\/code><\/pre>\n<p>Vous pouvez laisser le param\u00e8tre <code><strong>action_name<\/strong><\/code> vide pour v\u00e9rifier si <em>une <\/em>action est en cours d&rsquo;ex\u00e9cution. Cela retournera <code><strong>true<\/strong><\/code> \u00e0 chaque fois qu&rsquo;une action est ex\u00e9cut\u00e9e.<\/p>\n<pre><code class=\"language-php\">\/\/ check if any action is running and do something\nif ( doing_action() ) {\n  \u00a0 \/\/ the code here is run when any action is fired\n}<\/code><\/pre>\n<h4>Exemple d&rsquo;actions 1 : Afficher un message de maintenance aux visiteurs de votre site<\/h4>\n<p>Parfois, il est pr\u00e9f\u00e9rable de mettre votre site hors ligne et de cr\u00e9er une <a href=\"https:\/\/kinsta.com\/fr\/blog\/mode-maintenance-wordpress\/\">page de maintenance<\/a>. Heureusement, WordPress offre un moyen facile de le faire.<\/p>\n<pre><code class=\"language-php\">\/\/ show a maintenance message for all your site visitors\nadd_action( 'get_header', 'maintenance_message' );\nfunction maintenance_message() {\n    if (current_user_can( 'edit_posts' )) return;\n    wp_die( '&lt;h1&gt;Stay Pawsitive!&lt;\/h1&gt;&lt;br&gt;Sorry, we\\'re temporarily down for maintenance right meow.' );\n}<\/code><\/pre>\n<p>D\u00e9composons le code et passons en revue chaque \u00e9tape :<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/get_header\/\">get_header<\/a> est une action qui se d\u00e9clenche avant le chargement du fichier de mod\u00e8le d&rsquo;en-t\u00eate du site. C&rsquo;est une action parfaite \u00e0 laquelle se raccorder si vous voulez interrompre le chargement du site principal.<\/li>\n<li>Accrochez-vous \u00e0 l&rsquo;action <code><strong>get_header<\/strong><\/code> en utilisant la fonction <code><strong>add_action()<\/strong><\/code> avec la fonction de rappel <code><strong>maintenance_message()<\/strong><\/code>.<\/li>\n<li>D\u00e9finissez la fonction de rappel <code><strong>maintenance_message()<\/strong><\/code>.<\/li>\n<li><code><strong>current_user_can( 'edit_posts' )<\/strong><\/code> est une <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/current_user_can\/\">fonction de test de capacit\u00e9 de l&rsquo;utilisateur<\/a> qui v\u00e9rifie si l&rsquo;utilisateur actuel est connect\u00e9 et <a href=\"https:\/\/wordpress.org\/support\/article\/roles-and-capabilities\/#edit_posts\">peut modifier des articles<\/a>. <a href=\"https:\/\/kinsta.com\/fr\/blog\/plugins-wordpress-inscription-utilisateur\/\">Chaque utilisateur enregistr\u00e9 sur un site WordPress<\/a>, \u00e0 l\u2019exception de ceux qui ont un r\u00f4le d&rsquo;abonn\u00e9, a la possibilit\u00e9 de modifier des articles. Il existe d&rsquo;autres moyens robustes d&rsquo;effectuer ce contr\u00f4le, mais nous nous en tiendrons \u00e0 cette m\u00e9thode simple ici.<\/li>\n<li>Utilisez la fonction par d\u00e9faut <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_die\/\">wp_die()<\/a> pour stopper l&rsquo;ex\u00e9cution de WordPress avec gr\u00e2ce et afficher une page HTML avec un message d&rsquo;erreur. Vous pouvez utiliser la syntaxe HTML dans le param\u00e8tre du message d&rsquo;erreur pour le formater.<\/li>\n<\/ul>\n<p>Apr\u00e8s avoir enregistr\u00e9 le code dans mon extension personnalis\u00e9e, j&rsquo;ai charg\u00e9 mon installation locale de WordPress en mode de navigation priv\u00e9e. La page <strong>\u00ab\u00a0En maintenance\u00a0\u00bb<\/strong> est un succ\u00e8s !<\/p>\n<figure id=\"attachment_72274\" aria-describedby=\"caption-attachment-72274\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72274 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/afficher-message-erreur-visiteurs-site.png\" alt=\"Afficher un message d'erreur aux visiteurs du site\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72274\" class=\"wp-caption-text\">Afficher un message d&rsquo;erreur aux visiteurs du site<\/figcaption><\/figure>\n<p>Le site se charge correctement si je suis connect\u00e9 car il passe le test de capacit\u00e9 de l&rsquo;utilisateur. Vous pouvez maintenant continuer \u00e0 travailler \u00e0 la r\u00e9paration de votre site pendant qu&rsquo;il affiche cette page pour les visiteurs normaux.<\/p>\n<h4>Exemple d&rsquo;actions 2 : Masquer les \u00e9l\u00e9ments de menu du tableau de bord aux utilisateurs non administrateurs<\/h4>\n<p>Si vous <a href=\"https:\/\/kinsta.com\/fr\/blog\/maintenance-wordpress\/\">g\u00e9rez un blog avec plusieurs auteurs<\/a> ou <a href=\"https:\/\/kinsta.com\/fr\/blog\/maintenance-wordpress\/\">un site pour vos clients<\/a>, vous devrez peut-\u00eatre masquer certains menus d&rsquo;administration du <a href=\"https:\/\/kinsta.com\/fr\/blog\/tableau-de-bord-admin-wordpress\/\">tableau de bord de WordPress<\/a> pour les utilisateurs non administrateurs. Vous pouvez le faire en vous accrochant \u00e0 l&rsquo;action <code><strong>admin_menu<\/strong><\/code>.<\/p>\n<pre><code class=\"language-php\">\/\/ remove specific dashboard menus for non-admin users\nadd_action( 'admin_menu', 'hide_admin_menus' );\nfunction hide_admin_menus() {\n    if (current_user_can( 'create_users' )) return;\n    if (wp_get_current_user()-&gt;display_name == \"Salman\") return; \n    remove_menu_page( 'plugins.php' ); \n    remove_menu_page( 'themes.php' ); \n    remove_menu_page( 'tools.php' ); \n    remove_menu_page( 'users.php' ); \n    remove_menu_page( 'edit.php?post_type=page' ); \n    remove_menu_page( 'options-general.php' );\n}<\/code><\/pre>\n<p>Voici un aper\u00e7u \u00e9tape par \u00e9tape de l&rsquo;extrait de code ci-dessus :<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/admin_menu\/\">admin_menu<\/a> est une action qui se d\u00e9clenche avant le chargement du menu d\u2019administration dans la zone du tableau de bord de WordPress.<\/li>\n<li>Accrochez-vous \u00e0 l&rsquo;action <code><strong>admin_menu<\/strong><\/code> \u00e0 l\u2019aide de la fonction <code><strong>add_action()<\/strong><\/code> en utilisant la fonction de rappel <code><strong>hide_admin_menus()<\/strong><\/code>.<\/li>\n<li>La fonction de rappel <code><strong>hide_admin_menus()<\/strong><\/code> d\u00e9finit la logique du code. Elle est ex\u00e9cut\u00e9e \u00e0 chaque fois que se d\u00e9clenche l&rsquo;action <code><strong>admin_menu<\/strong><\/code>.<\/li>\n<li>Dans la fonction de rappel, la fonction <code><strong>current_user_can( 'create_users' )<\/strong><\/code> v\u00e9rifie si l&rsquo;utilisateur connect\u00e9 est un administrateur. \u00c9tant donn\u00e9 que seuls les administrateurs de site ont la capacit\u00e9 <code><strong>create_user<\/strong><\/code>, la fonction se termine par une d\u00e9claration <code>return<\/code> si l&rsquo;utilisateur est un administrateur.<\/li>\n<li>La fonction WordPress <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_get_current_user\/\">wp_get_current_user()<\/a> r\u00e9cup\u00e8re l&rsquo;objet current user. Avec cette fonction, nous pouvons v\u00e9rifier si l&rsquo;utilisateur connect\u00e9 a un <code>display_name<\/code> particulier. Cette ligne est facultative, au cas o\u00f9 vous souhaiteriez \u00e9viter que certains utilisateurs non administrateurs soient bloqu\u00e9s en raison de cette fonction de rappel.<\/li>\n<li>La fonction <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/remove_menu_page\/\">remove_menu_page()<\/a> de WordPress supprime les menus d&rsquo;administration de haut niveau. Dans l&rsquo;exemple de code ci-dessus, je supprime les menus d&rsquo;administration suivants : Extensions, Th\u00e8mes, Outils, Utilisateurs, Pages et Options.<\/li>\n<\/ul>\n<p>Apr\u00e8s avoir enregistr\u00e9 le fichier de l\u2019extension, voici un aper\u00e7u du tableau de bord de WordPress avec un administrateur connect\u00e9.<\/p>\n<figure id=\"attachment_72251\" aria-describedby=\"caption-attachment-72251\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72251 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/tableau-de-bord-defaut-administrateur-wordpress.png\" alt=\"Le tableau de bord par d\u00e9faut de l'administrateur de WordPress\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72251\" class=\"wp-caption-text\">Le tableau de bord par d\u00e9faut de l&rsquo;administrateur de WordPress<\/figcaption><\/figure>\n<p>Et voici une capture d&rsquo;\u00e9cran du tableau de bord de WordPress avec un utilisateur non administrateur connect\u00e9.<\/p>\n<figure id=\"attachment_72249\" aria-describedby=\"caption-attachment-72249\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72249 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/masquer-elements-sensibles-menu-administration.png\" alt=\"Masquer les \u00e9l\u00e9ments sensibles du menu d'administration aux utilisateurs non-administrateurs\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72249\" class=\"wp-caption-text\">Masquer les \u00e9l\u00e9ments sensibles du menu d&rsquo;administration aux utilisateurs non-administrateurs<\/figcaption><\/figure>\n<p>Cette solution ne fait que masquer les \u00e9l\u00e9ments du menu d&rsquo;administration sp\u00e9cifi\u00e9s pour qu&rsquo;ils n&rsquo;apparaissent pas dans le tableau de bord de WordPress. Tous les utilisateurs peuvent toujours y acc\u00e9der en saisissant les URL des menus dans leur navigateur.<\/p>\n<p>Pour d\u00e9sactiver l&rsquo;acc\u00e8s de certains <a href=\"https:\/\/kinsta.com\/fr\/blog\/roles-utilisateurs-wordpress\/\">r\u00f4les d&rsquo;utilisateur<\/a> \u00e0 des menus sp\u00e9cifiques, vous devez modifier leurs capacit\u00e9s.<\/p>\n<h3>Accrocher un filtre<\/h3>\n<p>Les filtres permettent \u00e0 votre code personnalis\u00e9 de modifier les donn\u00e9es utilis\u00e9es par d&rsquo;autres fonctions de WordPress. Contrairement aux actions, les fonctions li\u00e9es aux filtres doivent retourner une valeur.<\/p>\n<h4>La fonction de filtre add_filter()<\/h4>\n<p>Vous pouvez accrocher une fonction de rappel \u00e0 un filtre en suivant les \u00e9tapes suivantes :<\/p>\n<ol>\n<li>D\u00e9finissez une <strong>fonction de rappel<\/strong> qui sera ex\u00e9cut\u00e9e lorsque WordPress lancera le filtre. Les fonctions de rappel pour les filtres doivent avoir au moins un argument sp\u00e9cifi\u00e9, car tous les filtres transmettent au moins une valeur \u00e0 leurs fonctions de rappel.<\/li>\n<li>Enregistrez la fonction de rappel \u00e0 un filtre avec la fonction <code><strong>add_filter()<\/strong><\/code>. Le filtre se chargera d&rsquo;appeler la fonction de rappel. Selon le Codex WordPress, la fonction <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_filter\/\">add_filter()<\/a> doit passer au moins deux param\u00e8tres :\n<ul>\n<li>Le nom du filtre auquel s&rsquo;accrocher.<\/li>\n<li>Le nom de la fonction de rappel qui sera ex\u00e9cut\u00e9e lorsque le filtre se d\u00e9clenchera.<\/li>\n<\/ul>\n<\/li>\n<li>La fonction <code><strong>add_filter()<\/strong><\/code> accepte \u00e9galement deux param\u00e8tres optionnels suppl\u00e9mentaires pour fixer la <code><strong>priority<\/strong><\/code>\u00a0et le <code><strong>number of arguments<\/strong><\/code>. Ces param\u00e8tres fonctionnent de la m\u00eame mani\u00e8re que la fonction <code><strong>add_action()<\/strong><\/code>.<\/li>\n<\/ol>\n<p>Voici un exemple de la fa\u00e7on dont vous pouvez utiliser la fonction <code><strong>add_filter()<\/strong><\/code> pour accrocher une fonction de rappel \u00e0 un filtre.<\/p>\n<pre><code class=\"language-php\">\/\/ define the filter callback function with at least one argument passed\n\/\/ the number of arguments that you can pass depends on how the filter is defined\nfunction filter_callback_function( $arg1, $arg2 ) {\n\u00a0 \u00a0 \/\/ make your code do something with the arguments and return something\n\u00a0 \u00a0 return $something;\n}\n\n\/\/ now hook the callback function to the 'example_filter'\nadd_filter( 'example_filter', 'filter_callback_function', [priority], [no_of_args] );\n\n\/\/ '10' is the default priority set for the callback function\n\/\/ and '1' is the default number of arguments passed<\/code><\/pre>\n<h4>Exemple d&rsquo;accrochage d&rsquo;un filtre<\/h4>\n<p>WordPress fournit un filtre appel\u00e9 <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\/login_message\">login_message<\/a> pour filtrer le message affich\u00e9 sur la page de connexion au-dessus du formulaire de connexion. La valeur renvoy\u00e9e par ce filtre peut avoir un <a href=\"https:\/\/kinsta.com\/fr\/blog\/editeurs-html-gratuits\/\">balisage HTML<\/a>.<\/p>\n<p>Accrochez-vous au filtre \u00ab\u00a0<code><strong>login_message<\/strong><\/code>\u00a0\u00bb et modifiez le message affich\u00e9 sur l&rsquo;\u00e9cran de connexion.<\/p>\n<pre><code class=\"language-php\">\/\/ show a custom login message above the login form\nfunction custom_login_message( $message ) {\n\u00a0 \u00a0 if ( empty( $message ) ) {\n\u00a0 \u00a0 \u00a0 \u00a0 return \"&lt;h2&gt;Welcome to Let's Develop by Salman Ravoof! Please log in to start learning.&lt;\/h2&gt;\";\n\u00a0 \u00a0 } \n    else {\n\u00a0 \u00a0 \u00a0 \u00a0 return $message;\n\u00a0 \u00a0 }\n}\nadd_filter( 'login_message', 'custom_login_message' );<\/code><\/pre>\n<p>La d\u00e9claration <code><strong>if-else<\/strong><\/code> de la fonction de rappel v\u00e9rifie si le message de connexion est d\u00e9j\u00e0 d\u00e9fini, le plus souvent par une autre extension ou un autre th\u00e8me. Dans ce cas, la fonction de rappel renvoie la valeur originale sans la modifier. C&rsquo;est une fa\u00e7on d&rsquo;\u00e9viter les conflits avec d&rsquo;autres extensions ou th\u00e8mes.<\/p>\n<p>Vous pouvez voir le message s&rsquo;afficher au-dessus du formulaire de connexion dans la <a href=\"https:\/\/kinsta.com\/fr\/blog\/url-connexion-wordpress\/\">page de connexion de WordPress<\/a>.<\/p>\n<figure id=\"attachment_72252\" aria-describedby=\"caption-attachment-72252\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72252 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/affichage-message-connexion-personnalise-au-dessus-formulaire-connexion.png\" alt=\"Affichage d'un message de connexion personnalis\u00e9 au-dessus du formulaire de connexion\" width=\"1100\" height=\"514\"><figcaption id=\"caption-attachment-72252\" class=\"wp-caption-text\">Affichage d&rsquo;un message de connexion personnalis\u00e9 au-dessus du formulaire de connexion<\/figcaption><\/figure>\n<p>Vous pouvez styliser tous les \u00e9l\u00e9ments de la page de connexion en appelant des feuilles de style personnalis\u00e9es. Cela vous permettra de personnaliser enti\u00e8rement votre page de connexion WordPress par d\u00e9faut.<\/p>\n<p>Vous apprendrez comment charger des feuilles de style personnalis\u00e9es \u00e0 l&rsquo;aide d&rsquo;actions dans la section \u00ab\u00a0Personnaliser la page de connexion \u00e0 WordPress avec des hooks\u00a0\u00bb.<\/p>\n<h4>Trouver les filtres pris en charge par WordPress<\/h4>\n<p>Partout o\u00f9 WordPress traite ou modifie des donn\u00e9es, vous pouvez presque certainement trouver un filtre auquel vous accrocher et le modifier. Consid\u00e9rez les filtres comme une interface entre la <a href=\"https:\/\/kinsta.com\/fr\/blog\/reparer-base-de-donnees-wordpress\/\">base de donn\u00e9es WordPress<\/a> et le navigateur.<\/p>\n<p>Vous pouvez trouver une liste exhaustive de tous les filtres support\u00e9s par WordPress dans la page <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\">Plugin API\/Filter Reference<\/a>.<\/p>\n<figure id=\"attachment_72258\" aria-describedby=\"caption-attachment-72258\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72258 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/wordpress-offre-variete-filtres-auxquels-possible-accrocher.png\" alt=\"WordPress offre une vari\u00e9t\u00e9 de filtres auxquels il est possible de s\u2019accrocher\" width=\"1100\" height=\"514\"><figcaption id=\"caption-attachment-72258\" class=\"wp-caption-text\">WordPress offre une vari\u00e9t\u00e9 de filtres auxquels il est possible de s\u2019accrocher<\/figcaption><\/figure>\n<p>Tous les filtres qui y sont list\u00e9s sont divis\u00e9s en plusieurs cat\u00e9gories et class\u00e9s de haut en bas dans l&rsquo;ordre d&rsquo;ex\u00e9cution de WordPress.<\/p>\n<p>Si vous souhaitez trouver des filtres \u00e0 int\u00e9grer dans le code source de WordPress, faites une recherche avec le terme \u00ab\u00a0<strong>apply_filters\u00a0<\/strong>\u00bb et vous obtiendrez des tonnes de r\u00e9sultats. La <a href=\"https:\/\/developer.wordpress.org\/reference\/\">r\u00e9f\u00e9rence du code WordPress<\/a> est \u00e9galement un excellent endroit pour rechercher tout ce qui est inclus dans WordPress, y compris les actions et les filtres.<\/p>\n<h4>Comment le c\u0153ur de WordPress utilise les filtres<\/h4>\n<p>Le c\u0153ur de WordPress lui-m\u00eame utilise beaucoup de ses filtres int\u00e9gr\u00e9s pour modifier les donn\u00e9es utilis\u00e9es par ses diff\u00e9rentes fonctions.<\/p>\n<p>Prenons par exemple le filtre <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/the_content\/\">the_content<\/a>. Il filtre le contenu des articles apr\u00e8s qu&rsquo;il ait \u00e9t\u00e9 extrait de la base de donn\u00e9es et avant qu&rsquo;il ne soit affich\u00e9 sur le navigateur.<\/p>\n<p>Tout comme pour les actions, vous pouvez trouver la plupart des fonctions de filtrage de WordPress Core li\u00e9es au hook <code><strong>the_content<\/strong><\/code> dans le fichier <code><strong>wp-includes\/default-filters.php<\/strong><\/code>.<\/p>\n<p>Voici une liste de toutes les fonctions <code><strong>add_filter()<\/strong><\/code> du c\u0153ur base qui s&rsquo;accrochent au filtre <code><strong>the_content<\/strong><\/code> :<\/p>\n<pre><code class=\"language-php\">add_filter( 'the_content', 'do_blocks', 9 );\nadd_filter( 'the_content', 'wptexturize' );\nadd_filter( 'the_content', 'convert_smilies', 20 );\nadd_filter( 'the_content', 'wpautop' );\nadd_filter( 'the_content', 'shortcode_unautop' );\nadd_filter( 'the_content', 'prepend_attachment' );\nadd_filter( 'the_content', 'wp_make_content_images_responsive' );\nadd_filter( 'the_content', 'do_shortcode', 11 ); \/\/ AFTER wpautop().\u00a0<\/code><\/pre>\n<p>Notez la priorit\u00e9 sp\u00e9cifi\u00e9e pour certaines fonctions de rappel.<\/p>\n<p>Par exemple, la fonction <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_blocks\/\">do_blocks()<\/a> analyse tous les blocs dynamiques du contenu de l\u2019article et les rend compatibles avec le <a href=\"https:\/\/kinsta.com\/fr\/blog\/editeur-wordpress-gutenberg\/\">nouvel \u00e9diteur de blocs de WordPress<\/a>. Elle a une priorit\u00e9 plus \u00e9lev\u00e9e que la valeur par d\u00e9faut (10) afin de s&rsquo;assurer que le contenu est pr\u00eat \u00e0 recevoir des blocs avant que les autres fonctions ne soient ex\u00e9cut\u00e9es.<\/p>\n<p>La fonction <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/convert_smilies\/\">convert_smilies()<\/a> est configur\u00e9e pour fonctionner avec une priorit\u00e9 inf\u00e9rieure, car sa t\u00e2che consiste \u00e0 convertir les smileys de texte en sprites d&rsquo;image. Il est logique de l&rsquo;ex\u00e9cuter \u00e0 la fin apr\u00e8s avoir filtr\u00e9 tout le contenu de l\u2019article.<\/p>\n<p>Fait amusant : les codes courts sont un sous-ensemble de filtres. Ils re\u00e7oivent les donn\u00e9es d&rsquo;entr\u00e9e du code court, les traitent, puis lui renvoient les donn\u00e9es de sortie. Pour en savoir plus sur les codes courts, consultez ce <a href=\"https:\/\/kinsta.com\/fr\/blog\/shortcodes-wordpress\/\">guide des codes courts WordPress<\/a>.<\/p>\n<h4>Autres fonctions de filtre<\/h4>\n<p>Bien que <code><strong>add_filter()<\/strong><\/code> soit la fonction de filtre la plus utilis\u00e9e, il existe de nombreuses autres fonctions de filtre utiles. Examinons-les toutes en d\u00e9tail.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/has_filter\">has_filter()<\/a><\/li>\n<\/ul>\n<p>Cette fonction v\u00e9rifie si le filtre sp\u00e9cifi\u00e9 est accroch\u00e9 par une fonction quelconque. Elle accepte deux param\u00e8tres. Le premier param\u00e8tre sert \u00e0 saisir le nom du filtre. Le second param\u00e8tre est facultatif et sert \u00e0 saisir le nom de la fonction de rappel.<\/p>\n<pre><code class=\"language-php\">has_filter( 'filter_name', 'function_to_check' );<\/code><\/pre>\n<p>Si vous ne sp\u00e9cifiez que le premier param\u00e8tre, il retournera <code><strong>true<\/strong><\/code> si le <code><strong>filter_name<\/strong><\/code> est accroch\u00e9 par <em>une<\/em> fonction<em> quelconque.<\/em><\/p>\n<p>Cependant, si vous sp\u00e9cifiez les deux param\u00e8tres, il retournera <code><strong>false<\/strong><\/code> si la fonction de rappel mentionn\u00e9e n&rsquo;est pas enregistr\u00e9e avec le filtre donn\u00e9. S&rsquo;il trouve la fonction de rappel enregistr\u00e9e avec le filtre, il renvoie alors la <code><strong>priority<\/strong><\/code>\u00a0(un entier) d\u00e9finie pour cette fonction sur ce filtre.<\/p>\n<p>Une application possible de la fonction <code><strong>has_filter()<\/strong><\/code> est de v\u00e9rifier si un filtre a d\u00e9j\u00e0 \u00e9t\u00e9 accroch\u00e9 et, sur cette base, de proc\u00e9der \u00e0 l&rsquo;ex\u00e9cution du code.<\/p>\n<pre><code class=\"language-php\">\/\/ check to see if 'the_content' filter has been hooked\nif ( ! has_filter( 'the_content' ) {\n\u00a0 \u00a0 \/\/ hook the filter if and only if it hasn't been hooked before\n\u00a0 \u00a0 add_filter( 'the_content', 'modify_the_content' );\n}<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/apply_filters\/\">apply_filters()<\/a><\/li>\n<\/ul>\n<p>Cette fonction de filtre est comme la fonction d\u2019action <code><strong>do_action()<\/strong><\/code>. Toute fonction de rappel li\u00e9e \u00e0 ce filtre sera ex\u00e9cut\u00e9e l\u00e0 o\u00f9 cette fonction se trouve dans le code WordPress.<\/p>\n<p>Vous pouvez \u00e9galement utiliser cette fonction pour cr\u00e9er un nouveau filtre personnalis\u00e9 en sp\u00e9cifiant le nom du filtre et la valeur du filtre comme param\u00e8tres.<\/p>\n<pre><code class=\"language-php\">apply_filters( 'filter_name', 'value_to_filter', [argument1], [argument2] );<\/code><\/pre>\n<p>N&rsquo;oubliez pas de pr\u00e9ciser les arguments suppl\u00e9mentaires si vous souhaitez les transmettre \u00e0 vos fonctions de rappel. La plupart des filtres n&rsquo;utilisent qu&rsquo;un seul argument, il est donc facile de ne pas d\u00e9finir les arguments suppl\u00e9mentaires.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/apply_filters_ref_array\">apply_filters_ref_array()<\/a><\/li>\n<\/ul>\n<p>Cette fonction est semblable \u00e0 la fonction <code><strong>apply_filters()<\/strong><\/code>, sauf que tous les arguments qu&rsquo;elle accepte sont regroup\u00e9s dans un tableau.<\/p>\n<pre><code class=\"language-php\">\/\/ an example array\n$arguments_array = array( 'some_value', 'foo', false, 'another_value' );\n\napply_filters_ref_array( 'example_filter', $arguments_array );<\/code><\/pre>\n<p>Cette fonction de filtre peut \u00eatre pratique lorsque vous avez de nombreux arguments \u00e0 faire valoir ou si tous sont d\u00e9j\u00e0 dans un tableau. Assurez-vous que les arguments \u00e0 l&rsquo;int\u00e9rieur du tableau sont dans le bon ordre.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/current_filter\">current_filter()<\/a><\/li>\n<\/ul>\n<p>Cette fonction de filtre r\u00e9cup\u00e8re le nom du filtre ou de l&rsquo;action en cours d&rsquo;ex\u00e9cution. Vous n&rsquo;avez pas besoin de sp\u00e9cifier de param\u00e8tres car elle s&rsquo;ex\u00e9cute dans le cadre de la fonction de rappel.<\/p>\n<p>Voici un exemple de son utilisation :<\/p>\n<pre><code class=\"language-php\">function example_callback() {\n\u00a0 \u00a0 echo current_filter(); \/\/ 'the_title' will be echoed\n\u00a0 \u00a0 return\n}\nadd_filter( 'the_title', 'example_callback' );<\/code><\/pre>\n<p>Malgr\u00e9 son nom, cette fonction peut r\u00e9cup\u00e9rer le nom des actions et des filtres.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/remove_filter\/\">remove_filter()<\/a><\/li>\n<\/ul>\n<p>Cette fonction de filtre supprime la fonction de rappel attach\u00e9e au filtre sp\u00e9cifi\u00e9. Elle fonctionne exactement comme la fonction <code><strong>remove_action()<\/strong><\/code>. Vous pouvez l&rsquo;utiliser pour supprimer les fonctions WordPress par d\u00e9faut enregistr\u00e9es avec un filtre sp\u00e9cifique, et si n\u00e9cessaire les remplacer par vos propres fonctions.<\/p>\n<pre><code class=\"language-php\">remove_filter( 'filter_name', 'function_to_be_removed', [priority] );<\/code><\/pre>\n<p>Pour lib\u00e9rer une fonction de rappel accroch\u00e9e \u00e0 un filtre, les param\u00e8tres <code><strong>function_to_be_removed<\/strong><\/code> et <code><strong>priority<\/strong><\/code> doivent \u00eatre identiques aux arguments utilis\u00e9s lors de l&rsquo;accrochage de la fonction de rappel.<\/p>\n<p>Si le filtre a \u00e9t\u00e9 ajout\u00e9 \u00e0 partir d&rsquo;une classe, ce qui est g\u00e9n\u00e9ralement le cas lorsqu&rsquo;ils sont ajout\u00e9s par des extensions, vous devez alors <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/remove_filter\/#comment-613\">acc\u00e9der \u00e0 la variable de classe pour supprimer le filtre<\/a>.<\/p>\n<pre><code class=\"language-php\">\/\/ access the class variable first, and then remove the filter through it\nglobal $some_class;\n\nremove_filter( 'the_content', array($some_class, 'class_filter_callback') );<\/code><\/pre>\n<p>Voici un excellent exemple d&rsquo;utilisation de <code><strong>remove_filter()<\/strong><\/code>.<\/p>\n<p>L\u2019extension <a href=\"https:\/\/kinsta.com\/fr\/blog\/plugins-ecommerce-wordpress\/#woocommerce\">WooCommerce<\/a> utilise la fonction d&rsquo;appel <a href=\"https:\/\/docs.woocommerce.com\/wc-apidocs\/source-function-wc_lostpassword_url.html#13-39\">wc_lostpassword_url()<\/a> reli\u00e9e \u00e0 son filtre <a href=\"https:\/\/docs.woocommerce.com\/wc-apidocs\/source-function-wc_lostpassword_url.html#41\">lostpassword_url<\/a> pour rediriger \u00ab\u00a0Mot de passe perdu\u00a0?\u00a0\u00bb des utilisateurs.<\/p>\n<p>Tout utilisateur qui clique sur ce lien est dirig\u00e9 vers une page personnalis\u00e9e avec l&rsquo;URL <code><strong>\/my-account\/lost-password<\/strong><\/code>. Sans ce filtre, ils seraient dirig\u00e9s vers l&rsquo;URL de connexion standard de WordPress, \u00e0 l&rsquo;adresse <code><strong>\/wp-login.php<\/strong><\/code>.<\/p>\n<p>Si vous voulez r\u00e9initialiser cette fonctionnalit\u00e9 et envoyer vos utilisateurs \u00e0 la <a href=\"https:\/\/kinsta.com\/fr\/blog\/changer-mot-de-passe-wordpress\/\">page de r\u00e9cup\u00e9ration de mot de passe par d\u00e9faut<\/a> ou \u00e0 une page s\u00e9par\u00e9e. Vous pouvez supprimer cette fonction de rappel comme ceci :<\/p>\n<pre><code class=\"language-php\">remove_filter( 'lostpassword_url', 'wc_lostpassword_url', 10 );\u00a0<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/remove_all_filters\">remove_all_filters()<\/a><\/li>\n<\/ul>\n<p>Cette fonction de filtre supprime toutes les fonctions de rappel enregistr\u00e9es sur un filtre.<\/p>\n<pre><code class=\"language-php\">remove_all_filters( 'filter_name', [priority] );<\/code><\/pre>\n<p>Elle est similaire \u00e0 la fonction <code><strong>remove_all_actions()<\/strong><\/code>.<\/p>\n<p>L\u2019extension populaire <a href=\"https:\/\/github.com\/KimcoBlogSC\/Blog\/blob\/master\/wp-content\/plugins\/advanced-excerpt\/functions\/functions.php\">Advanced Excerpts<\/a> utilise cette fonction pour supprimer toutes les fonctions par d\u00e9faut li\u00e9es aux filtres <code><strong>the_excerpt<\/strong><\/code> et <code><strong>get_the_excerpt<\/strong><\/code>. Apr\u00e8s avoir fait cela, elle accroche ensuite sa propre fonction de rappel au filtre.<\/p>\n<pre><code class=\"language-php\">\/\/ Ensure our filter is hooked, regardless of the page type \nif ( ! has_filter( 'get_the_excerpt', array( $advanced_excerpt, 'filter_excerpt' ) ) ) {\n    remove_all_filters( 'get_the_excerpt' ); \n    remove_all_filters( 'the_excerpt' ); \n    add_filter( 'get_the_excerpt', array( $advanced_excerpt, 'filter_excerpt' ) );\n}<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/doing_filter\/\">doing_filter()<\/a><\/li>\n<\/ul>\n<p>Cette fonction de filtre v\u00e9rifie si le filtre sp\u00e9cifi\u00e9 est en cours d&rsquo;ex\u00e9cution \u00e0 ce moment.<\/p>\n<pre><code class=\"language-php\">if ( doing_filter( 'save_post' ) ) {\n  \u00a0 \/\/ run your code here\n}<\/code><\/pre>\n<p>Cela retourne une valeur bool\u00e9enne (<code><strong>true<\/strong><\/code> ou <code><strong>false<\/strong><\/code>).<\/p>\n<p>Vous devez noter la diff\u00e9rence entre cette fonction et la fonction <code><strong>current_filter()<\/strong><\/code>, qui renvoie le nom du filtre ou de l&rsquo;action en cours d&rsquo;ex\u00e9cution (une cha\u00eene de caract\u00e8res).<\/p>\n<h4>Exemple de filtres 1 : ajout d&rsquo;un filtre de blasph\u00e8mes pour les commentaires<\/h4>\n<p>La gestion de tous les <a href=\"https:\/\/kinsta.com\/fr\/blog\/plugins-commentaires-wordpress\/\">commentaires sur votre site WordPress<\/a> peut \u00eatre un processus lourd. Le filtre <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/comment_text\/\">comment_text<\/a> vous permet de d\u00e9finir des r\u00e8gles pour modifier les commentaires avant qu&rsquo;ils ne soient affich\u00e9s \u00e0 l&rsquo;\u00e9cran.<\/p>\n<figure id=\"attachment_72268\" aria-describedby=\"caption-attachment-72268\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72268 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/commentaires-non-filtres-blasphemes-factices-marques.png\" alt=\"Commentaires non filtr\u00e9s avec des blasph\u00e8mes factices marqu\u00e9s\" width=\"1100\" height=\"563\"><figcaption id=\"caption-attachment-72268\" class=\"wp-caption-text\">Commentaires non filtr\u00e9s avec des blasph\u00e8mes factices marqu\u00e9s<\/figcaption><\/figure>\n<p>Vous pouvez demander \u00e0 WordPress de supprimer automatiquement les jurons avant qu&rsquo;ils ne soient affich\u00e9s aux visiteurs de votre site. Allons-y.<\/p>\n<pre><code class=\"language-php\">\/\/ hook into the 'comment_text' filter with the callback function\nadd_filter( 'comment_text', 'the_profanity_filter' );\n\n\/\/ define a callback function to filter profanities in comments \nfunction the_profanity_filter( $comment_text ) {\n    \/\/ define an array of profane words and count how many are there \n    $profaneWords = array('fudge', 'darn', 'pickles', 'blows', 'dangit');\n    $profaneWordsCount = sizeof($profaneWords);\n    \n    \/\/ loop through the profanities in $comment_text and replace them with '*'\n    for($i=0; $i &lt; $profaneWordsCount; $i++) {\n        $comment_text = str_ireplace( $profaneWords[$i], str_repeat('*', strlen( $profaneWords[$i]) ), $comment_text );\n    } \n    \n    return $comment_text;\n}<\/code><\/pre>\n<p>Voici une explication ligne par ligne du code :<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/comment_text\/\">comment_text<\/a> est un filtre qui vous permet de modifier le texte d&rsquo;un commentaire avant que le navigateur ne l&rsquo;affiche. Vous pouvez enregistrer votre fonction de rappel avec lui pour filtrer sa sortie.<\/li>\n<li>La fonction <code><strong>add_filter()<\/strong><\/code> vous permet de vous connecter au filtre <code><strong>comment_text<\/strong><\/code> et de lui associer une fonction de rappel.<\/li>\n<li><code><strong>the_profanity_filter()<\/strong><\/code> est le nom de la fonction de rappel. Elle n&rsquo;accepte qu&rsquo;un seul param\u00e8tre, qui est une cha\u00eene de caract\u00e8res contenant le texte du commentaire. D\u00e9finissez cette fonction personnalis\u00e9e avec la logique de code appropri\u00e9e.<\/li>\n<li>Stockez tous les mots profanes dans un tableau PHP appel\u00e9 <code><strong>profaneWords<\/strong><\/code>. Vous pouvez ajouter autant de mots que vous le souhaitez \u00e0 ce tableau. Je stocke la taille de ce tableau dans la variable <code><strong>profaneWordsCount<\/strong><\/code> \u00e0 l\u2019aide de la <a href=\"https:\/\/www.php.net\/manual\/en\/function.sizeof.php\">fonction PHP sizeof()<\/a>.<\/li>\n<li>Passez en boucle tous les mots profanes et utilisez la <a href=\"https:\/\/www.php.net\/manual\/en\/function.str-ireplace.php\">fonction str_ireplace()<\/a> par d\u00e9faut de PHP pour remplacer tous les jurons correspondants par des symboles <code>*<\/code>. Comme il s&rsquo;agit d&rsquo;une fonction de remplacement de cha\u00eene insensible \u00e0 la casse, vous n&rsquo;avez pas \u00e0 vous soucier des majuscules.<\/li>\n<li>Utilisez <code><strong>return<\/strong><\/code> pour afficher le texte de commentaire filtr\u00e9.<\/li>\n<\/ul>\n<p>Enregistrez les changements dans votre fichier d\u2019extension personnalis\u00e9e et rechargez tout message avec des commentaires. Tous les mots que vous avez inclus dans le tableau <code><strong>profaneWords<\/strong><\/code> doivent maintenant \u00eatre remplac\u00e9s par des symboles \u00ab\u00a0<strong>*<\/strong>\u00a0\u00bb.<\/p>\n<figure id=\"attachment_72256\" aria-describedby=\"caption-attachment-72256\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72256 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/remplacement-jurons-commentaires-symboles.png\" alt=\"Remplacement des jurons dans les commentaires par des symboles \u00ab\u00a0*\u00a0\u00bb.\" width=\"1100\" height=\"563\"><figcaption id=\"caption-attachment-72256\" class=\"wp-caption-text\">Remplacement des jurons dans les commentaires par des symboles \u00ab\u00a0*\u00a0\u00bb.<\/figcaption><\/figure>\n<p>Les commentaires originaux seront toujours disponibles tels quels dans la base de donn\u00e9es. Ce filtre ne modifie que le texte du commentaire avant qu&rsquo;il ne soit transmis \u00e0 l\u2019interface publique.<\/p>\n<figure id=\"attachment_72263\" aria-describedby=\"caption-attachment-72263\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72263 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/commentaire-original-administration-site.png\" alt=\"Le commentaire original sur l\u2019administration du site\" width=\"1100\" height=\"498\"><figcaption id=\"caption-attachment-72263\" class=\"wp-caption-text\">Le commentaire original sur l\u2019administration du site<\/figcaption><\/figure>\n<p>Une fois que vous \u00eates accroch\u00e9 au bon filtre, vous pouvez faire beaucoup de choses sympas avec lui.<\/p>\n<p>Par exemple, vous pouvez \u00e9galement utiliser le filtre <code><strong>comment_text<\/strong><\/code> pour supprimer les URLs de tous les commentaires (assurez-vous de lire ce guide d\u00e9taill\u00e9 sur la <a href=\"https:\/\/kinsta.com\/fr\/blog\/spams-commentaires-wordpress\/\">mani\u00e8re de bloquer les commentaires ind\u00e9sirables dans WordPress<\/a>).<\/p>\n<p>Vous pouvez \u00e9galement vous accrocher au filtre <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/pre_comment_approved\/\">pre_comment_approved<\/a> et marquer les commentaires comme approuv\u00e9s, ind\u00e9sirables ou dans la corbeille en fonction de crit\u00e8res pr\u00e9d\u00e9finis.<\/p>\n<h4>Exemple de filtres 2 : Ins\u00e9rer un contenu apr\u00e8s un article<\/h4>\n<p>Vous avez d\u00e9j\u00e0 vu comment WordPress utilise le filtre <code><strong>the_content<\/strong><\/code> pour modifier le contenu d&rsquo;un article ou d&rsquo;une page. Utilisons le m\u00eame filtre pour ajouter quelque chose \u00e0 la fin de chaque article.<\/p>\n<pre><code class=\"language-php\">\/\/ hook into 'the_content' filter with a callback function\nadd_filter( 'the_content', 'insert_content_below' );\n\n\/\/ define the callback function to insert something below the post\nfunction insert_content_below( $content ) {\n    \/\/ check to see if we're inside the main loop in a single post\n    if ( is_single() && in_the_loop() && is_main_query() ) {\n  \u00a0     return $content . \"&lt;h3 style=\\\"text-align: center;\\\"&gt;Let me insert myself here&lt;\/h3&gt;&lt;p style=\\\"text-align: center;border: 3px solid #5333ed;\\\"&gt;I'll appear after the post. You can insert anything here. Even HTML. Headers, links, images, scripts, I'll take them all and append it to the end of the post content. You can also give me a class, so you can style me easily with CSS style sheets.&lt;\/p&gt;\" ;\n    } \n    \n    return $content;\n}<\/code><\/pre>\n<p>Comprennons la logique du code dans l&rsquo;exemple ci-dessus :<\/p>\n<ul>\n<li>Le filtre de hook <code><strong>the_content<\/strong><\/code> vous aide \u00e0 r\u00e9cup\u00e9rer le contenu de l\u2019article en cours et \u00e0 le personnaliser.<\/li>\n<li>Utilisez la fonction <code><strong>add_filter()<\/strong><\/code> pour vous connecter au filtre <code><strong>the_content<\/strong><\/code> avec la fonction de rappel <code><strong>insert_content_below()<\/strong><\/code>.<\/li>\n<li>D\u00e9finissez la fonction de rappel en passant le contenu de l\u2019article en cours comme param\u00e8tre (<code><strong>$content<\/strong><\/code>).<\/li>\n<li>Dans la fonction de rappel, v\u00e9rifiez que vous ne filtrez que le contenu de la requ\u00eate principale, qui dans ce cas est le contenu de l\u2019article. Si vous ne le v\u00e9rifiez pas, le code filtrera parfois involontairement le contenu d&rsquo;autres endroits, comme les colonnes lat\u00e9rales et les pieds de page.<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/is_main_query\/\">is_main_query()<\/a> et <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/in_the_loop\/#comment-1364\">in_the_loop()<\/a> d\u00e9terminent si la requ\u00eate est une requ\u00eate principale et se produit dans la boucle principale de WordPress.<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/is_single\/\">is_single()<\/a> v\u00e9rifie sous condition si la requ\u00eate porte sur un article individuel.<\/li>\n<li>Utilisez l&rsquo;<a href=\"https:\/\/www.php.net\/manual\/en\/language.operators.string.php\">op\u00e9rateur de concat\u00e9nation de cha\u00eenes de<\/a> PHP (<code><strong>$content . \"your additions\"<\/strong><\/code>) pour ajouter des \u00e9l\u00e9ments suppl\u00e9mentaires au contenu de la page.<\/li>\n<li><code><strong>return<\/strong><\/code> le commentaire filtr\u00e9 si toutes les conditions ci-dessus sont remplies. Si ce n&rsquo;est pas le cas, retournez simplement le contenu sans le modifier.<\/li>\n<\/ul>\n<p>Enregistrez votre fichier d\u2019extension, chargez n&rsquo;importe quel article sur votre site et faites le d\u00e9filer jusqu&rsquo;\u00e0 la fin.<\/p>\n<figure id=\"attachment_72261\" aria-describedby=\"caption-attachment-72261\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72261 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/inserer-quelque-chose-fin-contenu-article.png\" alt=\"Ins\u00e9rer quelque chose \u00e0 la fin du contenu de l\u2019article\" width=\"1100\" height=\"491\"><figcaption id=\"caption-attachment-72261\" class=\"wp-caption-text\">Ins\u00e9rer quelque chose \u00e0 la fin du contenu de l\u2019article<\/figcaption><\/figure>\n<p>Vous pouvez utiliser la m\u00eame logique pour ajouter n&rsquo;importe quoi au d\u00e9but de tous vos articles en inversant la position des param\u00e8tres de concat\u00e9nation des cha\u00eenes (<code><strong>\"your additions\"<\/strong> . <strong>$content<\/strong><\/code>).<\/p>\n<h3>Personnaliser la page de connexion WordPress avec des hooks<\/h3>\n<p>Utilisons \u00e0 la fois des actions et des filtres pour personnaliser la <a href=\"https:\/\/kinsta.com\/fr\/blog\/url-connexion-wordpress\/\">page de connexion par d\u00e9faut de WordPress<\/a>. Pour ce faire, je vais cr\u00e9er une nouvelle extension appel\u00e9e <strong>Sal Custom Login Page<\/strong>. Vous pouvez trouver le code source complet de cette extension \u00e0 la fin de cette section.<\/p>\n<figure id=\"attachment_72243\" aria-describedby=\"caption-attachment-72243\" style=\"width: 1110px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72243 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/ecran-final-connexion-wordpress-personnalise.jpg\" alt=\"L'\u00e9cran final de connexion WordPress personnalis\u00e9\" width=\"1110\" height=\"700\"><figcaption id=\"caption-attachment-72243\" class=\"wp-caption-text\">L&rsquo;\u00e9cran final de connexion WordPress personnalis\u00e9<\/figcaption><\/figure>\n<p>Commen\u00e7ons par ajouter les champs d&rsquo;en-t\u00eate standard de l\u2019extension et l&rsquo;enregistrer dans WordPress.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/*\nPlugin Name:  Sal Custom Login Page\nVersion:  1.0\nDescription:  Demonstrating WordPress Hooks (Actions and Filters) by customizing the WordPress login page.\nAuthor:  Salman Ravoof\nAuthor URI:  https:\/\/www.salmanravoof.com\/License: GPLv2 or later\nLicense URI: https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\nText Domain:  sal-custom-login-page\n*\/\n\n\/\/ enqueueing the custom style sheet on WordPress login page\nadd_action( 'login_enqueue_scripts', 'salhooks_login_stylesheet');\nfunction salhooks_login_stylesheet() {\n    \/\/ Load the style sheet from the plugin folder\n    wp_enqueue_style( 'sal-custom-login-page', plugin_dir_url( __FILE__ ).'sal-custom-login-page-styles.css' );\n}<\/code><\/pre>\n<p>Tout d&rsquo;abord, accrochez-vous \u00e0 l&rsquo;action <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_enqueue_scripts\/\">login_enque_scripts<\/a> pour obtenir votre feuille de style personnalis\u00e9e. Tous les scripts ou styles que vous mettez en file d&rsquo;attente ici sont inclus dans la section d&rsquo;en-t\u00eate de votre page de connexion.<\/p>\n<p>Si vous souhaitez charger des scripts et des feuilles de style personnalis\u00e9s sur l\u2019interface publique de votre site (plut\u00f4t que sur la zone d\u2019administration ou la zone de connexion de l&rsquo;administration), vous devez vous accrocher \u00e0 l&rsquo;action <code><strong>wp_enqueue_scripts<\/strong><\/code>. Vous pouvez en savoir plus \u00e0 ce sujet dans le <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/wp_enqueue_scripts\/\">Codex WordPress<\/a> et dans l&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/blog\/wp-enqueue-scripts\/\">article de Kinsta sur l&rsquo;utilisation de wp_enqueue_scripts<\/a>.<\/p>\n<p>\u00c0 l&rsquo;int\u00e9rieur de la fonction de rappel <code><strong>salhooks_login_stylesheet()<\/strong><\/code>, utilisez la fonction <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_style\/\">wp_enqueue_style()<\/a> pour charger la feuille de style personnalis\u00e9e (<code><strong>sal-custom-login-page-styles.css<\/strong><\/code>) plac\u00e9e dans le m\u00eame r\u00e9pertoire de l\u2019extension. La fonction <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/plugin_dir_url\/\">plugin_dir_url( __FILE__ )<\/a> int\u00e9gr\u00e9e \u00e0 WordPress permet d&rsquo;obtenir facilement le chemin de l&rsquo;URL (avec une barre oblique \u00e0 la fin) du r\u00e9pertoire de l\u2019extension.<\/p>\n<p>Je ne vais pas expliquer les styles CSS appliqu\u00e9s ici, mais vous pouvez les trouver tous dans le code source li\u00e9 \u00e0 la fin de cette section.<\/p>\n<pre><code class=\"language-php\">\/\/ Custom login ERROR message to keep the site more secure\nadd_filter( 'login_errors', 'salhooks_remove_login_errors', 10 );\nfunction salhooks_remove_login_errors() {\n    return 'Incorrect credentials. Please try again!';\n}<\/code><\/pre>\n<p>Ensuite, accrochez-vous au filtre <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_errors\/\">login_errors<\/a> pour modifier le message d&rsquo;erreur affich\u00e9 lorsque quelqu&rsquo;un saisit des informations d&rsquo;identification incorrectes. Le filtre du message d&rsquo;erreur emp\u00eachera les attaquants de deviner facilement votre nom d&rsquo;utilisateur.<\/p>\n<pre><code class=\"language-php\">\/\/ Remove the login form box shake animation for incorrect credentials\nadd_action( 'login_head', 'remove_login_error_shake' );\nfunction remove_login_error_shake() {\n    remove_action( 'login_head', 'wp_shake_js', 12 );\n}<\/code><\/pre>\n<p>Chaque fois qu&rsquo;une personne saisit des donn\u00e9es de connexion incorrectes, la bo\u00eete du formulaire de connexion tremble agressivement. Cette \u00e9tape est facultative, mais je l&rsquo;ai incluse pour montrer que vous pouvez \u00e9galement supprimer certaines fonctionnalit\u00e9s de la page de connexion.<\/p>\n<p>Vous en apprendrez plus sur les fonctions <code><strong>remove_action()<\/strong><\/code> et <code><strong>remove_filter()<\/strong><\/code> dans la derni\u00e8re section de cet article.<\/p>\n<pre><code class=\"language-php\">\/\/ Change the logo and header link above the login form\nadd_filter( 'login_headerurl', 'salhooks_login_headerurl');\nfunction salhooks_login_headerurl( $url ) {\n    $url = 'https:\/\/salmanravoof.com';\n    return $url;\n}\n\nadd_filter( 'login_headertext', 'salhooks_login_headertext');\nfunction salhooks_login_headertext( $text ) {\n    $text = 'Salman Ravoof';\n    return $text;\n}<\/code><\/pre>\n<p>L&rsquo;\u00e9tape finale consiste \u00e0 modifier l&rsquo;URL et le texte de l&rsquo;en-t\u00eate de connexion. Vous pouvez vous connecter aux filtres <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_headerurl\/\">login_headerurl<\/a> et <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_headertext\/\">login_headertext<\/a> pour les modifier tous les deux.<\/p>\n<p>Si vous souhaitez vous appuyer sur cette extension et poursuivre vos exp\u00e9riences, vous pouvez <a href=\"https:\/\/github.com\/SalmanRavoof\/sal-custom-login-page\">t\u00e9l\u00e9charger le code source de l\u2019extension<\/a> et vous lancer.<\/p>\n<h2>Liste et ressources de hooks WordPress<\/h2>\n<p>Il est difficile de m\u00e9moriser tous les diff\u00e9rents hooks de WordPress. Il y a des milliers d&rsquo;actions et de filtres int\u00e9gr\u00e9s auxquels il est possible de s&rsquo;accrocher. Par cons\u00e9quent, trouver un hook appropri\u00e9 peut parfois ressembler \u00e0 une chasse au tr\u00e9sor.<\/p>\n<p>Heureusement, il existe diverses ressources que vous pouvez utiliser pour trouver le hook parfait pour vos besoins.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/plugins\/hooks\/\">Manuel des extensions WordPress &#8211; Hooks<\/a><\/li>\n<\/ul>\n<p>Le premier endroit pour se familiariser avec les hooks est le Codex WordPress, en particulier sa section sur les hooks dans le manuel des extensions. Vous y trouverez des informations essentielles sur les hooks et des liens pour compl\u00e9ter la documentation sur toutes les actions et les filtres.<\/p>\n<figure id=\"attachment_72272\" aria-describedby=\"caption-attachment-72272\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72272 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/commencez-apprendre-hooks-manuel-extensions-wordpress.png\" alt=\"Commencez \u00e0 apprendre les hooks avec le manuel des extensions WordPress\" width=\"1100\" height=\"539\"><figcaption id=\"caption-attachment-72272\" class=\"wp-caption-text\">Commencez \u00e0 apprendre les hooks avec le manuel des extensions WordPress<\/figcaption><\/figure>\n<p>Ajoutez ces liens utiles du manuel des extensions \u00e0 vos favoris pour acc\u00e9l\u00e9rer votre recherche :<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API#Function_Reference\">Plugin API &#8211; R\u00e9f\u00e9rence de fonction des hooks<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\">Plugin API &#8211; R\u00e9f\u00e9rence de l&rsquo;action<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\">Plugin API &#8211; R\u00e9f\u00e9rence du filtre<\/a><\/li>\n<\/ul>\n<p>Les pages de r\u00e9f\u00e9rence des actions et des filtres vous donneront une liste de tous les hooks qui s&rsquo;ex\u00e9cutent g\u00e9n\u00e9ralement lors d&rsquo;une requ\u00eate WordPress sp\u00e9cifique.<\/p>\n<p>Par exemple, vous pouvez trouver tous les hooks d\u00e9clench\u00e9s lorsque vous acc\u00e9dez \u00e0 une page d&rsquo;administration, lorsque vous traitez des fichiers joints de pages d\u2019articles ou des <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-qu-une-taxonomie\/\">cat\u00e9gories<\/a>.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/\">R\u00e9f\u00e9rence du code WordPress<\/a><\/li>\n<\/ul>\n<p>Le Codex WordPress comprend \u00e9galement un outil de recherche pratique pour trouver toutes ses fonctions, ses crochets, ses m\u00e9thodes et ses classes. Cette page r\u00e9pertorie \u00e9galement les nouveaux composants et les mises \u00e0 jour de la derni\u00e8re version de WordPress. Dirigez-vous d&rsquo;abord ici si vous voulez trouver ce qui se passe dans WordPress.<\/p>\n<figure id=\"attachment_72271\" aria-describedby=\"caption-attachment-72271\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72271 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/recherchez-trouve-wordpress.png\" alt=\"Recherchez ici tout ce qui se trouve dans WordPress\" width=\"1100\" height=\"381\"><figcaption id=\"caption-attachment-72271\" class=\"wp-caption-text\">Recherchez ici tout ce qui se trouve dans WordPress<\/figcaption><\/figure>\n<ul>\n<li><a href=\"https:\/\/adambrown.info\/p\/wp_hooks\/hook\"> Index des hooks WordPress d&rsquo;Adam R Brown <\/a><\/li>\n<\/ul>\n<p>Cet index des hooks WordPress classe tous les hooks par type, par version de WordPress o\u00f9 ils ont \u00e9t\u00e9 lanc\u00e9s, et s&rsquo;ils sont obsol\u00e8tes.<\/p>\n<figure id=\"attachment_72248\" aria-describedby=\"caption-attachment-72248\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72248 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/index-hooks-wordpress-adam-r-brown.png\" alt=\"Index des hooks WordPress d'Adam R Brown\" width=\"1100\" height=\"363\"><figcaption id=\"caption-attachment-72248\" class=\"wp-caption-text\">Index des hooks WordPress d&rsquo;Adam R Brown<\/figcaption><\/figure>\n<p>En triant les hooks par ordre d&rsquo;apparition, vous verrez que les hooks les plus anciens de WordPress sont toujours les plus utilis\u00e9s. Si vous \u00eates <a href=\"https:\/\/kinsta.com\/fr\/blog\/tutoriels-php\/\">nouveau dans le d\u00e9veloppement de WordPress<\/a>, vous familiariser avec ces actions et filtres populaires est le moyen le plus rapide de vous rattraper.<\/p>\n<p>Bien que cet index n&rsquo;ait pas \u00e9t\u00e9 mis \u00e0 jour depuis WordPress 5.1, il est toujours utile de parcourir tous les principaux hooks.<\/p>\n<p>Vous avez toujours du mal \u00e0 trouver le hook que vous voulez ? Une recherche en ligne avec le bon mot-cl\u00e9 est toujours un bon moyen de commencer. Si tout le reste \u00e9choue, vous pouvez toujours creuser dans le code de WordPress.<\/p>\n<h2>Trouver des hooks enregistr\u00e9s sur une page WordPress<\/h2>\n<p>Comme nous l&rsquo;avons vu, WordPress a des tonnes de hooks disponibles, mais tous les hooks ne se d\u00e9clenchent pas sur chaque page. Si vous pouvez trouver quelles actions et quels filtres vous pouvez utiliser sur une page particuli\u00e8re, alors vous avez gagn\u00e9 la moiti\u00e9 de la bataille.<\/p>\n<p>Bien que vous puissiez utiliser des outils de d\u00e9bogage PHP avanc\u00e9s comme <a href=\"https:\/\/xdebug.org\/\">xdebug<\/a> et <a href=\"https:\/\/github.com\/squizlabs\/PHP_CodeSniffer\">PHPCS<\/a> pour vous aider, il existe des outils de d\u00e9veloppement plus simples comme Debug Bar et Query Monitor que vous pouvez ex\u00e9cuter dans WordPress.<\/p>\n<h3>Barre de d\u00e9bogage avec des actions et des modules de filtre<\/h3>\n<p><a href=\"https:\/\/wordpress.org\/plugins\/debug-bar\/\">Debug Bar<\/a> est une extension officielle de WordPress qui ajoute un menu <strong>Debug<\/strong> \u00e0 votre barre d&rsquo;administration. Elle affiche les avertissements et les notices de PHP, les requ\u00eates de cache, les requ\u00eates <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mysql\/\">MySQL<\/a> et d&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/blog\/debogage-wordpress\/\">autres informations utiles pour le d\u00e9bogage<\/a>.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Cette extension n&rsquo;a pas \u00e9t\u00e9 r\u00e9cemment mise \u00e0 jour, ni test\u00e9e avec les derni\u00e8res versions majeures de WordPress. Nous la mentionnons comme une extension pratique pour en savoir plus sur les hooks de WordPress. Utilisez-la dans un <a href=\"https:\/\/kinsta.com\/fr\/docs\/hebergement-wordpress\/environnement-staging\/\">environnement de staging<\/a>.<\/p>\n<\/aside>\n\n<figure id=\"attachment_72542\" aria-describedby=\"caption-attachment-72542\" style=\"width: 1500px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/extension-wordpress-debug-bar.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72542 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/extension-wordpress-debug-bar.jpg\" alt=\"L\u2019extension WordPress Debug Bar\" width=\"1500\" height=\"500\"><\/a><figcaption id=\"caption-attachment-72542\" class=\"wp-caption-text\">L\u2019extension WordPress Debug Bar<\/figcaption><\/figure>\n<p>Apr\u00e8s avoir install\u00e9 l\u2019extension, vous devez ajouter le code ci-dessous au fichier <code><strong>wp-config.php<\/strong><\/code> de votre site pour activer ses fonctions de d\u00e9bogage.<\/p>\n<pre><code class=\"language-php\">define( 'WP_DEBUG', true ); \/\/ tracks PHP Warnings and Notices\ndefine( 'SAVEQUERIES', true ); \/\/ tracks and displays MySQL queries<\/code><\/pre>\n<p>Vous devriez maintenant voir l&rsquo;option de menu <strong>Debug<\/strong> s&rsquo;afficher dans votre barre d&rsquo;administration. En cliquant sur cette option, vous acc\u00e9derez \u00e0 son tableau de bord o\u00f9 vous pourrez voir les diff\u00e9rentes requ\u00eates et caches attach\u00e9es \u00e0 la page \u00e0 partir de laquelle vous y avez acc\u00e9d\u00e9.<\/p>\n<figure id=\"attachment_72273\" aria-describedby=\"caption-attachment-72273\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72273 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/menu-debug-barre-administration-wordpress.png\" alt=\"Le menu \u00ab\u00a0Debug\u00a0\u00bb dans la barre d'administration de WordPress\" width=\"1100\" height=\"363\"><figcaption id=\"caption-attachment-72273\" class=\"wp-caption-text\">Le menu \u00ab\u00a0Debug\u00a0\u00bb dans la barre d&rsquo;administration de WordPress<\/figcaption><\/figure>\n<p>Ensuite, vous devez installer l\u2019extension <a href=\"https:\/\/wordpress.org\/plugins\/debug-bar-actions-and-filters-addon\/\">Debug Bar Actions ans Filters Addon<\/a>. Il s&rsquo;agit d&rsquo;une extension pratique qui ajoutera deux onglets suppl\u00e9mentaires \u00e0 votre tableau de bord de la barre de d\u00e9bogage pour afficher les actions et les filtres d\u00e9clench\u00e9s sur la requ\u00eate en cours.<\/p>\n<figure id=\"attachment_72253\" aria-describedby=\"caption-attachment-72253\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72253 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/actions-enumerees-ordre-chargement-page-cours.png\" alt=\"Actions \u00e9num\u00e9r\u00e9es dans leur ordre de chargement pour la page en cours\" width=\"1100\" height=\"491\"><figcaption id=\"caption-attachment-72253\" class=\"wp-caption-text\">Actions \u00e9num\u00e9r\u00e9es dans leur ordre de chargement pour la page en cours<\/figcaption><\/figure>\n<p>Elle listera \u00e9galement toutes les fonctions qui leur sont rattach\u00e9es avec leur priorit\u00e9.<\/p>\n<figure id=\"attachment_72254\" aria-describedby=\"caption-attachment-72254\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72254 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/filtres-listes-priorite-fonctions-rappel-enregistrees.png\" alt=\"Filtres list\u00e9s avec leur priorit\u00e9 et leurs fonctions de rappel enregistr\u00e9es\" width=\"1100\" height=\"509\"><figcaption id=\"caption-attachment-72254\" class=\"wp-caption-text\">Filtres list\u00e9s avec leur priorit\u00e9 et leurs fonctions de rappel enregistr\u00e9es<\/figcaption><\/figure>\n<p>Vous pouvez cliquer sur le menu <strong>Debug<\/strong> depuis n&rsquo;importe quelle page de votre site pour conna\u00eetre toutes les actions et les filtres auxquels vous pouvez acc\u00e9der sur cette page.<\/p>\n<h3>Query Monitor<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/fr\/blog\/query-monitor\/\">Query Monitor<\/a> est un puissant panneau d&rsquo;outils de d\u00e9veloppement pour WordPress. Vous pouvez l&rsquo;utiliser pour creuser dans les hooks disponibles sur une page et leur ordre de chargement.<\/p>\n<figure id=\"attachment_72543\" aria-describedby=\"caption-attachment-72543\" style=\"width: 1500px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/extension-wordpress-query-monitor.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72543 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/extension-wordpress-query-monitor.jpg\" alt=\"Extension WordPress Query Monitor\" width=\"1500\" height=\"500\"><\/a><figcaption id=\"caption-attachment-72543\" class=\"wp-caption-text\">Extension WordPress Query Monitor<\/figcaption><\/figure>\n<p>Contrairement \u00e0 Debug Bar, vous n&rsquo;avez pas besoin d&rsquo;installer de modules pour voir les actions et les filtres d\u00e9clench\u00e9s sur une certaine page.<\/p>\n<figure id=\"attachment_72267\" aria-describedby=\"caption-attachment-72267\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72267 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/acceder-query-monitor-depuis-barre-administration.png\" alt=\"Vous pouvez acc\u00e9der \u00e0 Query Monitor depuis la barre d'administration\" width=\"1100\" height=\"438\"><figcaption id=\"caption-attachment-72267\" class=\"wp-caption-text\">Vous pouvez acc\u00e9der \u00e0 Query Monitor depuis la barre d&rsquo;administration<\/figcaption><\/figure>\n<p>Query Monitor vous donne \u00e9galement plus d&rsquo;informations sur l&rsquo;endroit exact d&rsquo;o\u00f9 un hook est tir\u00e9.<\/p>\n<figure id=\"attachment_72266\" aria-describedby=\"caption-attachment-72266\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72266 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/panneau-hooks-actions-query-monitor.png\" alt=\"Le panneau Hooks &#038; Actions dans Query Monitor\" width=\"1100\" height=\"642\"><figcaption id=\"caption-attachment-72266\" class=\"wp-caption-text\">Le panneau Hooks &#038; Actions dans Query Monitor<\/figcaption><\/figure>\n<p>Dans la colonne des composants, vous pouvez voir que la plupart des hooks sont enregistr\u00e9s \u00e0 partir du c\u0153ur. Mais certains hooks sont enregistr\u00e9s \u00e0 partir d&rsquo;un th\u00e8me ou d&rsquo;une extension. Quelques hooks peuvent \u00eatre enregistr\u00e9s \u00e0 partir de plus d&rsquo;un composant.<\/p>\n<p>Vous pouvez utiliser les <a href=\"https:\/\/kinsta.com\/fr\/blog\/menu-deroulant-wordpress\/\">menus d\u00e9roulants<\/a> de hook et de composant pour ne voir que les hooks dont vous avez besoin.<\/p>\n<p><strong>Note<\/strong> : Query Monitor utilise le terme \u00ab\u00a0Hooks\u00a0\u00bb pour d\u00e9signer \u00e0 la fois les actions et les filtres, mais il appelle les fonctions de rappel enregistr\u00e9es \u00ab\u00a0Actions\u00a0\u00bb. Il s&rsquo;agit d&rsquo;une mauvaise d\u00e9finition technique qui peut pr\u00eater \u00e0 confusion, alors gardez bien cela \u00e0 l&rsquo;esprit.<\/p>\n<p>Vous pouvez faire plus que simplement v\u00e9rifier toutes les requ\u00eates et demandes avec Query Monitor. Il comprend \u00e9galement des fonctionnalit\u00e9s avanc\u00e9es telles que la liste des styles, des scripts, des <a href=\"https:\/\/kinsta.com\/fr\/blog\/wordpress-multilingue\/\">langages<\/a>, des <a href=\"https:\/\/kinsta.com\/fr\/blog\/admin-ajax\/\">appels Ajax<\/a>, des contr\u00f4les de capacit\u00e9 utilisateur et des <a href=\"https:\/\/kinsta.com\/fr\/blog\/api-rest-wordpress\/\">appels API REST<\/a>.<\/p>\n<h2>Le hook \u00ab\u00a0all\u00a0\u00bb<\/h2>\n<p>WordPress poss\u00e8de <a href=\"https:\/\/developer.wordpress.org\/plugins\/hooks\/advanced-topics\/#debugging-with-the-all-hook\">un hook sp\u00e9cial appel\u00e9 \u00ab\u00a0all\u00a0\u00bb<\/a> que vous pouvez utiliser pour lancer une fonction de rappel pour chaque hook, qu&rsquo;il soit ou non enregistr\u00e9 avec tous les autres. Il est utile pour <a href=\"https:\/\/kinsta.com\/fr\/blog\/debogage-wordpress\/\">d\u00e9boguer les plantages de pages<\/a> ou si vous voulez savoir quand un \u00e9v\u00e9nement particulier se produit.<\/p>\n<p>Par exemple, vous pouvez utiliser le crochet <code><strong>all<\/strong><\/code> comme dans l&rsquo;exemple ci-dessous pour faire un <code><strong>echo<\/strong><\/code> \u00e0 toutes les actions en cours.<\/p>\n<pre><code class=\"language-php\">\/\/ echo all the actions being run\nfunction debug_helper_function(){\n\u00a0 \u00a0 echo '&lt;p&gt;' . current_action() . '&lt;\/p&gt;';\n}\nadd_action( 'all', 'debug_helper_function' );<\/code><\/pre>\n<p><code><strong>function debug_helper_function()<\/strong><\/code> d\u00e9finie ci-dessus sera ex\u00e9cut\u00e9e lorsqu&rsquo;une action se d\u00e9clenchera. Savoir quelle \u00e9tait la derni\u00e8re action ex\u00e9cut\u00e9e vous donnera une meilleure id\u00e9e de ce que vous devez examiner.<\/p>\n<h2>O\u00f9 sont stock\u00e9s les hooks WordPress ?<\/h2>\n<p>WordPress utilise la classe <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_hook\/\">WP_Hook<\/a> pour impl\u00e9menter le fonctionnement des hooks. Cette classe de base est utilis\u00e9e pour g\u00e9rer toutes les actions et les filtres int\u00e9gr\u00e9s \u00e0 WordPress. Vous pouvez trouver presque tout le code relatif \u00e0 cette classe dans le fichier <a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/5.4\/src\/wp-includes\/class-wp-hook.php\">wp-includes\/class-wp-hook.php<\/a>.<\/p>\n<p>Techniquement, la classe <code><strong>WP_Hook<\/strong><\/code> est un tableau d&rsquo;objets comprenant des propri\u00e9t\u00e9s telles que les appels, les it\u00e9rations, current_priority, nesting_level et doing_action. Elle d\u00e9finit \u00e9galement un grand nombre de fonctions de hook utiles qui peuvent \u00eatre appel\u00e9es \u00e0 l&rsquo;aide des <a href=\"https:\/\/developer.wordpress.org\/reference\/files\/wp-includes\/class-wp-hook.php\/\">m\u00e9thodes WP_Hook<\/a>.<\/p>\n<p>La plupart des d\u00e9veloppeurs de WordPress n&rsquo;ont pas \u00e0 se soucier de l&#8217;emplacement des hooks des boutiques WordPress tant qu&rsquo;ils respectent les directives de l&rsquo;API des extensions.<\/p>\n\n<h2>Comment cr\u00e9er vos hooks WordPress personnalis\u00e9s<\/h2>\n<p>Vous avez vu les diff\u00e9rents hooks que WordPress fournit gr\u00e2ce \u00e0 son API d\u2019extension. Vous avez \u00e9galement regard\u00e9 comment vous pouvez utiliser les hooks par d\u00e9faut pour injecter votre propre code dans le WordPress.<\/p>\n<p>Si vous \u00eates un <a href=\"https:\/\/kinsta.com\/fr\/blog\/salaire-developpeur-wordpress\/\">d\u00e9veloppeur d\u2019extensions ou de th\u00e8mes<\/a>, il est bon de fournir aux autres d\u00e9veloppeurs un moyen d&rsquo;interagir avec votre code de la m\u00eame mani\u00e8re. C&rsquo;est exactement ce que vous permettent de faire les hooks personnalis\u00e9s. Ils permettent aux autres d\u00e9veloppeurs d&rsquo;\u00e9tendre et de modifier les fonctionnalit\u00e9s de vos extensions et th\u00e8mes.<\/p>\n<p>Il est assez simple de cr\u00e9er ses propres actions et filtres. Vous utilisez les m\u00eames fonctions que celles que le c\u0153ur de WordPress utilise pour cr\u00e9er des hooks. Voyons quelques exemples.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"6\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>How to Create Custom Actions in WordPress<\/h3>\n<p>Utilisez la fonction <code><strong>do_action()<\/strong><\/code> pour cr\u00e9er un hook d&rsquo;action personnalis\u00e9. Voici comment faire :<\/p>\n<pre><code class=\"language-php\">\/\/ the position where you insert your action is where it'll run when called\ndo_action( ' my_unique_custom_action' );\n\/\/ continue with the rest of your code<\/code><\/pre>\n<p>Maintenant, d&rsquo;autres d\u00e9veloppeurs peuvent se connecter \u00e0 votre extension ou \u00e0 votre th\u00e8me sans modifier le code source. Il leur suffit d&rsquo;enregistrer leurs fonctions de rappel \u00e0 l&rsquo;action personnalis\u00e9e de votre extension en utilisant la fonction <code><strong>add_action()<\/strong><\/code>.<\/p>\n<pre><code class=\"language-php\">add_action( 'my_unique_custom_action', 'some_callback_function' );\n\n\/\/ define the callback function you mentioned in the above action function\nsome_callback_function() {\n     \/\/ this code will run wherever your custom action hook is \n}<\/code><\/pre>\n<p>Veillez \u00e0 bien <strong>documenter<\/strong> vos hooks personnalis\u00e9s, en expliquant en d\u00e9tail ce qu&rsquo;ils font. Apr\u00e8s tout, la cr\u00e9ation de hooks personnalis\u00e9s sert principalement \u00e0 aider d&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/blog\/salaire-developpeur-web\/\">autres d\u00e9veloppeurs<\/a> \u00e0 interagir avec votre code.<\/p>\n<h3>Comment cr\u00e9er un filtre personnalis\u00e9 dans WordPress<\/h3>\n<p>Utilisez la fonction <code><strong>apply_filters()<\/strong><\/code> pour cr\u00e9er un filtre personnalis\u00e9. Voici comment vous pouvez le faire :<\/p>\n<pre><code class=\"language-php\">$value_to_filter = \"I'm a string, but this can be any PHP data type\";\n\n\/\/ filters modify a value and are typically tied to a predefined variable\napply_filters( 'my_custom_filter', $value_to_filter );<\/code><\/pre>\n<p>Les param\u00e8tres de votre filtre personnalis\u00e9 doivent inclure un identifiant unique et une valeur \u00e0 filtrer. D&rsquo;autres d\u00e9veloppeurs peuvent se connecter \u00e0 votre filtre personnalis\u00e9 avec la fonction <code><strong>add_filter()<\/strong><\/code> et modifier la valeur pass\u00e9e.<\/p>\n<pre><code class=\"language-php\">add_filter( 'my_custom_filter', 'some_callback_function' );\n\n\/\/ define the callback function you mentioned in the above filter function\nfunction some_callback_function( $value_to_filter ) {\n    \/\/ modify the passed value (or not) \n    return $value_to_filter; \/\/ returning a value is a must for filters\n}<\/code><\/pre>\n<p>Lorsque vous d\u00e9finissez votre filtre personnalis\u00e9, assurez-vous qu&rsquo;il n&rsquo;est pas positionn\u00e9 avant que la valeur qu&rsquo;il est cens\u00e9 filtrer ne soit d\u00e9finie. Si vous ne positionnez pas le filtre correctement, la valeur filtr\u00e9e sera ensuite \u00e9cras\u00e9e par la valeur par d\u00e9faut.<\/p>\n<h3>Convention de d\u00e9nomination des hooks personnalis\u00e9s<\/h3>\n<p>Il est important de choisir un nom unique pour tous vos hooks personnalis\u00e9s. Comme chaque extension ou th\u00e8me peut avoir ses propres hooks personnalis\u00e9s, le fait d&rsquo;avoir des noms de hook identiques peut entra\u00eener des collisions de codes avec des r\u00e9sultats inattendus.<\/p>\n<p>Par exemple, si vous nommez votre action <code><strong>send_email<\/strong><\/code>, il est fort probable que d&rsquo;autres d\u00e9veloppeurs d\u2019extensions choisissent le m\u00eame terme car il n&rsquo;est pas assez unique. Si un site web installe \u00e0 la fois votre extension et celui de l&rsquo;autre d\u00e9veloppeur, cela peut <a href=\"https:\/\/kinsta.com\/fr\/blog\/erreurs-wordpress\/\">provoquer des erreurs qui seront difficiles \u00e0 rep\u00e9rer<\/a>.<\/p>\n<p>Vous pouvez faire pr\u00e9c\u00e9der tous vos hooks personnalis\u00e9s d&rsquo;un identifiant commun pour qu&rsquo;ils restent \u00e0 la fois simples et uniques. Ainsi, au lieu de <code><strong>send_email<\/strong><\/code>, vous pouvez le nommer <code><strong>plugin_name_send_email<\/strong><\/code> (<strong>plugin_name_<\/strong> est ici le pr\u00e9fixe unique).<\/p>\n<h3>D\u00e9monstration de hooks personnalis\u00e9s avec une extension \u00e9volutive<\/h3>\n<p>Cr\u00e9ons une extension \u00e9volutive qui permettra \u00e0 d&rsquo;autres d\u00e9veloppeurs d&rsquo;interagir avec elle en utilisant ses hooks personnalis\u00e9s.<\/p>\n<p>Je vais nommer cette extension <strong>Custom Hooks Demo<\/strong><em>. <\/em>Sa fonction principale est de produire une bo\u00eete de citation \u00e0 chaque fois que vous ins\u00e9rez un code court. Elle comprendra des actions et des filtres personnalis\u00e9s aux bons endroits pour permettre \u00e0 d&rsquo;autres d\u00e9veloppeurs de modifier ou d&rsquo;\u00e9tendre ses fonctionnalit\u00e9s.<\/p>\n<p>Vous pouvez vous r\u00e9f\u00e9rer \u00e0 mon <a href=\"https:\/\/kinsta.com\/fr\/blog\/shortcodes-wordpress\/\">guide des codes courts WordPress<\/a> pour en savoir plus sur le fonctionnement des codes courts.<\/p>\n<p>Commen\u00e7ons par l\u2019extension \u00e9volutive.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/*\nPlugin Name :  Custom Hooks Demo\nDescription :  Demonstrating how to create an extensible WordPress plugin using custom hooks.\nAuthor      :  Salman Ravoof\nAuthor URI  :  https:\/\/salmanravoof.com\/\nLicense     :  GPLv2 or later\nLicense URI :  https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\nText Domain :  custom-hooks-demo\n*\/\n\n\/** \n * the [custom_hooks_demo] shortcode returns the HTML code for a quote box.\n * @return string HTML code for a quote box\n*\/\nadd_shortcode( 'custom_hooks_demo', 'my_shortcode_callback' );\n\nfunction my_shortcode_callback ( $arguments ) {\n    ob_start(); \/\/ start object buffering to collect all output before sending it to the browser\n    \n    \/\/ set an action hook to run before you output anything\n    do_action( 'the_topmost_custom_action' );\n    \n    \/\/ define your variables which you want to allow to be filtered\n    $quote_content = \"Z.E.R.O. That's the number of people who'd like to have any website autoplay music on their browsers.\";\n    $quote_author = \"John Doenuts\";\n    \n    \/\/ create your custom filters after you've set the variables\n    $quote_content = apply_filters( 'custom_quote_content', $quote_content );\n    $quote_author = apply_filters( 'custom_quote_author', $quote_author );\n    \n    \/\/ build the shortcode output template\n    echo \"&lt;div style=\\\"border:3px solid #5333ed;\\\"&gt;&lt;blockquote style=\\\"margin:20px;border-color:#5333ed;\\\"&gt;\";\n    echo $quote_content;\n    echo \"&lt;br&gt;&lt;br&gt;\";\n    echo \"\u2015 &lt;strong&gt;\" . $quote_author . \"&lt;\/strong&gt;\";\n    echo \"&lt;\/blockquote&gt;&lt;\/div&gt;\";\n    \n    \/\/ set an action hook to run after you output everything\n    do_action( 'the_ending_custom_action' );\n    \n    return ob_get_clean(); \/\/ get buffer contents, delete the buffer, and then stop buffering\n}<\/code><\/pre>\n<ul>\n<li>La fonction <code><strong>add_shortcode()<\/strong><\/code> est utilis\u00e9e pour cr\u00e9er le code court personnalis\u00e9. Ensuite, vous d\u00e9finissez la fonction de rappel du code court avec toutes les fonctionnalit\u00e9s de cette extension.<\/li>\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/function.ob-start.php\">ob_start()<\/a> est une fonction PHP qui permet de mettre en m\u00e9moire tampon l\u2019affichage. C&rsquo;est une fonction tr\u00e8s pratique qui indique \u00e0 PHP de conserver toute sortie dans la m\u00e9moire tampon du serveur plut\u00f4t que de l\u2019afficher imm\u00e9diatement. Vous pouvez l&rsquo;utiliser pour construire du code HTML complexe et lisible en PHP.<\/li>\n<li><code><strong>do_action(\"the_topmost_custom_action\"<\/strong>)<\/code> d\u00e9finit votre premi\u00e8re action personnalis\u00e9e. Pour la rendre utile, vous devez la d\u00e9finir avant que l\u2019extension ne produise quoi que ce soit. Les autres d\u00e9veloppeurs peuvent se connecter \u00e0 cette action personnalis\u00e9e pour ex\u00e9cuter leur code avant que ce code court personnalis\u00e9 n&rsquo;affiche quoi que ce soit.<\/li>\n<li>Cr\u00e9ez les variables que vous voulez filtrer. Dans cette extension, ces variables sont <code><strong>$quote_content<\/strong><\/code> et <code><strong>$quote_author<\/strong><\/code>. Ce sont toutes deux des cha\u00eenes de caract\u00e8res dans cet exemple, mais vous pouvez les d\u00e9finir comme n&rsquo;importe quel type de donn\u00e9es PHP (par exemple, entier, bool\u00e9en, tableau).<\/li>\n<li>Utilisez la fonction <code><strong>apply_filters()<\/strong><\/code> pour cr\u00e9er vos filtres personnalis\u00e9s. Comme tous les filtres retournent une valeur, vous pouvez affecter les variables pr\u00e9c\u00e9demment d\u00e9finies \u00e0 la valeur renvoy\u00e9e par ce filtre. D&rsquo;autres d\u00e9veloppeurs peuvent maintenant se connecter \u00e0 ce filtre pour modifier les valeurs par d\u00e9faut des variables pr\u00e9d\u00e9finies.<\/li>\n<li>Utilisez les d\u00e9clarations <code><strong>echo<\/strong><\/code> pour construire ligne par ligne l\u2019affichage de votre code court. Comme nous avons activ\u00e9 la mise en m\u00e9moire tampon, aucun affichage sortie n&rsquo;atteindra le navigateur imm\u00e9diatement.<\/li>\n<li><code><strong>do_action( 'the_ending_custom_action' )<\/strong><\/code> d\u00e9finit votre derni\u00e8re action personnalis\u00e9e. Vous devez la d\u00e9finir \u00e0 la toute fin, mais avant de retourner tout le contenu du tampon.<\/li>\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/function.ob-get-clean.php\">ob_get_clean()<\/a> est une fonction PHP 3-en-1 par d\u00e9faut. Elle r\u00e9cup\u00e8re le contenu de la m\u00e9moire tampon, \u00e9limine toutes les donn\u00e9es de la m\u00e9moire tampon, puis arr\u00eate la mise en m\u00e9moire tampon. Elle <strong><code>return<\/code><\/strong> le contenu de la m\u00e9moire tampon collect\u00e9 sous forme de cha\u00eene concat\u00e9n\u00e9e unique.<\/li>\n<\/ul>\n<p>Une fois enregistr\u00e9 et activ\u00e9, l&rsquo;ajout du code <code><strong>[custom_hooks_demo]<\/strong><\/code> au contenu de votre article et produira une bo\u00eete de citation avec les valeurs par d\u00e9faut.<\/p>\n<figure id=\"attachment_72264\" aria-describedby=\"caption-attachment-72264\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72264 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/boite-citation-originale-utilisant-extension-custom-hooks-demo.png\" alt=\"La bo\u00eete de citation originale utilisant l\u2019extension Custom Hooks Demo\" width=\"1100\" height=\"530\"><figcaption id=\"caption-attachment-72264\" class=\"wp-caption-text\">La bo\u00eete de citation originale utilisant l\u2019extension Custom Hooks Demo<\/figcaption><\/figure>\n<p>Maintenant, cr\u00e9ons une autre extension appel\u00e9e <strong>Custom Hooks Demo Extension<\/strong>. Elle se connectera \u00e0 tous les hooks personnalis\u00e9s cr\u00e9\u00e9s par l\u2019extension pr\u00e9c\u00e9dente et fera ou modifiera quelque chose.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/*\nPlugin Name :  Custom Hooks Demo Extension\nDescription :  Demonstrating how you can extend WordPress plugin functionality with its custom hooks.\nAuthor      :  Salman Ravoof\nAuthor URI  :  https:\/\/salmanravoof.com\/\nLicense     :  GPLv2 or later\nLicense URI :  https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\nText Domain :  custom-hooks-demo-extension\n*\/\n\n\/**\n * replace the quote content by hooking into the 'custom_quote_content' filter\n*\/\nadd_filter( 'custom_quote_content', 'new_quote_content_callback' );\nfunction new_quote_content_callback( $content ) {\n    $content = \"There are no bugs in programming. Only unexpected features.\";\n    return $content;\n}\n\n\/**\n * replace the quote author by hooking into the 'custom_quote_author'\n*\/\nadd_filter( 'custom_quote_author', 'new_quote_author_callback' );\nfunction new_quote_author_callback( $author ) {\n    $author = \"Jane Doodle\";\n    return $author;\n}\n\n\/**\n * add an image to the top of the shortcode output by hooking into the 'the_topmost_custom_action'\n*\/\nadd_action( 'the_topmost_custom_action', 'quote_image_callback' );\nfunction quote_image_callback() {\n    $url = \"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/f\/f9\/Quote-right-cs.svg\/75px-Quote-right-cs.svg.png\";\n    echo '&lt;div&gt;&lt;img class=\"aligncenter\" src=\"'.$url.'\"&gt;&lt;\/div&gt;';\n}\n\n\/**\n * add a button below the shortcut output by hooking into the 'the_ending_custom_action'\n*\/\nadd_action( 'the_ending_custom_action', 'add_button_callback' );\nfunction add_button_callback() {\n    echo '&lt;div style=\"text-align:center;\"&gt;&lt;button name=\"nice\"&gt;Nice Quote!&lt;\/button&gt;&lt;\/div&gt;';\n}<\/code><\/pre>\n<p>Comme vous pouvez le voir, cette extension ne contient rien d&rsquo;autre que des fonctions d&rsquo;action et de filtrage qui s&rsquo;accrochent \u00e0 l\u2019extension originale aux bons endroits pour y apporter des modifications.<\/p>\n<p>Elle utilise les fonctions <code><strong>add_action()<\/strong><\/code> et <code><strong>add_filter()<\/strong><\/code> pour enregistrer ses fonctions de rappel avec les actions et les filtres personnalis\u00e9s cr\u00e9\u00e9s par l\u2019extension originale (par exemple, <code><strong>the_topmost_custom_action<\/strong><\/code>, <code><strong>custom_quote_author<\/strong><\/code>).<\/p>\n<figure id=\"attachment_72262\" aria-describedby=\"caption-attachment-72262\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72262 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/extension-modifie-boite-citation-originale.png\" alt=\"L'extension modifie la bo\u00eete de citation originale\" width=\"1100\" height=\"682\"><figcaption id=\"caption-attachment-72262\" class=\"wp-caption-text\">L&rsquo;extension modifie la bo\u00eete de citation originale<\/figcaption><\/figure>\n<p>Des hooks d\u2019action personnalis\u00e9s vous permettent d&rsquo;intercaler votre code aux bons endroits dans l\u2019extension originale et d&rsquo;ex\u00e9cuter vos propres scripts. Ici, nous <a href=\"https:\/\/kinsta.com\/fr\/blog\/strategie-de-contenu-visuel\/\">ajoutons une image <\/a>en haut et un bouton en bas.<\/p>\n<p>De m\u00eame, des filtres personnalis\u00e9s vous permettent de modifier les valeurs du contenu de la citation et son nom d&rsquo;auteur. Le r\u00e9sultat final est une extension qui est enti\u00e8rement \u00e9volutive par n&rsquo;importe qui sans modifier son code source.<\/p>\n<h3>Travailler avec des hooks personnalis\u00e9s de d\u00e9veloppeurs tiers<\/h3>\n<p>Les hooks personnalis\u00e9s permettent aux <a href=\"https:\/\/kinsta.com\/fr\/sujets\/extensions-wordpress\/\">extensions<\/a> et aux <a href=\"https:\/\/kinsta.com\/fr\/blog\/theme-wordpress-plus-rapide\/\">th\u00e8mes<\/a><a href=\"https:\/\/kinsta.com\/fr\/sujets\/extensions-wordpress\/\"> WordPress<\/a> d&rsquo;avoir un riche \u00e9cosyst\u00e8me d\u2019extensions \u00e9volutives. Prenons l&rsquo;exemple de l\u2019extension WooCommerce. Elle ajoute une fonctionnalit\u00e9 de commerce \u00e9lectronique \u00e0 WordPress, mais il inclut \u00e9galement des <a href=\"https:\/\/docs.woocommerce.com\/wc-apidocs\/hook-docs.html\">tonnes de hooks dans son code<\/a>.<\/p>\n<figure id=\"attachment_72270\" aria-describedby=\"caption-attachment-72270\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72270 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/hooks-actions-filtres-woocommerce.png\" alt=\"Hooks d\u2019actions et de filtres WooCommerce\" width=\"1100\" height=\"562\"><figcaption id=\"caption-attachment-72270\" class=\"wp-caption-text\">Hooks d\u2019actions et de filtres WooCommerce<\/figcaption><\/figure>\n<p><a href=\"https:\/\/kinsta.com\/fr\/blog\/plugins-ecommerce-wordpress\/\">WooCommerce dispose de centaines d&rsquo;extensions<\/a> et de <a href=\"https:\/\/kinsta.com\/fr\/blog\/plugins-woocommerce\/\">plugins<\/a> qui utilisent ses hooks pour d\u00e9velopper ses fonctionnalit\u00e9s de base et les am\u00e9liorer.<\/p>\n<p>Vous pouvez utiliser ces extensions pour int\u00e9grer WooCommerce avec Stripe, MailChimp, Salesforce, Zapier, et bien plus encore.<\/p>\n<figure id=\"attachment_72269\" aria-describedby=\"caption-attachment-72269\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72269 size-full\" src=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/extensions-etendent-fonctionnalites-woocommerce.png\" alt=\"Des extensions \u00e9tendent les fonctionnalit\u00e9s de WooCommerce\" width=\"1100\" height=\"728\"><figcaption id=\"caption-attachment-72269\" class=\"wp-caption-text\">Des extensions \u00e9tendent les fonctionnalit\u00e9s de WooCommerce<\/figcaption><\/figure>\n<p>Une bonne pratique consiste \u00e0 consulter la section de documentation des extensions WordPress les plus populaires pour voir comment elles mettent en \u0153uvre des hooks personnalis\u00e9s. Quelques-unes de mes principales suggestions sont <a href=\"https:\/\/docs.easydigitaldownloads.com\/article\/559-developers-intro-to-easy-digital-downloads\">Easy Digital Downloads<\/a>, BuddyPress, <a href=\"https:\/\/quizandsurveymaster.com\/docs\/developer\/hooks-and-filters\/\">Quiz<\/a> and <a href=\"https:\/\/quizandsurveymaster.com\/docs\/developer\/hooks-and-filters\/\">Survey Master et<\/a><a href=\"https:\/\/docs.gravityforms.com\/category\/developers\/hooks\/\"> Gravity Forms<\/a>.<\/p>\n<h3>Quand utiliser les hooks personnalis\u00e9s ?<\/h3>\n<p>En fonction du <a href=\"https:\/\/kinsta.com\/fr\/blog\/avantages-inconvenients-themeforest\/\">th\u00e8me<\/a> ou de l\u2019<a href=\"https:\/\/kinsta.com\/fr\/blog\/publier-plugin-annuaire-wordpress\/\">extension que vous cr\u00e9ez<\/a>, et de la personne \u00e0 qui cela est destin\u00e9, vous pouvez vous demander s&rsquo;il est n\u00e9cessaire d&rsquo;ajouter des hooks personnalis\u00e9s.<\/p>\n<p>Une bonne r\u00e8gle de base pour d\u00e9cider d&rsquo;ajouter ou non des hooks personnalis\u00e9s est de v\u00e9rifier s&rsquo;ils offrent des avantages d&rsquo;extensibilit\u00e9 aux autres d\u00e9veloppeurs. Si ce n&rsquo;est pas le cas, il vaut mieux attendre que d&rsquo;autres d\u00e9veloppeurs vous demandent de les ajouter.<\/p>\n<p>Vous devez \u00eatre tr\u00e8s s\u00fbr d&rsquo;ajouter des hooks personnalis\u00e9s \u00e0 votre extension ou \u00e0 votre th\u00e8me. Une fois qu&rsquo;il est publi\u00e9, et si d&rsquo;autres d\u00e9veloppeurs l&rsquo;ont d\u00e9j\u00e0 utilis\u00e9, vous ne pouvez pas le modifier sans rompre la r\u00e9trocompatibilit\u00e9.<\/p>\n<h2>Suppression des fonctions de rappel des hooks WordPress<\/h2>\n<p>Vous avez d\u00e9j\u00e0 vu des exemples de suppression des fonctions de rappel enregistr\u00e9es pour certains hooks. Ces rappels peuvent \u00eatre enregistr\u00e9s par des extensions, des th\u00e8mes, ou m\u00eame par le c\u0153ur de WordPress lui-m\u00eame. Examinons la suppression des fonctions de rappel accroch\u00e9es avec plus d&rsquo;exemples.<\/p>\n<p>Pour supprimer une fonction de rappel d&rsquo;un hook, selon qu&rsquo;elle est enregistr\u00e9e dans une action ou un filtre, vous devez utiliser les fonctions <code><strong>remove_action()<\/strong><\/code> ou <code><strong>remove_filter()<\/strong><\/code>.<\/p>\n<p>Une mise en garde s&rsquo;impose : vous devez appeler ces fonctions avec les m\u00eames param\u00e8tres que ceux utilis\u00e9s pour enregistrer la fonction de rappel. Fondamentalement, il faut copier-coller les param\u00e8tres depuis leurs fonctions <code><strong>add_action()<\/strong><\/code> ou <code><strong>add_filter()<\/strong><\/code>.<\/p>\n<p>En outre, vous ne pouvez supprimer les fonctions de rappel qu&rsquo;apr\u00e8s leur enregistrement. Si vous essayez de les supprimer avant qu&rsquo;elles ne soient enregistr\u00e9es, la proc\u00e9dure de suppression \u00e9chouera. Vous devez obtenir l&rsquo;ordre d&rsquo;ex\u00e9cution des hooks correctement.<\/p>\n<p>Supposons que vous vouliez supprimer une fonction de rappel enregistr\u00e9e par un th\u00e8me ralentit votre site (<a href=\"https:\/\/kinsta.com\/fr\/apprendre\/accelerer-wordpress\/\">vous voulez un site rapide<\/a>, n&rsquo;est-ce pas ?).<\/p>\n<pre><code class=\"language-php\">function wp_bloated_callback_function() {\u00a0 \u00a0 \n\/\/ some code that adds a lot of bloat to the site\n}\nadd_action( 'template_redirect', 'wp_bloated_callback_function', 5 );<\/code><\/pre>\n<p>Par exemple, la fonction de rappel ci-dessus pourrait charger de nombreux scripts et feuilles de style inutiles. Sa suppression donnera \u00e0 votre site un \u00e9norme coup de pouce en termes de <a href=\"https:\/\/kinsta.com\/fr\/apprendre\/vitesse-de-site\/\">performances<\/a>.<\/p>\n<p>Cependant, vous devez vous assurer que la fonction <code><strong>remove_action()<\/strong><\/code> ne s&rsquo;ex\u00e9cute qu&rsquo;apr\u00e8s l&rsquo;action <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/template_redirect\/\">template_redirect<\/a>. Une fa\u00e7on de le faire est de s\u2019accrocher \u00e0 l&rsquo;action <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/after_setup_theme\/\">after_setup_theme<\/a> telle qu&rsquo;elle est d\u00e9clench\u00e9e apr\u00e8s l&rsquo;action <code><strong>template_redirect<\/strong><\/code>.<\/p>\n<pre><code class=\"language-php\">function wp_remove_bloat() {\n    \/\/ ensure all parameters are identical to the original add_action() function\n  \u00a0 remove_action( 'template_redirect', 'wp_bloated_callback_function', 5 );\n}\n\n\/\/ ensure that remove_action() is called only after add_action()\nadd_action( 'after_setup_theme', 'wp_remove_bloat' );<\/code><\/pre>\n<p>La fonction <code><strong>wp_bloated_callback_function()<\/strong><\/code> va maintenant se d\u00e9tacher de l&rsquo;action <code><strong>template_redirect<\/strong><\/code>.<\/p>\n<h3>Cas particuliers pour la suppression des fonctions de rappel<\/h3>\n<p>La suppression des fonctions de rappel ne se limite pas \u00e0 leur d\u00e9sactivation. Parfois, vous devez les supprimer temporairement, ex\u00e9cuter votre code, puis les ajouter \u00e0 nouveau.<\/p>\n<p>Par exemple, l&rsquo;action <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/save_post\/\">save_post<\/a> \u00e0 se d\u00e9clenche \u00e0 chaque fois que les fonctions <code><strong>wp_insert_post()<\/strong><\/code> et <code><strong>wp_publish_post()<\/strong><\/code> sont appel\u00e9es. Vous pouvez <a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/5.4\/src\/wp-includes\/post.php#L4135\">les trouver toutes les deux d\u00e9finies<\/a> dans le fichier <code><strong>wp-includes\/post.php<\/strong><\/code>.<\/p>\n<p>Ainsi, si vous avez une fonction de rappel li\u00e9e \u00e0 l&rsquo;action <code><strong>save_post<\/strong><\/code>, et si vous appelez les fonctions <code><strong>wp_insert_post()<\/strong><\/code> ou <code><strong>wp_publish_post()<\/strong><\/code> dans votre fonction de rappel, l&rsquo;action <code><strong>save_post<\/strong><\/code> se d\u00e9clenchera plusieurs fois.<\/p>\n<pre><code class=\"language-php\">function some_callback_function( $post_id, $post ) {\n\u00a0 \u00a0 \/\/ do something here\n  \u00a0 wp_insert_post( [some_array] ); \/\/ this function also calls the 'save_post' action\n\u00a0 \u00a0 \/\/ maybe do something more\n}\nadd_action( 'save_post', 'some_callback_function', 10, 2 );<\/code><\/pre>\n<p>Une fonction qui appelle l&rsquo;action qui l&rsquo;appelle aussi peut cr\u00e9er des r\u00e9sultats inattendus. Une fa\u00e7on de contourner ce probl\u00e8me est d&rsquo;utiliser la fonction <code><strong>remove_action()<\/strong><\/code> \u00e0 l\u2019int\u00e9rieur de votre fonction de rappel avant d&rsquo;appeler <code><strong>wp_insert_post()<\/strong><\/code>.<\/p>\n<pre><code class=\"language-php\">function some_callback_function( $post_id, $post ) {\n\u00a0 \u00a0 \/\/ do something here\n\u00a0 \u00a0 \n    \/\/ remove the callback function from the \u2018save_post\u2019 action\n\u00a0 \u00a0 remove_action( 'save_post', 'some_callback_function', 10, 2 );\n\u00a0 \u00a0 \n    \/\/ now run the wp_insert_post() function\n    wp_insert_post( [some_array] );\n\u00a0 \u00a0 \n    \/\/ add the callback function back to the \u2018save_post\u2019 action\n\u00a0 \u00a0 add_action( 'save_post', 'some_callback_function', 10, 2 );\n\u00a0 \u00a0 \n    \/\/ maybe do something more\n}\nadd_action( 'save_post', 'some_callback_function', 10, 2 );<\/code><\/pre>\n<p>C&rsquo;est une autre utilisation pratique des fonctions <code><strong>remove_action()<\/strong><\/code> ou <code><strong>remove_filter()<\/strong><\/code>. En approfondissant le c\u0153ur de WordPress, vous comprendrez comment mieux \u00e9viter ces situations.<\/p>\n<h2>Tutoriels WordPress Hooks en prime<\/h2>\n<ul>\n<li><a href=\"https:\/\/kinsta.com\/fr\/blog\/ajouter-code-wordpress-header-footer\/#how-to-manually-add-code-to-wordpress-header-and-footer\"> Ajouter manuellement du code \u00e0 l&rsquo;en-t\u00eate et au pied de page de WordPress <\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/fr\/blog\/bibliotheque-medias-wordpress\/\"> Votre guide complet sur la biblioth\u00e8que de m\u00e9dias de WordPress <\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/fr\/blog\/tache-cron-wordpress\/\"> Comment cr\u00e9er et modifier un Cron WordPress <\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/fr\/blog\/theme-enfant-wordpress\/#create\">Comment cr\u00e9er un th\u00e8me enfant WordPress<br \/>\n<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/fr\/blog\/desactiver-chargement-plugins-wordpress\/\"> D\u00e9sactiver le chargement des extensions WordPress sur des pages et des articles sp\u00e9cifiques <\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/fr\/blog\/desactiver-emojis-wordpress\/#2-disable-emojis-in-wordpress-with-code\"> D\u00e9sactiver les \u00e9mojis dans WordPress avec du code <\/a><\/li>\n<\/ul>\n\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>L&rsquo;utilisation des hooks WordPress pr\u00e9sente de multiples avantages si vous \u00eates un <a href=\"https:\/\/kinsta.com\/fr\/blog\/engager-developpeur-wordpress\/\">d\u00e9veloppeur WordPress<\/a>.<\/p>\n<p>Non seulement les hooks vous permettent de modifier ou d&rsquo;\u00e9tendre les fonctionnalit\u00e9s de base de WordPress, mais vous pouvez \u00e9galement les utiliser pour modifier des extensions, des th\u00e8mes, et laisser d&rsquo;autres d\u00e9veloppeurs interagir avec vos extensions ou th\u00e8mes.<\/p>\n<p>Il est temps de s&rsquo;accrocher \u00e0 WordPress !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les hooks WordPress sont l&rsquo;un des outils les plus importants \u00e0 avoir dans l&rsquo;arsenal d&rsquo;un d\u00e9veloppeur WordPress. Ils sont la base du d\u00e9veloppement des extensions et &#8230;<\/p>\n","protected":false},"author":117,"featured_media":39173,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[47,407],"topic":[1028,999],"class_list":["post-39139","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-webdev","tag-wordpress-hooks","topic-developpement-wordpress","topic-fonction-php"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Le Bootcamp des hooks WordPress : Comment utiliser les actions, les filtres et les hooks personnalis\u00e9s<\/title>\n<meta name=\"description\" content=\"Apprenez \u00e0 utiliser les Hooks WordPress en profondeur. Ma\u00eetrisez les actions, les filtres et les &quot;Custom Hooks&quot; en cr\u00e9ant votre propre plugin extensible. Am\u00e9liorez vos comp\u00e9tences de d\u00e9veloppeur WordPress d\u00e8s maintenant !\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Le Bootcamp des hooks WordPress : Comment utiliser les actions, les filtres et les hooks personnalis\u00e9s\" \/>\n<meta property=\"og:description\" content=\"Apprenez \u00e0 utiliser les Hooks WordPress en profondeur. Ma\u00eetrisez les actions, les filtres et les &quot;Custom Hooks&quot; en cr\u00e9ant votre propre plugin extensible. Am\u00e9liorez vos comp\u00e9tences de d\u00e9veloppeur WordPress d\u00e8s maintenant !\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-29T07:16:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T10:56:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/wordpress-hooks.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"768\" \/>\n\t<meta property=\"og:image:height\" content=\"384\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Salman Ravoof\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Apprenez \u00e0 utiliser les Hooks WordPress en profondeur. Ma\u00eetrisez les actions, les filtres et les &quot;Custom Hooks&quot; en cr\u00e9ant votre propre plugin extensible. Am\u00e9liorez vos comp\u00e9tences de d\u00e9veloppeur WordPress d\u00e8s maintenant !\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/wordpress-hooks.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"62 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"Le Bootcamp des hooks WordPress : Comment utiliser les actions, les filtres et les hooks personnalis\u00e9s\",\"datePublished\":\"2020-05-29T07:16:47+00:00\",\"dateModified\":\"2023-08-22T10:56:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/\"},\"wordCount\":12131,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/wordpress-hooks.jpg\",\"keywords\":[\"webdev\",\"WordPress Hooks\"],\"articleSection\":[\"D\u00e9veloppement WordPress\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/\",\"name\":\"Le Bootcamp des hooks WordPress : Comment utiliser les actions, les filtres et les hooks personnalis\u00e9s\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/wordpress-hooks.jpg\",\"datePublished\":\"2020-05-29T07:16:47+00:00\",\"dateModified\":\"2023-08-22T10:56:14+00:00\",\"description\":\"Apprenez \u00e0 utiliser les Hooks WordPress en profondeur. Ma\u00eetrisez les actions, les filtres et les \\\"Custom Hooks\\\" en cr\u00e9ant votre propre plugin extensible. Am\u00e9liorez vos comp\u00e9tences de d\u00e9veloppeur WordPress d\u00e8s maintenant !\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/wordpress-hooks.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/wordpress-hooks.jpg\",\"width\":768,\"height\":384,\"caption\":\"Le Bootcamp des hooks WordPress : Comment utiliser les actions, les filtres et les hooks personnalis\u00e9s\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"D\u00e9veloppement WordPress\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/developpement-wordpress\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Le Bootcamp des hooks WordPress : Comment utiliser les actions, les filtres et les hooks personnalis\u00e9s\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"caption\":\"Salman Ravoof\"},\"description\":\"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.\",\"sameAs\":[\"https:\/\/salmanravoof.com\",\"https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/\",\"https:\/\/x.com\/salmanravoof\"],\"url\":\"https:\/\/kinsta.com\/fr\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Le Bootcamp des hooks WordPress : Comment utiliser les actions, les filtres et les hooks personnalis\u00e9s","description":"Apprenez \u00e0 utiliser les Hooks WordPress en profondeur. Ma\u00eetrisez les actions, les filtres et les \"Custom Hooks\" en cr\u00e9ant votre propre plugin extensible. Am\u00e9liorez vos comp\u00e9tences de d\u00e9veloppeur WordPress d\u00e8s maintenant !","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/","og_locale":"fr_FR","og_type":"article","og_title":"Le Bootcamp des hooks WordPress : Comment utiliser les actions, les filtres et les hooks personnalis\u00e9s","og_description":"Apprenez \u00e0 utiliser les Hooks WordPress en profondeur. Ma\u00eetrisez les actions, les filtres et les \"Custom Hooks\" en cr\u00e9ant votre propre plugin extensible. Am\u00e9liorez vos comp\u00e9tences de d\u00e9veloppeur WordPress d\u00e8s maintenant !","og_url":"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2020-05-29T07:16:47+00:00","article_modified_time":"2023-08-22T10:56:14+00:00","og_image":[{"width":768,"height":384,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/wordpress-hooks.jpg","type":"image\/jpeg"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"Apprenez \u00e0 utiliser les Hooks WordPress en profondeur. Ma\u00eetrisez les actions, les filtres et les \"Custom Hooks\" en cr\u00e9ant votre propre plugin extensible. Am\u00e9liorez vos comp\u00e9tences de d\u00e9veloppeur WordPress d\u00e8s maintenant !","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/wordpress-hooks.jpg","twitter_creator":"@salmanravoof","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Salman Ravoof","Dur\u00e9e de lecture estim\u00e9e":"62 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"Le Bootcamp des hooks WordPress : Comment utiliser les actions, les filtres et les hooks personnalis\u00e9s","datePublished":"2020-05-29T07:16:47+00:00","dateModified":"2023-08-22T10:56:14+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/"},"wordCount":12131,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/wordpress-hooks.jpg","keywords":["webdev","WordPress Hooks"],"articleSection":["D\u00e9veloppement WordPress"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/","url":"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/","name":"Le Bootcamp des hooks WordPress : Comment utiliser les actions, les filtres et les hooks personnalis\u00e9s","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/wordpress-hooks.jpg","datePublished":"2020-05-29T07:16:47+00:00","dateModified":"2023-08-22T10:56:14+00:00","description":"Apprenez \u00e0 utiliser les Hooks WordPress en profondeur. Ma\u00eetrisez les actions, les filtres et les \"Custom Hooks\" en cr\u00e9ant votre propre plugin extensible. Am\u00e9liorez vos comp\u00e9tences de d\u00e9veloppeur WordPress d\u00e8s maintenant !","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/wordpress-hooks.jpg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2020\/05\/wordpress-hooks.jpg","width":768,"height":384,"caption":"Le Bootcamp des hooks WordPress : Comment utiliser les actions, les filtres et les hooks personnalis\u00e9s"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/hooks-wordpress\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"D\u00e9veloppement WordPress","item":"https:\/\/kinsta.com\/fr\/sujets\/developpement-wordpress\/"},{"@type":"ListItem","position":3,"name":"Le Bootcamp des hooks WordPress : Comment utiliser les actions, les filtres et les hooks personnalis\u00e9s"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","caption":"Salman Ravoof"},"description":"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.","sameAs":["https:\/\/salmanravoof.com","https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/","https:\/\/x.com\/salmanravoof"],"url":"https:\/\/kinsta.com\/fr\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/39139","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=39139"}],"version-history":[{"count":5,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/39139\/revisions"}],"predecessor-version":[{"id":72070,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/39139\/revisions\/72070"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/39139\/translations\/en"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/39139\/translations\/fr"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/39139\/translations\/es"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/39139\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/39139\/translations\/pt"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/39139\/translations\/de"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/39139\/translations\/nl"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/39139\/translations\/se"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/39139\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/39173"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=39139"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=39139"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=39139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}