Una delle cose sull’utilizzo dell’API del menu di WordPress (ovvero add_menu_page, add_submenu_page e simili) è che non semplifica il riordino delle voci del sottomenu.
Certo, per certe cose come le tassonomie o cose del genere, puoi semplicemente cambiare l’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.
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ò essere l’ideale.
In alcuni casi, però, potresti voler cambiarlo.
Menu di amministrazione di WordPress
Per fare un esempio di quando potresti voler cambiare qualcosa potrebbe essere qualcosa del genere:
- Hai un menu di primo livello che ha lo scopo di offrire opzioni dopo la connessione con un’API di terze parti,
- L’API di terze parti richiede una chiave API (o qualche altra autenticazione), quindi è necessario fornire prima le impostazioni per quella,
- Perché non rendere la prima voce di menu Impostazioni e la seconda voce di menu Strumenti API effettivi?
Naturalmente, quando le impostazioni non sono state impostate, è utile visualizzare anche un messaggio nel menu principale degli strumenti API che l’utente dovrebbe fare clic sulla pagina Impostazioni per accedere alle proprie impostazioni.
Ma questo va oltre lo scopo di questo post. Per ora, ecco un modo per gestire il riordino del menu dal lato server. Prima il codice, poi la spiegazione.
<?php
add_action('custom_menu_order', __NAMESPACE__.'acmeReorderSubmenuItems);
/**
* Reorders the menu by placing the second item before the first item.
*/
function acmeReorderSubmenuItems()
{
global $submenu;
$newSubmenu = [];
foreach ($submenu as $menuName => $menuItems) {
if ('acme-api-tools' === $menuName) {
$newSubmenu[0] = $menuItems[1];
$newSubmenu[1] = $menuItems[0];
$submenu['acme-api-tools'] = $newSubmenu;
break;
}
}
}
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.
Alcune cose da notare:
- Sto usando l’ hook custom_menu_order che è un posto ideale per lavorare sulle voci di menu in WordPress,
- Sto cercando specificamente il sottomenu acme-api-tools nella chiave $menuName della variabile array $submenu ,
- Creo un array, $newSubmenu, quindi scambio gli elementi e assegno il nuovo sottomenu al sottomenu esistente identificato dalla chiave.
Ci sono alcuni commenti – forse anche problemi (o almeno considerazioni serie) – con questo approccio.
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 acme-api-tools ), allora dovrai modificarlo.
Successivamente, questo presuppone anche che ci siano solo due voci di menu da scambiare. È abbastanza facile nel caso sopra, ma se ce ne fossero di più, probabilmente avresti bisogno di una funzione per gestire lo spostamento delle cose e restituire il nuovo array.
Abbastanza per iniziare
Detto questo, la funzionalità di cui sopra dovrebbe fornire informazioni sufficienti per almeno come iniziare a farlo, se non di più, e quindi come manipolare l’array di sottomenu che è visibile