{"id":230380,"date":"2022-12-09T20:09:00","date_gmt":"2022-12-09T17:09:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230380"},"modified":"2022-12-07T12:05:00","modified_gmt":"2022-12-07T09:05:00","slug":"wordpress-admin-meny-undermeny-omordning","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/wordpress-admin-meny-undermeny-omordning\/","title":{"rendered":"WordPress Admin Meny: Undermeny Omordning"},"content":{"rendered":"<p>En av sakerna med att arbeta med WordPress meny-API (det vill <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_menu_page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e4ga 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> och liknande) \u00e4r att det inte g\u00f6r det l\u00e4tt att ordna om undermenyalternativen.<\/p>\n<p>Visst, f\u00f6r vissa saker som taxonomier eller liknande kan du bara \u00e4ndra ordningen i vilka de registreras. Men l\u00e5t oss s\u00e4ga att du har en WordPress admin-meny och sedan n\u00e5gra undermenysidor under just den menyn.<\/p>\n<p>Som standard skapar WordPress menyn p\u00e5 toppniv\u00e5n, och sedan skapar den omedelbart en undermeny under menyn p\u00e5 \u00f6versta niv\u00e5n som l\u00e4nkar till samma sida. I m\u00e5nga fall kan detta vara idealiskt.<\/p>\n<p>I vissa fall kanske du vill \u00e4ndra det.<\/p>\n<h2>WordPress adminmeny<\/h2>\n<p>F\u00f6r att ge ett exempel p\u00e5 n\u00e4r du kanske vill \u00e4ndra n\u00e5got kan vara n\u00e5got s\u00e5 h\u00e4r:<\/p>\n<ul>\n<li>Du har en meny p\u00e5 toppniv\u00e5 som \u00e4r t\u00e4nkt att erbjuda alternativ efter att ha anslutit till ett tredjeparts-API,<\/li>\n<li>Tredjeparts API kr\u00e4ver en API-nyckel (eller n\u00e5gon annan autentisering), s\u00e5 du m\u00e5ste ange inst\u00e4llningar f\u00f6r det f\u00f6rst,<\/li>\n<li>Varf\u00f6r inte g\u00f6ra det f\u00f6rsta menyalternativet till Inst\u00e4llningar och det andra menyalternativet till faktiska API-verktyg?<\/li>\n<\/ul>\n<p>N\u00e4r inst\u00e4llningarna inte har st\u00e4llts in \u00e4r det naturligtvis bra att \u00e4ven visa ett meddelande i huvudmenyn f\u00f6r API-verktyg som anv\u00e4ndaren ska beh\u00f6va klicka \u00f6ver till sidan Inst\u00e4llningar f\u00f6r att ange sina inst\u00e4llningar.<\/p>\n<p>Men det ligger utanf\u00f6r ramen f\u00f6r detta inl\u00e4gg. F\u00f6r nu, h\u00e4r \u00e4r ett s\u00e4tt att hantera ombest\u00e4llning av menyn fr\u00e5n serversidan. F\u00f6rst <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/f4a31feab1a5601496afa644f21e2956#file-00-reorder-submenu-items-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">koden<\/a><\/strong>, sedan f\u00f6rklaringen.<\/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>Generellt sett anv\u00e4nder jag detta i samband med ett namnomr\u00e5desobjekt, men f\u00f6r det h\u00e4r inl\u00e4gget f\u00f6rvisar jag det till en funktion som finns i ett namnomr\u00e5de.<\/p>\n<\/p>\n<p>N\u00e5gra saker att notera:<\/p>\n<ul>\n<li>Jag anv\u00e4nder <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> kroken som \u00e4r en idealisk plats att arbeta med menyalternativen i WordPress,<\/li>\n<li>Jag letar specifikt efter acme-api-tools undermenyn i <strong>$menuName-<\/strong> nyckeln f\u00f6r <strong>$<\/strong> submenu-arrayvariabeln ,<\/li>\n<li>Jag skapar en array, <strong>$newSubmenu<\/strong>, och byter sedan objekten och tilldelar den nya undermenyn till den befintliga undermenyn som identifieras med nyckeln.<\/li>\n<\/ul>\n<p>Det finns n\u00e5gra kommentarer \u2013 kanske till och med problem (eller \u00e5tminstone allvarliga \u00f6verv\u00e4ganden) \u2013 med detta tillv\u00e4gag\u00e5ngss\u00e4tt.<\/p>\n<p>Koden f\u00f6rv\u00e4ntar sig n\u00e4mligen att veta exakt vilken nyckel vi vill arbeta med. I vissa fall \u00e4r detta bra, men om du vill \u00e4ndra en meny som du inte k\u00e4nner till nyckeln f\u00f6r (som <strong>acme-api-tools<\/strong> ), s\u00e5 kommer du att beh\u00f6va \u00e4ndra detta.<\/p>\n<p>D\u00e4refter f\u00f6ruts\u00e4tter detta ocks\u00e5 att det bara finns tv\u00e5 menyalternativ att byta. Det \u00e4r tillr\u00e4ckligt enkelt i fallet ovan, men om det fanns fler, skulle du f\u00f6rmodligen beh\u00f6va en funktion f\u00f6r att hantera att flytta runt saker och returnera den nya arrayen.<\/p>\n<h2>Tillr\u00e4ckligt f\u00f6r att komma ig\u00e5ng<\/h2>\n<p>Som sagt, ovanst\u00e5ende funktionalitet borde ge tillr\u00e4ckligt med information f\u00f6r \u00e5tminstone hur man kommer ig\u00e5ng med detta, om inte mer, och sedan hur man manipulerar undermenyarrayen som \u00e4r synlig<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <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 skapar menyn p\u00e5 \u00f6versta niv\u00e5n och skapar sedan en undermeny under menyn p\u00e5 \u00f6versta niv\u00e5n som l\u00e4nkar till samma sida. Du kanske vill \u00e4ndra p\u00e5 det.<\/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":[848,901,807,868],"tags":[1173],"class_list":["post-230380","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-php-9","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230380","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=230380"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230380\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/236238"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=230380"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=230380"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=230380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}