{"id":233545,"date":"2023-02-16T16:32:00","date_gmt":"2023-02-16T13:32:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233545"},"modified":"2022-11-11T00:16:08","modified_gmt":"2022-11-10T21:16:08","slug":"come-aggiungere-icone-fontawesome-alle-voci-di-menu-con-campi-personalizzati-avanzati","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/come-aggiungere-icone-fontawesome-alle-voci-di-menu-con-campi-personalizzati-avanzati\/","title":{"rendered":"Come aggiungere icone Fontawesome alle voci di menu con campi personalizzati avanzati"},"content":{"rendered":"\n<p>Questo post ti mostrer\u00e0 come utilizzare i campi personalizzati avanzati (ACF) per consentire l&#8217;aggiunta di icone al tuo menu. In questo esempio aggiungeremo un&#8217;icona <a href=\"https:\/\/fontawesome.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Fontawesome<\/a>, ma puoi modificare il codice in base alle tue esigenze. Potresti invece aggiungere un selettore di file per i file SVG o qualcos&#8217;altro.<\/p>\n<p>Questa guida funzioner\u00e0 con la <a href=\"https:\/\/wordpress.org\/plugins\/advanced-custom-fields\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">versione gratuita di Advanced Custom Fields<\/a>, ma assicurati di avere la versione 5.6 o successiva.<\/p>\n<h2>Aggiunta del gruppo e del campo ACF<\/h2>\n<p>Il primo passaggio consiste nell&#8217;aggiungere il campo stesso alle voci di menu. Questa guida aggiunger\u00e0 un input di testo per digitare il nome della classe per l&#8217;icona Fontawesome, ma se desideri un&#8217;altra soluzione (ad esempio il selettore di file per il file SVG), modifica gli input del campo.<\/p>\n<p>Assicurati che la posizione del tuo gruppo di campi personalizzati avanzati sia impostata su &quot;Voce di menu&quot;. Puoi impostarla su &quot;Tutto&quot; oppure puoi specificare per posizioni di menu o menu specifici.<\/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=\"Come aggiungere icone Fontawesome alle voci di menu con campi personalizzati avanzati\" ><\/a><\/p>\n<p>Se stai aggiungendo i tuoi campi e raggruppandoli per codice, imposta il parametro della posizione su &#8216; <code>nav_menu_item<\/code>&#8216;. Fare riferimento al mio <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\">riferimento completo per aggiungere campi ACF per codice<\/a> per saperne di pi\u00f9.<\/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>Per quanto riguarda il campo stesso, aggiungeremo un semplice input di testo con il nome &#8216; <code>fontawesome_icon<\/code>&#8216;.<\/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=\"Come aggiungere icone Fontawesome alle voci di menu con campi personalizzati avanzati\" ><\/a><\/p>\n<p>Oppure per codice, aggiungi il campo in questo modo:<\/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>Per renderlo pi\u00f9 user-friendly \u00e8 una buona idea aggiungere una descrizione con un collegamento alla <a href=\"https:\/\/fontawesome.com\/icons?d=gallery&#038;m=free\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">panoramica delle icone Fontawesome disponibili<\/a>. Sto aggiungendo il collegamento per mostrare solo le icone gratuite, non nessuna delle Pro, poich\u00e9 questa \u00e8 la libreria che ho nel mio tema.<\/p>\n<p>Dopo aver salvato il campo in admin o nel codice, ora dovresti ottenere il campo aggiuntivo quando espandi una voce di menu:<\/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=\"Come aggiungere icone Fontawesome alle voci di menu con campi personalizzati avanzati\" ><\/a><\/p>\n<h2>Una nota sulle classi Fontawesome<\/h2>\n<p>Nei &quot;vecchi tempi&quot;, prima di Fontawesome 5, fornire una classe Fontawesome poteva essere in qualche modo semplificato per l&#8217;utente. Per il carrello potresti semplicemente scrivere &#8220;carrello&quot; e nel nostro codice potremmo aggiungere la classe &#8221; <code>fa fa-<\/code>&#8221; e poi la classe data (risultando &#8221; <code>fa fa-shopping-cart<\/code>&#8220;). Ma da Fontawesome 5 le lezioni sono state alquanto complicate.<\/p>\n<p>La classe &#8220;globale&#8221; &#8221; <code>fa<\/code>&#8221; \u00e8 stata sostituita con categorie specifiche per il tipo di icona. Ad esempio i social media o i loghi sono nella categoria dei marchi e richiedono la classe &quot; <code>fab<\/code>&quot;, le icone solide richiedono la classe &quot; <code>fas<\/code>&quot;, mentre le icone normali richiedono &quot; <code>far<\/code>&quot; e cos\u00ec via. Questo \u00e8 il motivo per cui ora dobbiamo richiedere all&#8217;utente del tema di digitare in entrambe le classi Fontawesome. Dovrebbe essere facile trovare la classe giusta in quanto questo \u00e8 chiaramente mostrato in ogni icona sul sito di 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=\"Come aggiungere icone Fontawesome alle voci di menu con campi personalizzati avanzati\" ><\/a><\/p>\n<p>Ad esempio, devi inserire &quot; <code>fas fa-shopping-cart<\/code>&quot; nel nostro campo personalizzato su una voce di menu per l&#8217;icona del carrello.<\/p>\n<h2>Visualizzazione dell&#8217;icona nel menu<\/h2>\n<p>Il passaggio successivo e finale \u00e8 il rendering dell&#8217;icona nel menu se \u00e8 impostata. Per fare ci\u00f2 utilizziamo il filtro di WordPress <code>[wp_nav_menu_objects](https:\/\/developer.wordpress.org\/reference\/hooks\/wp_nav_menu_objects\/)<\/code>. Questo filtro viene applicato per ogni menu in tutti i menu renderizzati subito prima di generare il relativo HTML, consentendoci di modificare l&#8217;output di testo, le classi e altro.<\/p>\n<p>Il modo in cui desideri visualizzare l&#8217;icona dipende di nuovo da te. Vuoi sostituire il testo del link con l&#8217;icona o vuoi mostrare l&#8217;icona prima o dopo il link testuale? Seguiremo Fontawesome custom emettendo un <code>&lt;i&gt;<\/code>tag con la classe fornita.<\/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>Il modo in cui modifichiamo le voci di menu \u00e8 scorrere le voci di menu utilizzando passa per riferimento (aggiungendo a <code>&amp;<\/code>prima della variabile). Ci\u00f2 significa che qualsiasi modifica che apportiamo all&#8217;elemento, verr\u00e0 applicata all&#8217;oggetto degli elementi padre.<\/p>\n<p>Per ogni articolo utilizziamo la funzione Advanced Custom Field <code>get_field()<\/code>per ottenere il valore del nostro campo, &#8216; <code>fontawesome_icon<\/code>&#8216;. Se \u00e8 impostato, siamo a posto. L&#8217;esempio di codice sopra aggiunger\u00e0 l&#8217;icona prima del testo. Se vuoi aggiungere l&#8217;icona dopo il testo, sostituisci la riga <code>#6<\/code>con:<\/p>\n<pre><code>$item-&gt;title .= '&lt;i class=\"'. $icon. '\"&gt;&lt;\/i&gt;';<\/code><\/pre>\n<p>Oppure, se desideri sostituire il testo con un&#8217;icona, senza mostrare alcun testo, sostituisci la riga <code>#6<\/code>con:<\/p>\n<pre><code>$item-&gt;title = '&lt;i class=\"'. $icon. '\" title=\"'. $item-&gt;title. '\"&gt;&lt;\/i&gt;';<\/code><\/pre>\n<p>Ho aggiunto un <code>title<\/code>attributo in modo che sia un po&#8217; pi\u00f9 informativo per l&#8217;utente frontend. Poich\u00e9 il testo viene rimosso, a volte pu\u00f2 essere fonte di confusione per l&#8217;utente finale a cosa serve la voce di menu. Ma l&#8217; <code>title<\/code>attributo assicura che l&#8217;utente riceva un suggerimento con il testo della voce di menu quando passa il mouse sopra l&#8217;icona. Questo \u00e8 del tutto facoltativo, ovviamente.<\/p>\n<p>Se si utilizza un campo di un tipo diverso, ad esempio un filepicker per i file SVG, \u00e8 necessario regolare l&#8217;output di conseguenza.<\/p>\n<p>E questo \u00e8 tutto! Ora dovresti ottenere un&#8217;icona Fontawesome ovunque sia visualizzato il menu. Ma probabilmente devi aggiungere un po&#8217; di stile. Ad esempio aggiungendo dello spazio tra l&#8217;icona e il testo.<\/p>\n<h3>Aggiunta di classi per uno styling pi\u00f9 semplice<\/h3>\n<p>Puoi aggiungere classi personalizzate al <code>&lt;i&gt;<\/code>tag o aggiungere altro HTML se necessario.<\/p>\n<p>Se devi aggiungere una classe alla voce di menu di wrapping (l&#8217; <code>li<\/code>elemento) hai pieno accesso alle classi di voci di menu che verranno applicate nel filtro sopra. Aggiungi una classe di voci di menu personalizzata per le voci di menu con icone in questo modo:<\/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>Il menu dovrebbe essere emesso in questo modo:<\/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=\"Come aggiungere icone Fontawesome alle voci di menu con campi personalizzati avanzati\" ><\/a><\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Come aggiungere icone Fontawesome alle voci di menu. Utilizziamo i campi personalizzati avanzati per consentire la definizione delle classi. \u00c8 facile regolare il codice per le icone SVG o simili.<\/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":[896,896,720,835,1110,804,804,835,720,844,844,865,865],"tags":[1168],"class_list":{"0":"post-233545","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-codice","9":"category-sviluppatore","10":"category-guida-per-principianti","11":"category-n-a","12":"category-php-6","16":"category-tutorial","18":"category-wordpress-6","20":"tag-affiai-it"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233545","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=233545"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233545\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/224889"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=233545"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=233545"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=233545"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}