✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

WordPress Admin Meny: Undermeny Omordning

26

En av sakerna med att arbeta med WordPress meny-API (det vill säga add_menu_page, add_submenu_page och liknande) är att det inte gör det lätt att ordna om undermenyalternativen.

Visst, för vissa saker som taxonomier eller liknande kan du bara ändra ordningen i vilka de registreras. Men låt oss säga att du har en WordPress admin-meny och sedan några undermenysidor under just den menyn.

Som standard skapar WordPress menyn på toppnivån, och sedan skapar den omedelbart en undermeny under menyn på översta nivån som länkar till samma sida. I många fall kan detta vara idealiskt.

I vissa fall kanske du vill ändra det.

WordPress adminmeny

För att ge ett exempel på när du kanske vill ändra något kan vara något så här:

  • Du har en meny på toppnivå som är tänkt att erbjuda alternativ efter att ha anslutit till ett tredjeparts-API,
  • Tredjeparts API kräver en API-nyckel (eller någon annan autentisering), så du måste ange inställningar för det först,
  • Varför inte göra det första menyalternativet till Inställningar och det andra menyalternativet till faktiska API-verktyg?

När inställningarna inte har ställts in är det naturligtvis bra att även visa ett meddelande i huvudmenyn för API-verktyg som användaren ska behöva klicka över till sidan Inställningar för att ange sina inställningar.

Men det ligger utanför ramen för detta inlägg. För nu, här är ett sätt att hantera ombeställning av menyn från serversidan. Först koden, sedan förklaringen.

<?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;
        }
    }
}

Generellt sett använder jag detta i samband med ett namnområdesobjekt, men för det här inlägget förvisar jag det till en funktion som finns i ett namnområde.

Några saker att notera:

  • Jag använder custom_menu_order- kroken som är en idealisk plats att arbeta med menyalternativen i WordPress,
  • Jag letar specifikt efter acme-api-tools undermenyn i $menuName- nyckeln för $ submenu-arrayvariabeln ,
  • Jag skapar en array, $newSubmenu, och byter sedan objekten och tilldelar den nya undermenyn till den befintliga undermenyn som identifieras med nyckeln.

Det finns några kommentarer – kanske till och med problem (eller åtminstone allvarliga överväganden) – med detta tillvägagångssätt.

Koden förväntar sig nämligen att veta exakt vilken nyckel vi vill arbeta med. I vissa fall är detta bra, men om du vill ändra en meny som du inte känner till nyckeln för (som acme-api-tools ), så kommer du att behöva ändra detta.

Därefter förutsätter detta också att det bara finns två menyalternativ att byta. Det är tillräckligt enkelt i fallet ovan, men om det fanns fler, skulle du förmodligen behöva en funktion för att hantera att flytta runt saker och returnera den nya arrayen.

Tillräckligt för att komma igång

Som sagt, ovanstående funktionalitet borde ge tillräckligt med information för åtminstone hur man kommer igång med detta, om inte mer, och sedan hur man manipulerar undermenyarrayen som är synlig

Inspelningskälla: tommcfarlin.com

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer