Jedną z rzeczy związanych z pracą z interfejsem API menu WordPress (czyli add_menu_page, add_submenu_page i tym podobnymi) jest to, że nie ułatwia on zmiany kolejności elementów podmenu.
Jasne, w przypadku niektórych rzeczy, takich jak taksonomie lub tego typu rzeczy, możesz po prostu zmienić kolejność ich rejestracji. Załóżmy jednak, że masz menu administracyjne WordPress, a następnie kilka stron podmenu w tym konkretnym menu.
Domyślnie WordPress tworzy menu najwyższego poziomu, a następnie natychmiast tworzy pozycję podmenu w menu najwyższego poziomu, która prowadzi do tej samej strony. W wielu przypadkach może to być idealne.
Jednak w niektórych przypadkach możesz chcieć to zmienić.
Menu administratora WordPress
Przykładem tego, kiedy możesz chcieć coś zmienić, może być coś takiego:
- Masz menu najwyższego poziomu, które ma oferować opcje po połączeniu z zewnętrznym API,
- API innej firmy wymaga klucza API (lub innego uwierzytelnienia), więc najpierw musisz podać ustawienia,
- Dlaczego nie ustawić pierwszego elementu menu na Ustawienia, a drugiego na rzeczywiste Narzędzia API?
Oczywiście, gdy ustawienia nie zostały skonfigurowane, warto również wyświetlić komunikat w głównym menu Narzędzia interfejsu API, że użytkownik powinien przejść do strony Ustawienia, aby wprowadzić swoje ustawienia.
Ale to wykracza poza zakres tego postu. Na razie oto sposób na zarządzanie zmianą kolejności menu po stronie serwera. Najpierw kod, potem wyjaśnienie.
<?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;
}
}
}
Ogólnie rzecz biorąc, używam tego w kontekście obiektu z przestrzenią nazw, ale w tym poście deleguję go do funkcji, która istnieje w przestrzeni nazw.
Kilka rzeczy do zapamiętania:
- Używam haka custom_menu_order, który jest idealnym miejscem do pracy nad pozycjami menu w WordPressie,
- Szukam konkretnie podmenu acme-api-tools w kluczu $menuName zmiennej tablicowej $submenu ,
- Tworzę tablicę $newSubmenu, a następnie zamieniam elementy i przypisuję nowe podmenu do istniejącego podmenu identyfikowanego przez klucz.
Jest kilka uwag – może nawet problemów (lub przynajmniej poważnych rozważań) – z takim podejściem.
Mianowicie kod oczekuje, że będzie dokładnie znać klucz, z którym chcemy pracować. W niektórych przypadkach jest to w porządku, ale jeśli chcesz zmodyfikować menu, do którego nie znasz klucza (np . acme-api-tools ), musisz to zmienić.
Następnie zakłada się, że istnieją tylko dwa elementy menu do zamiany. W powyższym przypadku jest to dość łatwe, ale gdyby było ich więcej, prawdopodobnie potrzebna byłaby funkcja, która poradzi sobie z przenoszeniem elementów i zwracaniem nowej tablicy.
Wystarczy, aby zacząć
To powiedziawszy, powyższa funkcjonalność powinna dać wystarczająco dużo informacji, aby przynajmniej zacząć to robić, jeśli nie więcej, a następnie jak manipulować widoczną tablicą podmenu