{"id":230306,"date":"2022-12-09T20:09:00","date_gmt":"2022-12-09T17:09:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230306"},"modified":"2022-12-07T12:04:59","modified_gmt":"2022-12-07T09:04:59","slug":"menu-administratora-wordpress-zmiana-kolejnosci-podmenu","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/menu-administratora-wordpress-zmiana-kolejnosci-podmenu\/","title":{"rendered":"Menu administratora WordPress: Zmiana kolejno\u015bci podmenu"},"content":{"rendered":"\n<p>Jedn\u0105 z rzeczy zwi\u0105zanych z prac\u0105 z interfejsem API menu WordPress (czyli <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> i tym podobnymi) jest to, \u017ce nie u\u0142atwia on zmiany kolejno\u015bci element\u00f3w podmenu.<\/p>\n<p>Jasne, w przypadku niekt\u00f3rych rzeczy, takich jak taksonomie lub tego typu rzeczy, mo\u017cesz po prostu zmieni\u0107 kolejno\u015b\u0107 ich rejestracji. Za\u0142\u00f3\u017cmy jednak, \u017ce masz menu administracyjne WordPress, a nast\u0119pnie kilka stron podmenu w tym konkretnym menu.<\/p>\n<p>Domy\u015blnie WordPress tworzy menu najwy\u017cszego poziomu, a nast\u0119pnie natychmiast tworzy pozycj\u0119 podmenu w menu najwy\u017cszego poziomu, kt\u00f3ra prowadzi do tej samej strony. W wielu przypadkach mo\u017ce to by\u0107 idealne.<\/p>\n<p>Jednak w niekt\u00f3rych przypadkach mo\u017cesz chcie\u0107 to zmieni\u0107.<\/p>\n<h2>Menu administratora WordPress<\/h2>\n<p>Przyk\u0142adem tego, kiedy mo\u017cesz chcie\u0107 co\u015b zmieni\u0107, mo\u017ce by\u0107 co\u015b takiego:<\/p>\n<ul>\n<li>Masz menu najwy\u017cszego poziomu, kt\u00f3re ma oferowa\u0107 opcje po po\u0142\u0105czeniu z zewn\u0119trznym API,<\/li>\n<li>API innej firmy wymaga klucza API (lub innego uwierzytelnienia), wi\u0119c najpierw musisz poda\u0107 ustawienia,<\/li>\n<li>Dlaczego nie ustawi\u0107 pierwszego elementu menu na Ustawienia, a drugiego na rzeczywiste Narz\u0119dzia API?<\/li>\n<\/ul>\n<p>Oczywi\u015bcie, gdy ustawienia nie zosta\u0142y skonfigurowane, warto r\u00f3wnie\u017c wy\u015bwietli\u0107 komunikat w g\u0142\u00f3wnym menu Narz\u0119dzia interfejsu API, \u017ce u\u017cytkownik powinien przej\u015b\u0107 do strony Ustawienia, aby wprowadzi\u0107 swoje ustawienia.<\/p>\n<p>Ale to wykracza poza zakres tego postu. Na razie oto spos\u00f3b na zarz\u0105dzanie zmian\u0105 kolejno\u015bci menu po stronie serwera. Najpierw <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/f4a31feab1a5601496afa644f21e2956#file-00-reorder-submenu-items-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kod<\/a><\/strong>, potem wyja\u015bnienie.<\/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>Og\u00f3lnie rzecz bior\u0105c, u\u017cywam tego w kontek\u015bcie obiektu z przestrzeni\u0105 nazw, ale w tym po\u015bcie deleguj\u0119 go do funkcji, kt\u00f3ra istnieje w przestrzeni nazw.<\/p>\n<\/p>\n<p>Kilka rzeczy do zapami\u0119tania:<\/p>\n<ul>\n<li>U\u017cywam haka <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>, kt\u00f3ry jest idealnym miejscem do pracy nad pozycjami menu w WordPressie,<\/li>\n<li>Szukam konkretnie podmenu acme-api-tools w kluczu <strong>$menuName<\/strong> zmiennej tablicowej <strong>$submenu ,<\/strong><\/li>\n<li>Tworz\u0119 tablic\u0119 <strong>$newSubmenu<\/strong>, a nast\u0119pnie zamieniam elementy i przypisuj\u0119 nowe podmenu do istniej\u0105cego podmenu identyfikowanego przez klucz.<\/li>\n<\/ul>\n<p>Jest kilka uwag \u2013 mo\u017ce nawet problem\u00f3w (lub przynajmniej powa\u017cnych rozwa\u017ca\u0144) \u2013 z takim podej\u015bciem.<\/p>\n<p>Mianowicie kod oczekuje, \u017ce b\u0119dzie dok\u0142adnie zna\u0107 klucz, z kt\u00f3rym chcemy pracowa\u0107. W niekt\u00f3rych przypadkach jest to w porz\u0105dku, ale je\u015bli chcesz zmodyfikowa\u0107 menu, do kt\u00f3rego nie znasz klucza (np <strong>. acme-api-tools<\/strong> ), musisz to zmieni\u0107.<\/p>\n<p>Nast\u0119pnie zak\u0142ada si\u0119, \u017ce istniej\u0105 tylko dwa elementy menu do zamiany. W powy\u017cszym przypadku jest to do\u015b\u0107 \u0142atwe, ale gdyby by\u0142o ich wi\u0119cej, prawdopodobnie potrzebna by\u0142aby funkcja, kt\u00f3ra poradzi sobie z przenoszeniem element\u00f3w i zwracaniem nowej tablicy.<\/p>\n<h2>Wystarczy, aby zacz\u0105\u0107<\/h2>\n<p>To powiedziawszy, powy\u017csza funkcjonalno\u015b\u0107 powinna da\u0107 wystarczaj\u0105co du\u017co informacji, aby przynajmniej zacz\u0105\u0107 to robi\u0107, je\u015bli nie wi\u0119cej, a nast\u0119pnie jak manipulowa\u0107 widoczn\u0105 tablic\u0105 podmenu<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <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 tworzy menu najwy\u017cszego poziomu, a nast\u0119pnie tworzy pozycj\u0119 podmenu w menu najwy\u017cszego poziomu, kt\u00f3ra prowadzi do tej samej strony. Mo\u017cesz to zmieni\u0107.<\/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":[897,805,845,866],"tags":[1169],"class_list":["post-230306","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kod","category-php-7","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230306","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=230306"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230306\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/236238"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=230306"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=230306"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=230306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}