{"id":234223,"date":"2023-02-16T17:16:00","date_gmt":"2023-02-16T14:16:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234223"},"modified":"2022-11-12T00:59:31","modified_gmt":"2022-11-11T21:59:31","slug":"comment-ajouter-des-icones-fontawesome-aux-elements-de-menu-avec-des-champs-personnalises-avances","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/comment-ajouter-des-icones-fontawesome-aux-elements-de-menu-avec-des-champs-personnalises-avances\/","title":{"rendered":"Comment ajouter des ic\u00f4nes Fontawesome aux \u00e9l\u00e9ments de menu avec des champs personnalis\u00e9s avanc\u00e9s"},"content":{"rendered":"\n<p>Cet article vous montrera comment vous pouvez utiliser les champs personnalis\u00e9s avanc\u00e9s (ACF) pour permettre l&rsquo;ajout d&rsquo;ic\u00f4nes \u00e0 votre menu. Dans cet exemple, nous ajouterons une ic\u00f4ne <a href=\"https:\/\/fontawesome.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Fontawesome<\/a>, mais vous pouvez modifier le code en fonction de vos besoins. Vous pouvez \u00e0 la place ajouter un s\u00e9lecteur de fichiers pour les fichiers SVG ou autre chose.<\/p>\n<p>Ce guide fonctionnera avec la <a href=\"https:\/\/wordpress.org\/plugins\/advanced-custom-fields\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">version gratuite de Advanced Custom Fields<\/a>, mais assurez-vous d&rsquo;avoir la version 5.6 ou une version plus r\u00e9cente.<\/p>\n<h2>Ajout du groupe et du champ ACF<\/h2>\n<p>La premi\u00e8re \u00e9tape consiste \u00e0 ajouter le champ lui-m\u00eame aux \u00e9l\u00e9ments de menu. Ce guide ajoutera une entr\u00e9e de texte pour saisir le nom de la classe pour l&rsquo;ic\u00f4ne Fontawesome, mais si vous souhaitez une autre solution (par exemple, un s\u00e9lecteur de fichier pour le fichier SVG), modifiez les entr\u00e9es du champ.<\/p>\n<p>Assurez-vous que l&#8217;emplacement de votre groupe de champs personnalis\u00e9s avanc\u00e9s est d\u00e9fini sur &quot;\u00c9l\u00e9ment de menu&quot;. Vous pouvez le d\u00e9finir sur &quot;Tous&quot;, ou vous pouvez sp\u00e9cifier des emplacements de menu ou des menus sp\u00e9cifiques.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e506fa60c76.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e506fa60c76.png\" alt=\"Comment ajouter des ic\u00f4nes Fontawesome aux \u00e9l\u00e9ments de menu avec des champs personnalis\u00e9s avanc\u00e9s\" ><\/a><\/p>\n<p>Si vous ajoutez vos champs et groupez par code, d\u00e9finissez le param\u00e8tre d&#8217;emplacement sur &lsquo; <code>nav_menu_item<\/code>&lsquo;. Reportez-vous \u00e0 ma <a href=\"https:\/\/awhitepixel.com\/blog\/complete-reference-for-adding-advanced-custom-fields-acf-fields-and-groups-by-code\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">r\u00e9f\u00e9rence compl\u00e8te pour l&rsquo;ajout de champs ACF par code<\/a> pour en savoir plus.<\/p>\n<pre><code>acf_add_local_field_group([\n    ...\n    'location' =&gt; [\n        [\n            [\n                'param' =&gt; 'nav_menu_item',\n                'operator' =&gt; '==',\n                'value' =&gt; 'all'\n            ]\n        ]\n    ]\n]);<\/code><\/pre>\n<p>Quant au champ lui-m\u00eame, nous ajouterons une simple entr\u00e9e de texte avec le nom &lsquo; <code>fontawesome_icon<\/code>&lsquo;.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e506fd705e6.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e506fd705e6.png\" alt=\"Comment ajouter des ic\u00f4nes Fontawesome aux \u00e9l\u00e9ments de menu avec des champs personnalis\u00e9s avanc\u00e9s\" ><\/a><\/p>\n<p>Ou par code, ajoutez le champ comme ceci\u00a0:<\/p>\n<pre><code>[\n    'key' =&gt; 'field_fontawesome_icon',\n    'label' =&gt; __('Fontawesome icon class', 'txtdomain'),\n    'name' =&gt; 'fontawesome_icon',\n    'instructions' =&gt; __('Type the name of a &lt;a href=\"https:\/\/fontawesome.com\/icons?d=gallery&amp;m=free\" target=\"_blank\"&gt;Fontawesome icon&lt;\/a&gt; class. Example: \"fab fa-facebook\".', 'txtdomain'),\n    'type' =&gt; 'text',\n]<\/code><\/pre>\n<p>Pour le rendre plus convivial, c&rsquo;est une bonne id\u00e9e d&rsquo;ajouter une description avec un lien vers l&rsquo; <a href=\"https:\/\/fontawesome.com\/icons?d=gallery&#038;m=free\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aper\u00e7u des ic\u00f4nes Fontawesome disponibles<\/a>. J&rsquo;ajoute le lien pour afficher uniquement les ic\u00f4nes gratuites, pas les Pro, car il s&rsquo;agit de la biblioth\u00e8que que j&rsquo;ai dans mon th\u00e8me.<\/p>\n<p>Apr\u00e8s avoir enregistr\u00e9 le champ dans l&rsquo;administrateur ou dans le code, vous devriez maintenant obtenir le champ suppl\u00e9mentaire lorsque vous d\u00e9veloppez un \u00e9l\u00e9ment de menu\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e507009e5b9.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e507009e5b9.png\" alt=\"Comment ajouter des ic\u00f4nes Fontawesome aux \u00e9l\u00e9ments de menu avec des champs personnalis\u00e9s avanc\u00e9s\" ><\/a><\/p>\n<h2>Une note sur les cours Fontawesome<\/h2>\n<p>Dans les &quot;jours anciens&quot;, avant Fontawesome 5, fournir une classe Fontawesome pouvait \u00eatre quelque peu simplifi\u00e9 pour l&rsquo;utilisateur. Pour le panier, vous pouvez simplement \u00e9crire &quot;shopping-cart&quot; et dans notre code, nous pourrions ajouter la classe &quot; <code>fa fa-<\/code>&quot; puis la classe donn\u00e9e (r\u00e9sultant en &quot; <code>fa fa-shopping-cart<\/code>&quot;). Mais depuis Fontawesome 5, les cours ont \u00e9t\u00e9 quelque peu compliqu\u00e9s.<\/p>\n<p>La classe \u00abglobale\u00bb \u00ab<code>fa<\/code>\u00bb a \u00e9t\u00e9 remplac\u00e9e par des cat\u00e9gories sp\u00e9cifiques au type d&rsquo;ic\u00f4ne. Par exemple, les m\u00e9dias sociaux ou les logos sont dans la cat\u00e9gorie des marques et n\u00e9cessitent la classe &quot; <code>fab<\/code>&quot;, les ic\u00f4nes solides n\u00e9cessitent la classe &quot; <code>fas<\/code>&quot;, tandis que les ic\u00f4nes r\u00e9guli\u00e8res n\u00e9cessitent &quot; <code>far<\/code>&quot;, etc. C&rsquo;est pourquoi nous devons maintenant demander \u00e0 l&rsquo;utilisateur du th\u00e8me de taper dans les deux classes Fontawesome. Il devrait \u00eatre facile de trouver la bonne classe car cela est clairement indiqu\u00e9 dans chaque ic\u00f4ne du site de Fontawesome :<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e50702d0f82.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e50702d0f82.png\" alt=\"Comment ajouter des ic\u00f4nes Fontawesome aux \u00e9l\u00e9ments de menu avec des champs personnalis\u00e9s avanc\u00e9s\" ><\/a><\/p>\n<p>Par exemple, vous devez saisir \u00ab<code>fas fa-shopping-cart<\/code>\u00bb dans notre champ personnalis\u00e9 sur un \u00e9l\u00e9ment de menu pour l&rsquo;ic\u00f4ne du panier.<\/p>\n<h2>Affichage de l&rsquo;ic\u00f4ne dans le menu<\/h2>\n<p>La prochaine et derni\u00e8re \u00e9tape consiste \u00e0 rendre l&rsquo;ic\u00f4ne dans le menu si elle est d\u00e9finie. Pour ce faire, nous utilisons le filtre de WordPress <code>[wp_nav_menu_objects](https:\/\/developer.wordpress.org\/reference\/hooks\/wp_nav_menu_objects\/)<\/code>. Ce filtre est appliqu\u00e9 pour chaque menu dans tous les menus rendus juste avant de g\u00e9n\u00e9rer son HTML, ce qui nous permet de modifier la sortie de texte, les classes et plus encore.<\/p>\n<p>La mani\u00e8re dont vous souhaitez afficher l&rsquo;ic\u00f4ne d\u00e9pend \u00e0 nouveau de vous. Voulez-vous remplacer le texte du lien par l&rsquo;ic\u00f4ne ou souhaitez-vous afficher l&rsquo;ic\u00f4ne avant ou apr\u00e8s le lien texte\u00a0? Nous suivrons la coutume de Fontawesome en produisant une <code>&lt;i&gt;<\/code>balise avec la classe fournie.<\/p>\n<pre><code>add_filter('wp_nav_menu_objects', function($items) {\n    foreach ($items as &amp;$item) {\n        $icon = get_field('fontawesome_icon', $item);     \n        if ($icon) {\n            $item-&gt;title = '&lt;i class=\"'. $icon. '\"&gt;&lt;\/i&gt;'. $item-&gt;title;\n        }\n    }\n    return $items;\n});<\/code><\/pre>\n<p>La fa\u00e7on dont nous modifions les \u00e9l\u00e9ments de menu consiste \u00e0 parcourir les \u00e9l\u00e9ments de menu en utilisant le passage par r\u00e9f\u00e9rence (en ajoutant un <code>&amp;<\/code>avant la variable). Cela signifie que toute modification apport\u00e9e \u00e0 l&rsquo;\u00e9l\u00e9ment sera appliqu\u00e9e \u00e0 l&rsquo;objet des \u00e9l\u00e9ments parentaux.<\/p>\n<p>Pour chaque \u00e9l\u00e9ment, nous utilisons la fonction Advanced Custom Field <code>get_field()<\/code>pour obtenir la valeur de notre champ, &lsquo; <code>fontawesome_icon<\/code>&lsquo;. Si c&rsquo;est r\u00e9gl\u00e9, nous sommes pr\u00eats \u00e0 partir. L&rsquo;exemple de code ci-dessus ajoutera l&rsquo;ic\u00f4ne avant le texte. Si vous vouliez ajouter l&rsquo;ic\u00f4ne apr\u00e8s le texte, remplacez la ligne <code>#6<\/code>par\u00a0:<\/p>\n<pre><code>$item-&gt;title .= '&lt;i class=\"'. $icon. '\"&gt;&lt;\/i&gt;';<\/code><\/pre>\n<p>Ou si vous vouliez remplacer le texte par une ic\u00f4ne &#8211; ne montrant aucun texte, remplacez la ligne <code>#6<\/code>par\u00a0:<\/p>\n<pre><code>$item-&gt;title = '&lt;i class=\"'. $icon. '\" title=\"'. $item-&gt;title. '\"&gt;&lt;\/i&gt;';<\/code><\/pre>\n<p>J&rsquo;ai ajout\u00e9 un <code>title<\/code>attribut afin qu&rsquo;il soit un peu plus informatif pour l&rsquo;utilisateur frontal. \u00c9tant donn\u00e9 que le texte est supprim\u00e9, il peut parfois \u00eatre d\u00e9routant pour l&rsquo;utilisateur final de savoir \u00e0 quoi sert l&rsquo;\u00e9l\u00e9ment de menu. Mais l&rsquo; <code>title<\/code>attribut garantit que l&rsquo;utilisateur obtient une info-bulle avec le texte de l&rsquo;\u00e9l\u00e9ment de menu lorsqu&rsquo;il survole l&rsquo;ic\u00f4ne. Ceci est enti\u00e8rement facultatif bien s\u00fbr.<\/p>\n<p>Si vous utilisez un champ d&rsquo;un type diff\u00e9rent, par exemple un s\u00e9lecteur de fichiers pour les fichiers SVG, vous devez ajuster la sortie en cons\u00e9quence.<\/p>\n<p>Et c&rsquo;est tout! Vous devriez maintenant obtenir une ic\u00f4ne Fontawesome partout o\u00f9 le menu est rendu. Mais vous avez probablement besoin d&rsquo;y ajouter un peu de style. Par exemple, ajouter un espace entre l&rsquo;ic\u00f4ne et le texte.<\/p>\n<h3>Ajout de classes pour un style plus facile<\/h3>\n<p>Vous pouvez ajouter des classes personnalis\u00e9es \u00e0 la <code>&lt;i&gt;<\/code>balise ou ajouter du code HTML suppl\u00e9mentaire si n\u00e9cessaire.<\/p>\n<p>Si vous devez ajouter une classe \u00e0 l&rsquo;\u00e9l\u00e9ment de menu d&rsquo;habillage (l&rsquo; <code>li<\/code>\u00e9l\u00e9ment), vous avez un acc\u00e8s complet aux classes d&rsquo;\u00e9l\u00e9ments de menu qui seront appliqu\u00e9es dans le filtre ci-dessus. Ajoutez une classe d&rsquo;\u00e9l\u00e9ments de menu personnalis\u00e9s pour les \u00e9l\u00e9ments de menu d&rsquo;ic\u00f4nes comme suit\u00a0:<\/p>\n<pre><code>        ...\n        if ($icon) {\n            $item-&gt;title = '&lt;i class=\"'. $icon. '\"&gt;&lt;\/i&gt;'. $item-&gt;title;\n            $item-&gt;classes[] = 'menu-with-icon';\n        }\n        ...<\/code><\/pre>\n<p>Le menu devrait \u00eatre affich\u00e9 comme ceci\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e507050aa94.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153055-61e507050aa94.png\" alt=\"Comment ajouter des ic\u00f4nes Fontawesome aux \u00e9l\u00e9ments de menu avec des champs personnalis\u00e9s avanc\u00e9s\" ><\/a><\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comment ajouter des ic\u00f4nes Fontawesome aux \u00e9l\u00e9ments de menu. Nous utilisons des champs personnalis\u00e9s avanc\u00e9s pour permettre de d\u00e9finir des classes. Il est facile d&rsquo;ajuster le code pour les ic\u00f4nes SVG ou similaires.<\/p>\n","protected":false},"author":1,"featured_media":224889,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,893,717,717,832,1110,801,801,832,841,841,862,862],"tags":[1167],"class_list":{"0":"post-234223","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-code-2","9":"category-developpeur","11":"category-guide-pour-les-debutants","12":"category-n-a","13":"category-php-3","16":"category-tutoriels","18":"category-wordpress-3","20":"tag-affiai-fr"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234223","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=234223"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234223\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/224889"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=234223"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234223"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234223"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}