{"id":230966,"date":"2022-12-09T20:11:00","date_gmt":"2022-12-09T17:11:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230966"},"modified":"2022-12-07T12:04:59","modified_gmt":"2022-12-07T09:04:59","slug":"menu-de-administracao-do-wordpress-reordenacao-do-submenu","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/menu-de-administracao-do-wordpress-reordenacao-do-submenu\/","title":{"rendered":"Menu de administra\u00e7\u00e3o do WordPress: reordena\u00e7\u00e3o do submenu"},"content":{"rendered":"\n<p>Uma das coisas sobre trabalhar com a API de menu do WordPress (que \u00e9 <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 similares) \u00e9 que n\u00e3o facilita a reordena\u00e7\u00e3o dos itens do submenu.<\/p>\n<p>Claro, para certas coisas, como taxonomias ou coisas assim, voc\u00ea pode apenas alterar a ordem em que elas s\u00e3o registradas. Mas digamos que voc\u00ea tenha um menu de administra\u00e7\u00e3o do WordPress e algumas p\u00e1ginas de submenu nesse menu espec\u00edfico.<\/p>\n<p>Por padr\u00e3o, o WordPress cria o menu de n\u00edvel superior e, em seguida, cria imediatamente um item de submenu no menu de n\u00edvel superior que vincula \u00e0 mesma p\u00e1gina. Em muitos casos, isso pode ser o ideal.<\/p>\n<p>Em alguns casos, por\u00e9m, voc\u00ea pode querer mudar isso.<\/p>\n<h2>Menu de administra\u00e7\u00e3o do WordPress<\/h2>\n<p>Para dar um exemplo de quando voc\u00ea pode querer mudar algo, pode ser algo assim:<\/p>\n<ul>\n<li>Voc\u00ea tem um menu de n\u00edvel superior que oferece op\u00e7\u00f5es ap\u00f3s a conex\u00e3o com uma API de terceiros,<\/li>\n<li>A API de terceiros requer uma chave de API (ou alguma outra autentica\u00e7\u00e3o), ent\u00e3o voc\u00ea precisa fornecer configura\u00e7\u00f5es para isso primeiro,<\/li>\n<li>Por que n\u00e3o tornar o primeiro item de menu Configura\u00e7\u00f5es e o segundo item de menu as Ferramentas de API reais?<\/li>\n<\/ul>\n<p>Obviamente, quando as configura\u00e7\u00f5es n\u00e3o foram definidas, \u00e9 \u00fatil tamb\u00e9m exibir uma mensagem no menu principal de Ferramentas da API informando que o usu\u00e1rio deve clicar na p\u00e1gina Configura\u00e7\u00f5es para inserir suas configura\u00e7\u00f5es.<\/p>\n<p>Mas isso est\u00e1 al\u00e9m do escopo deste post. Por enquanto, aqui est\u00e1 uma maneira de gerenciar a reordena\u00e7\u00e3o do menu do lado do servidor. Primeiro <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/f4a31feab1a5601496afa644f21e2956#file-00-reorder-submenu-items-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">o c\u00f3digo<\/a><\/strong>, depois a explica\u00e7\u00e3o.<\/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>De um modo geral, estou usando isso no contexto de um objeto com namespace, mas para este post, estou relegando-o a uma fun\u00e7\u00e3o que existe em um namespace.<\/p>\n<\/p>\n<p>Algumas coisas a serem observadas:<\/p>\n<ul>\n<li>Estou usando o gancho <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> que \u00e9 um lugar ideal para trabalhar nos itens de menu no WordPress,<\/li>\n<li>Estou procurando especificamente o submenu acme-api-tools na chave <strong>$menuName<\/strong> da vari\u00e1vel de array <strong>$submenu ,<\/strong><\/li>\n<li>Eu crio uma matriz, <strong>$newSubmenu<\/strong> e, em seguida, troco os itens e atribuo o novo submenu ao submenu existente identificado pela chave.<\/li>\n<\/ul>\n<p>Existem alguns coment\u00e1rios \u2013 talvez at\u00e9 problemas (ou pelo menos considera\u00e7\u00f5es s\u00e9rias) \u2013 com esta abordagem.<\/p>\n<p>Ou seja, o c\u00f3digo espera saber precisamente a chave com a qual estamos procurando trabalhar. Em alguns casos, isso \u00e9 bom, mas se voc\u00ea deseja modificar um menu para o qual n\u00e3o conhece a chave (como <strong>acme-api-tools<\/strong> ), precisar\u00e1 alterar isso.<\/p>\n<p>Em seguida, isso tamb\u00e9m pressup\u00f5e que h\u00e1 apenas dois itens de menu para trocar. \u00c9 bastante f\u00e1cil no caso acima, mas se houvesse mais, voc\u00ea provavelmente precisaria de uma fun\u00e7\u00e3o para lidar com a movimenta\u00e7\u00e3o das coisas e retornar a nova matriz.<\/p>\n<h2>O suficiente para come\u00e7ar<\/h2>\n<p>Dito isso, a funcionalidade acima deve fornecer informa\u00e7\u00f5es suficientes para pelo menos como come\u00e7ar a fazer isso, se n\u00e3o mais, e como manipular a matriz do submenu vis\u00edvel<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O WordPress cria o menu de n\u00edvel superior e, em seguida, cria um item de submenu no menu de n\u00edvel superior que vincula \u00e0 mesma p\u00e1gina. Voc\u00ea pode querer mudar isso.<\/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":[898,806,846,867],"tags":[1170],"class_list":["post-230966","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-php-8","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/230966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=230966"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/230966\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/236238"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=230966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=230966"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=230966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}