✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Меню администратора WordPress: изменение порядка подменю

23

Одна из особенностей работы с 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 ), вам нужно будет изменить это.

Кроме того, это также предполагает, что есть только два пункта меню для замены. В приведенном выше случае это достаточно просто, но если бы их было больше, вам, вероятно, понадобилась бы функция для перемещения вещей и возврата нового массива.

Достаточно, чтобы начать

Тем не менее, приведенная выше функциональность должна давать достаточно информации, по крайней мере, для того, чтобы начать делать это, если не больше, а затем, как манипулировать видимым массивом подменю.

Источник записи: tommcfarlin.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее