{"id":231157,"date":"2022-12-09T19:39:00","date_gmt":"2022-12-09T16:39:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231157"},"modified":"2022-12-07T12:04:58","modified_gmt":"2022-12-07T09:04:58","slug":"menu-di-amministrazione-di-wordpress-riordino-dei-sottomenu","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/menu-di-amministrazione-di-wordpress-riordino-dei-sottomenu\/","title":{"rendered":"Menu di amministrazione di WordPress: riordino dei sottomenu"},"content":{"rendered":"\n<p>Una delle cose sull&#8217;utilizzo dell&#8217;API del menu di WordPress (ovvero <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_menu_page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">add_menu_page<\/a>, <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_submenu_page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">add_submenu_page<\/a> e simili) \u00e8 che non semplifica il riordino delle voci del sottomenu.<\/p>\n<p>Certo, per certe cose come le tassonomie o cose del genere, puoi semplicemente cambiare l&#8217;ordine in cui sono registrate. Ma supponiamo che tu abbia un menu di amministrazione di WordPress e poi alcune pagine di sottomenu in quel particolare menu.<\/p>\n<p>Per impostazione predefinita, WordPress crea il menu di primo livello, quindi crea immediatamente una voce di sottomenu sotto il menu di primo livello che si collega alla stessa pagina. In molti casi, questo pu\u00f2 essere l&#8217;ideale.<\/p>\n<p>In alcuni casi, per\u00f2, potresti voler cambiarlo.<\/p>\n<h2>Menu di amministrazione di WordPress<\/h2>\n<p>Per fare un esempio di quando potresti voler cambiare qualcosa potrebbe essere qualcosa del genere:<\/p>\n<ul>\n<li>Hai un menu di primo livello che ha lo scopo di offrire opzioni dopo la connessione con un&#8217;API di terze parti,<\/li>\n<li>L&#8217;API di terze parti richiede una chiave API (o qualche altra autenticazione), quindi \u00e8 necessario fornire prima le impostazioni per quella,<\/li>\n<li>Perch\u00e9 non rendere la prima voce di menu Impostazioni e la seconda voce di menu Strumenti API effettivi?<\/li>\n<\/ul>\n<p>Naturalmente, quando le impostazioni non sono state impostate, \u00e8 utile visualizzare anche un messaggio nel menu principale degli strumenti API che l&#8217;utente dovrebbe fare clic sulla pagina Impostazioni per accedere alle proprie impostazioni.<\/p>\n<p>Ma questo va oltre lo scopo di questo post. Per ora, ecco un modo per gestire il riordino del menu dal lato server. Prima <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/f4a31feab1a5601496afa644f21e2956#file-00-reorder-submenu-items-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il codice<\/a><\/strong>, poi la spiegazione.<\/p>\n<pre><code>&lt;?php\nadd_action('custom_menu_order', __NAMESPACE__.'acmeReorderSubmenuItems);\n\/**\n * Reorders the menu by placing the second item before the first item.\n *\/\nfunction acmeReorderSubmenuItems()\n{\n    global $submenu;\n    $newSubmenu = [];\n    foreach ($submenu as $menuName =&gt; $menuItems) {\n        if ('acme-api-tools' === $menuName) {\n            $newSubmenu[0] = $menuItems[1];\n            $newSubmenu[1] = $menuItems[0];\n            $submenu['acme-api-tools'] = $newSubmenu;\n            break;\n        }\n    }\n}<\/code><\/pre>\n<p>In generale, lo sto usando nel contesto di un oggetto con spazio dei nomi, ma per questo post lo sto relegando a una funzione che esiste in uno spazio dei nomi.<\/p>\n<\/p>\n<p>Alcune cose da notare:<\/p>\n<ul>\n<li>Sto usando l&#8217; hook <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\/custom_menu_order\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">custom_menu_order<\/a> che \u00e8 un posto ideale per lavorare sulle voci di menu in WordPress,<\/li>\n<li>Sto cercando specificamente il sottomenu acme-api-tools nella chiave <strong>$menuName<\/strong> della variabile array <strong>$submenu ,<\/strong><\/li>\n<li>Creo un array, <strong>$newSubmenu<\/strong>, quindi scambio gli elementi e assegno il nuovo sottomenu al sottomenu esistente identificato dalla chiave.<\/li>\n<\/ul>\n<p>Ci sono alcuni commenti \u2013 forse anche problemi (o almeno considerazioni serie) \u2013 con questo approccio.<\/p>\n<p>Vale a dire, il codice si aspetta di conoscere esattamente la chiave con cui stiamo cercando di lavorare. In alcuni casi va bene, ma se stai cercando di modificare un menu di cui non conosci la chiave (come <strong>acme-api-tools<\/strong> ), allora dovrai modificarlo.<\/p>\n<p>Successivamente, questo presuppone anche che ci siano solo due voci di menu da scambiare. \u00c8 abbastanza facile nel caso sopra, ma se ce ne fossero di pi\u00f9, probabilmente avresti bisogno di una funzione per gestire lo spostamento delle cose e restituire il nuovo array.<\/p>\n<h2>Abbastanza per iniziare<\/h2>\n<p>Detto questo, la funzionalit\u00e0 di cui sopra dovrebbe fornire informazioni sufficienti per almeno come iniziare a farlo, se non di pi\u00f9, e quindi come manipolare l&#8217;array di sottomenu che \u00e8 visibile<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>WordPress crea il menu di primo livello e quindi crea una voce di sottomenu sotto il menu di primo livello che si collega alla stessa pagina. Potresti volerlo cambiare.<\/p>\n","protected":false},"author":1,"featured_media":236238,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,804,844,865],"tags":[1168],"class_list":["post-231157","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-php-6","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231157","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=231157"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231157\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/236238"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=231157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=231157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=231157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}