{"id":233378,"date":"2023-02-11T14:48:00","date_gmt":"2023-02-11T11:48:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233378"},"modified":"2022-11-10T23:22:14","modified_gmt":"2022-11-10T20:22:14","slug":"aggiungi-meta-impostazioni-personalizzate-intuitive-alle-voci-di-menu-di-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/aggiungi-meta-impostazioni-personalizzate-intuitive-alle-voci-di-menu-di-wordpress\/","title":{"rendered":"Aggiungi meta impostazioni personalizzate intuitive alle voci di menu di WordPress"},"content":{"rendered":"\n<p>In un recente aggiornamento di WordPress ora \u00e8 possibile e abbastanza semplice aggiungere meta campi personalizzati alle voci di menu. In questo post impareremo come aggiungere le nostre impostazioni personalizzate alle voci di menu, aggiornare le loro impostazioni e infine come prendere i metadati in uso.<\/p>\n<p>Recentemente WordPress <a href=\"https:\/\/make.wordpress.org\/core\/2020\/02\/25\/wordpress-5-4-introduces-new-hooks-to-add-custom-fields-to-menu-items\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ha annunciato il supporto per l&#8217;aggiunta di campi personalizzati alle voci di menu<\/a> nella versione 5.4. Sono state aggiunte due nuove azioni che consentono agli sviluppatori di aggiungere campi personalizzati nella pagina di amministrazione del menu di WordPress e nell&#8217;editor di menu di Customizer. In questo post ci concentreremo su uno di questi, quello per la pagina di amministrazione del menu di WordPress.<\/p>\n<p>Con questa modifica non \u00e8 pi\u00f9 necessario forzare gli utenti del tema o del plug-in a ricordare e digitare i nomi delle classi per attivare le &quot;impostazioni&quot; delle voci di menu. Finora questo \u00e8 stato un processo comune per cose come rendere una voce di menu simile a un pulsante o tra diversi modelli di menu a discesa. Spesso in combinazione con un menu walker personalizzato.<\/p>\n<p>Tieni presente che affinch\u00e9 questo codice funzioni \u00e8 necessaria la versione minima di WordPress 5.4.0.<\/p>\n<h2>Cosa faremo in questo tutorial<\/h2>\n<p>Con il nuovo hook alle voci di menu e il supporto di WordPress per l&#8217;aggiunta di metadati alle voci di menu non c&#8217;\u00e8 davvero alcun limite al tipo di impostazioni desiderate. Il processo dipende dal risultato finale. Nella maggior parte dei casi \u00e8 sufficiente aggiungere una classe CSS personalizzata alla voce di menu.<\/p>\n<p>Per semplificare, in questo post aggiungeremo una casella di controllo denominata &quot;Mostra come pulsante&quot;. Nel nostro tema abbiamo CSS che modeller\u00e0 una voce di menu in modo che assomigli a un pulsante (invito all&#8217;azione) se l&#8217;elemento ha una determinata classe. Invece di costringere l&#8217;utente del tema a digitare la classe CSS &quot;menu-item-button&quot; nel campo della classe CSS della voce di menu in admin, offriamo loro una casella di controllo di facile utilizzo.<\/p>\n<p>Alla fine di questo post troverai alcune idee per altre azioni e filtri da utilizzare se vuoi fare di pi\u00f9 che aggiungere semplicemente una classe CSS.<\/p>\n<p>Iniziamo!<\/p>\n<h2>Aggiunta di campi personalizzati alle voci di menu<\/h2>\n<p>Il nuovo hook aggiunto di recente \u00e8 <code>[wp_nav_menu_item_custom_fields](https:\/\/developer.wordpress.org\/reference\/hooks\/wp_nav_menu_item_custom_fields\/)<\/code>. \u00c8 un gancio che si attiva proprio sopra i pulsanti di spostamento di una voce di menu;<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153876-61e51560662d6.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-153876-61e51560662d6.png\" alt=\"Aggiungi meta impostazioni personalizzate intuitive alle voci di menu di WordPress\" ><\/a><\/p>\n<p>Il gancio viene fornito con non meno di cinque parametri. In questo post faremo cose che richiedono solo le due prime.<\/p>\n<ul>\n<li><code>item_id<\/code>: L&#8217;ID della voce di menu corrente<\/li>\n<li><code>item<\/code>: Oggetto dati voce di menu<\/li>\n<li><code>depth<\/code>: La profondit\u00e0 della voce di menu all&#8217;interno del menu, indicata come numero intero<\/li>\n<li><code>args<\/code>: un oggetto degli argomenti delle voci di menu<\/li>\n<li><code>nav_id<\/code>: L&#8217;ID del menu di navigazione<\/li>\n<\/ul>\n<p>Tutti gli input aggiunti in questo hook devono avere un <code>name<\/code>attributo (poich\u00e9 l&#8217;editor di menu \u00e8 un modulo). L&#8217;attributo name pu\u00f2 essere nominato come vuoi ma deve essere univoco e devi aggiungere l&#8217;ID della voce di menu (primo parametro) tra parentesi. Es <code>name=\"my-custom-field[&lt;item ID&gt;]<\/code>. &#8220;. Questo \u00e8 il modo in cui lo fanno le altre impostazioni standard delle voci di menu.<\/p>\n<p>Iniziamo con un esempio di aggiunta di una casella di controllo per rendere la voce di menu simile a un pulsante quando il menu \u00e8 posizionato come menu principale. Ci collegheremo <code>wp_nav_menu_item_custom_fields<\/code>solo con i primi due parametri e faremo quanto segue:<\/p>\n<pre><code>add_action('wp_nav_menu_item_custom_fields', function($item_id, $item) {\n    $show_as_button = get_post_meta($item_id, '_show-as-button', true);\n    ?&gt;\n    &lt;p class=\"awp-show-as-button description description-wide\"&gt;\n        &lt;label for=\"awp-menu-item-button-&lt;?php echo $item_id; ?&gt;\" &gt;\n            &lt;input type=\"checkbox\" \n                id=\"awp-menu-item-button-&lt;?php echo $item_id; ?&gt;\" \n                name=\"awp-menu-item-button[&lt;?php echo $item_id; ?&gt;]\" \n                &lt;?php checked($show_as_button, true); ?&gt; \n            \/&gt;&lt;?php _e('Show as a button', 'awp'); ?&gt;\n        &lt;\/label&gt;\n    &lt;\/p&gt;\n    &lt;?php\n}, 10, 2);<\/code><\/pre>\n<p>Alla riga <code>#2<\/code>recuperiamo il valore corrente della nostra voce di menu meta. Le voci di menu utilizzano post meta, quindi usiamo ci\u00f2 con <code>[get_post_meta](https:\/\/developer.wordpress.org\/reference\/functions\/get_post_meta\/)()<\/code>cui probabilmente hai gi\u00e0 familiarit\u00e0. Memorizziamo i metadati della voce di menu tramite il tasto &#8216; <code>_show-as-button<\/code>&#8216;.<\/p>\n<p>Quindi si tratta di riecheggiare del buon HTML. Il codice sopra utilizza alcune delle classi gi\u00e0 utilizzate per le voci di menu in modo da renderlo gradevole senza aggiungere uno stile personalizzato (un <code>p<\/code>tag con le classi &quot; <code>description description-wide<\/code>&quot;).<\/p>\n<p>Le parti importanti accadono in linea <code>#8<\/code>e <code>#9<\/code>. Seguiamo la regola dell&#8217;attributo name, aggiungendo il <code>$item_id<\/code>tra parentesi, e ci assicuriamo che il valore salvato corrente si rifletta nella casella di controllo. Puoi aggiungere qualsiasi tipo di input e persino pi\u00f9 input qui. Ricorda solo di fornire l&#8217; <code>name<\/code>attributo appropriato e di impostare correttamente il loro valore corrente.<\/p>\n<p>Con questo codice nel codice del tuo tema <code>functions.php<\/code>o del plug-in, dovresti ora ottenere una nuova casella di controllo per tutte le voci di menu:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153876-61e5156147558.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-153876-61e5156147558.png\" alt=\"Aggiungi meta impostazioni personalizzate intuitive alle voci di menu di WordPress\" ><\/a><\/p>\n<p>Attualmente non sta salvando il nostro campo. Questo \u00e8 il prossimo passo.<\/p>\n<h2>Aggiornamento dei campi personalizzati<\/h2>\n<p>Per aggiornare i campi personalizzati sulle voci di menu utilizziamo l&#8217;hook <code>[wp_update_nav_menu_item](https:\/\/developer.wordpress.org\/reference\/hooks\/wp_update_nav_menu_item\/)<\/code>. Viene fornito con tre argomenti, ma abbiamo bisogno solo del secondo che \u00e8 l&#8217;ID della voce di menu.<\/p>\n<p>Il modo in cui gestisci il salvataggio del valore dei tuoi input dipende da te. Ho scelto di salvare semplicemente &quot; <code>_show-as-button<\/code>&quot; come vero o falso. Basta usare <code>[update_post_meta](https:\/\/developer.wordpress.org\/reference\/functions\/update_post_meta\/)()<\/code>e\/o <code>[delete_post_meta](https:\/\/developer.wordpress.org\/reference\/functions\/delete_post_meta\/)()<\/code>.<\/p>\n<pre><code>add_action('wp_update_nav_menu_item', function($menu_id, $menu_item_db_id) {\n    $button_value = (isset($_POST['awp-menu-item-button'][$menu_item_db_id]) &amp;&amp; $_POST['awp-menu-item-button'][$menu_item_db_id] == 'on')? true: false;\n    update_post_meta($menu_item_db_id, '_show-as-button', $button_value);\n}, 10, 2);<\/code><\/pre>\n<p>Nel codice sopra prendo il valore del campo personalizzato in base al suo nome <code>$_POST<\/code>nell&#8217;array. Poich\u00e9 \u00e8 una casella di controllo, non esister\u00e0 <code>$_POST<\/code>nell&#8217;array (deselezionata) o verr\u00e0 restituita come &#8216; <code>on<\/code>&#8216;. Quindi aggiorno la meta chiave &#8216; <code>_show-as-button<\/code>&#8216; come vera o falsa.<\/p>\n<p>Con il codice sopra dovresti vedere che il tuo campo si sta aggiornando correttamente durante il salvataggio del menu.<\/p>\n<p>Il prossimo passo \u00e8 fare qualcosa per i nostri metadati personalizzati. E come procedi dipende dal risultato finale. Come per il nostro esempio, tutto ci\u00f2 che dobbiamo fare \u00e8 aggiungere una classe personalizzata alla voce di menu.<\/p>\n<h2>Aggiorna la voce di menu Classe CSS<\/h2>\n<p>WordPress offre un filtro sulle classi delle voci di menu: <code>[nav_menu_css_class](https:\/\/developer.wordpress.org\/reference\/hooks\/nav_menu_css_class\/)<\/code>. Tutto quello che dobbiamo fare \u00e8 aggiungere una classe personalizzata all&#8217;array tramite questo filtro se il nostro meta personalizzato \u00e8 <code>true<\/code>. Usiamo <code>[get_post_meta](https:\/\/developer.wordpress.org\/reference\/functions\/get_post_meta\/)()<\/code>per ottenere il valore di &#8216; <code>_show-as-button<\/code>&#8216; e se \u00e8 vero, aggiungiamo la classe CSS &#8216; <code>menu-item-button<\/code>&#8216;:<\/p>\n<pre><code>add_filter('nav_menu_css_class', function($classes, $menu_item) {\n    $show_as_button = get_post_meta($menu_item-&gt;ID, '_show-as-button', true);\n    if ($show_as_button) {\n        $classes[] = 'menu-item-button';\n    }\n    return $classes;\n}, 10, 2);<\/code><\/pre>\n<p>Il <code>nav_menu_css_class<\/code>filtro viene fornito con un totale di quattro argomenti, inclusi gli argomenti di menu e la profondit\u00e0 della voce di menu. Se necessario, puoi fare in modo che i nomi delle classi siano influenzati da questi valori. Ad esempio, di solito non avrebbe senso trasformare una voce di menu in un pulsante a meno che non sia al livello superiore (e non all&#8217;interno di un menu a discesa).<\/p>\n<p>Con il codice sopra dovresti ora vedere che qualsiasi voce di menu che ha selezionato &quot;Mostra come pulsante&quot; otterr\u00e0 la classe &#8216; <code>menu-item-button<\/code>&#8216;.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153876-61e515621cd00.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-153876-61e515621cd00.png\" alt=\"Aggiungi meta impostazioni personalizzate intuitive alle voci di menu di WordPress\" ><\/a><\/p>\n<p>Tieni presente: potresti riscontrare che il <code>nav_menu_css_class<\/code>filtro non viene applicato se il menu utilizza un menu walker personalizzato che, ad esempio, contiene il metodo <code>start_el()<\/code>. Il walker deve applicare il <code>nav_menu_css_class<\/code>filtro alle classi della voce di menu (usando <code>apply_filters()<\/code>) affinch\u00e9 il filtro sopra funzioni!<\/p>\n<h2>Altri usi dei metacampi personalizzati delle voci di menu<\/h2>\n<p>Come accennato, il processo di utilizzo dei campi personalizzati dipende dal risultato finale. \u00c8 difficile fare un post che copra tutte le possibilit\u00e0. Ma almeno questo dovrebbe darti delle idee. L&#8217;esempio sopra ha mostrato come aggiungere semplicemente una classe personalizzata alla voce di menu.<\/p>\n<p>In altri casi potresti voler anticipare i metadati in un menu walker. Nella maggior parte delle funzioni di un menu walker hai accesso all&#8217;ID della voce di menu e quindi puoi facilmente recuperare i metadati.<\/p>\n<p>Un&#8217;alternativa all&#8217;utilizzo di un menu walker personalizzato \u00e8 possibile utilizzare il filtro <code>[wp_setup_nav_menu_item](https:\/\/developer.wordpress.org\/reference\/functions\/wp_setup_nav_menu_item\/)<\/code>per un maggiore controllo sull&#8217;oggetto voce di menu.<\/p>\n<p>Oppure puoi utilizzare il filtro <code>[wp_get_nav_menu_items](https:\/\/developer.wordpress.org\/reference\/functions\/wp_get_nav_menu_items\/)<\/code>per escludere, ad esempio, le voci di menu, se la tua impostazione \u00e8 limitare la visibilit\u00e0 delle voci di menu.<\/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>In un recente aggiornamento di WordPress ora \u00e8 possibile e abbastanza semplice aggiungere meta campi personalizzati alle voci di menu. In questo post impareremo come!<\/p>\n","protected":false},"author":1,"featured_media":223830,"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,928,720,928,844,844,865,865],"tags":[1168],"class_list":["post-233378","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-sviluppatore","category-guida-per-principianti","category-n-a","category-php-6","category-soggetti","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233378","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=233378"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233378\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/223830"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=233378"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=233378"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=233378"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}