Однією з особливостей роботи з API меню WordPress (тобто add_menu_page, add_submenu_page тощо) є те, що він не полегшує зміну порядку пунктів підменю.
Звичайно, для певних речей, таких як таксономії чи щось подібне, ви можете просто змінити порядок їх реєстрації. Але припустімо, що у вас є меню адміністратора WordPress, а потім кілька сторінок підменю під цим конкретним меню.
За замовчуванням WordPress створює меню верхнього рівня, а потім одразу створює пункт підменю під меню верхнього рівня, який посилається на ту саму сторінку. У багатьох випадках це може бути ідеальним.
Проте в деяких випадках ви можете змінити це.
Меню адміністратора WordPress
Приклад того, коли ви можете щось змінити, може бути таким:
- У вас є меню верхнього рівня, яке призначене для пропонування параметрів після підключення до стороннього API,
- Для стороннього API потрібен ключ API (або інша автентифікація), тому спочатку потрібно надати для цього налаштування,
- Чому б не зробити перший пункт меню Налаштуваннями, а другий пункт меню — власне Інструментами API?
Звичайно, коли параметри не встановлено, корисно також відобразити повідомлення в головному меню інструментів API, що користувач повинен клацнути на сторінці налаштувань, щоб ввести свої налаштування.
Але це виходить за рамки цієї публікації. Наразі ось спосіб керувати зміною порядку меню з боку сервера. Спочатку код, потім пояснення.
<?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;
}
}
}
Взагалі кажучи, я використовую це в контексті об’єкта простору імен, але для цієї публікації я відношу його до функції, яка існує в просторі імен.
Кілька речей, на які варто звернути увагу:
- Я використовую хук custom_menu_order, який є ідеальним місцем для роботи з пунктами меню в WordPress,
- Я шукаю підменю acme-api-tools у ключі $menuName змінної масиву $submenu ,
- Я створюю масив $newSubmenu, а потім міняю елементи місцями та призначаю нове підменю існуючому підменю, визначеному ключем.
Є кілька зауважень – можливо, навіть проблем (або принаймні серйозних міркувань) – щодо цього підходу.
А саме, код очікує точно знати ключ, з яким ми хочемо працювати. У деяких випадках це добре, але якщо ви бажаєте змінити меню, для якого ви не знаєте ключа (наприклад, acme-api-tools ), тоді вам потрібно буде змінити це.
Далі, це також передбачає наявність лише двох пунктів меню для обміну. У наведеному вище випадку це досить просто, але якби їх було більше, то вам, швидше за все, знадобилася б функція, яка б переміщала речі та повертала новий масив.
Досить, щоб почати
Тим не менш, наведені вище функції повинні надати достатньо інформації принаймні про те, як почати це робити, якщо не більше, а потім про те, як маніпулювати видимим масивом підменю