Привет @BinaryBit:
Неудивительно, что вы немного расстроены; меню администратора - одна из самых тупых и разочаровывающих реализаций через ядро WordPress. Честно говоря, я не знаю, о чем они думали, когда создавали это таким образом.
@EAMann сделал отличную работу, объясняя , как работает меню администратора в WordPress (я хотел бы я мог прочитать , что около 4 месяцев назад ... :)
Тем не менее, после того, как я понял, как это работает, я все еще не мог работать с ним, не уделяя достаточно времени, чтобы держать голову прямо, пока я пытался делать простые вещи. Вот почему я создал API меню, которое упрощает и упрощает работу с меню администратора WordPress.
Они на 100% совместимы с существующими структурами WordPress и все еще в альфа-версии, так как я был единственным, кто использовал его. Я уверен, что есть варианты использования, которые они еще не обрабатывают. Но я опубликую код здесь для вас и других, чтобы попробовать.
Вы можете скачать файл, чтобы поместить его в каталог вашей темы, здесь: wp-admin-menu-classes.php, и далее показано, как вы можете вызывать функции в functions.php
файле вашей темы :
<?php
require_once('wp-admin-menu-classes.php');
add_action('admin_menu','my_admin_menu');
function my_admin_menu() {
swap_admin_menu_sections('Pages','Posts'); // Swap location of Posts Section with Pages Section
rename_admin_menu_section('Media','Photos & Video'); // Rename Media Section to "Photos & Video"
delete_admin_menu_section('Links'); // Get rid of Links Section
$movie_tags_item_array = get_admin_menu_item_array('Movies','Movie Tags'); // Save off the Movie Tags Menu
update_admin_menu_section('Movies',array( // Rename two Movie Menu Items and Delete the Movie Tags Item
array('rename-item','item'=>'Movies','new_title'=>'List Movies'),
array('rename-item','item'=>'Add New','new_title'=>'Add Movie'),
array('delete-item','item'=>'Movie Tags'),
));
copy_admin_menu_item('Movies',array('Actors','Add New')); // Copy the 'Add New' over from Actors
renamed_admin_menu_item('Movies','Add New','Add Actor'); // Rename copied Actor 'Add New' to 'Add Actor
add_admin_menu_item('Movies',array( // (Another way to get a 'Add Actor' Link to a section.)
'title' => 'Alt Add Actor ',
'slug' => 'post-new.php?post_type=actor',
), array(// Add Back the Movie Tags at the end.
'where'=>'end'
));
add_admin_menu_item('Movies',$movie_tags_item_array,array(// Add Back the Movie Tags at the end.
'where'=>'end'
));
delete_admin_menu_section('Actors'); // Finally just get rid of the actors section
}
Более того, эти функции даже рассматриваются (в качестве основы) для включения в WordPress 3.1, так что если нам повезет, они могут даже стать стандартными!
Вот краткий обзор того, как строится меню администратора WordPress - я не говорю об
add_menu_page
API, я имею в виду фактическое меню WordPress по умолчанию.Вызов файла меню
Меню, очевидно, загружено
wp-admin/admin.php
. Но он не загружается через стандартный API, который мы привыкли использовать на основе документации WordPress. Скорее, все меню (все возможные опции, подменю и т. Д.) Загружаются через простой массив, определенный вwp-admin/menu.php
.Таким образом , чтобы загрузить систему меню,
admin.php
простоrequire
Smenu.php
... вокруг линии 99 в WordPress 3.0.Загрузка меню
Само меню хранится в глобальном массиве
$menu
. Согласно встроенной документации, массив меню имеет следующие элементы:Например, панель инструментов:
Файл проходит и загружает каждый элемент меню в массив и загружает все их элементы подменю в массив, называемый
$submenu
индексами на основе URL родительского меню. Итак, элемент подменю Dashboard под названием «Dashboard»:После того, как система завершит загрузку всех меню (их не так много, но система пошагово просматривает индекс на 5 или 10 раз ... обратите внимание, что панель инструментов, даже если это первый элемент меню, все еще индексируется как пункт "2" (массивы PHP начинаются с индекса 0 ... так что это дает вам некоторое пространство для маневрирования).
На данный момент, системные вызовы
wp-admin/includes/menu.php
.Пошаговое меню
Этот третий файл проходит через каждый пункт меню и, основываясь на привилегиях, назначенных текущему пользователю, либо использует меню, либо удаляет его. Сначала он просматривает все подменю и удаляет страницы, к которым у пользователя нет доступа. Затем он перебирает родительские страницы и делает то же самое. Затем он удаляет все повторяющиеся разделители, которые остаются после устранения меню.
Наконец, он сортирует меню в соответствии с назначенным им порядком меню.
Заказ пользовательских меню
Хук
admin_menu
вызывается после настройки меню, но до того, как что-либо заказано. Таким образом, можно заказать всю систему меню WordPress без «взлома» API.После запуска действия
admin_menu
ваши пользовательские страницы загружаются в систему. Следующее, что происходит, это то, что WordPress проверяет фильтр, называемыйcustom_menu_order
... этот фильтр всегда возвращаетсяfalse
и сообщает WordPress, хотите ли вы использовать пользовательский порядок.Добавьте к своей теме следующее, чтобы установить флаг,
true
и определите явный порядок меню:Укажите порядок, который вы хотите для всех меню (я предоставил ссылки на файл загрузки меню, чтобы вы могли получить список имен файлов), и об этом нужно позаботиться.
РЕДАКТИРОВАТЬ (02.09.2010):
Чтобы указать порядок экрана редактирования пользовательского типа записи, используя этот метод, вам нужно знать URL-адрес экрана редактирования. У меня в большинстве случаев так и будет
http://blog.url/wp-admin/edit.php?post_type=POST_TYPE
. Это зависит от того, как WordPress настроен на вашем сайте (если он установлен в корне или в подпапке) и от выбранного вами типа публикации.Например...
Допустим, у вас есть собственный тип публикации для «Stack Exchange Questions», и вы хотите, чтобы редактор отображался в том же разделе, что и панель мониторинга, прямо под значком панели инструментов. Вы бы использовали следующий код в
functions.php
файле вашей темы :На остальное меню это не повлияет, но ваша пользовательская страница редактирования будет перемещена в тот же раздел, что и панель мониторинга, и появится сразу под ней. Вы можете использовать это для перемещения ваших пользовательских типов сообщений в любой раздел меню администратора и размещать их в любом порядке. Вы также можете перемещать стандартные пункты меню примерно так же.
Просто убедитесь, что вы указали порядок всех пунктов меню в данном разделе , в противном случае ваше меню может подвергнуться какой-то неожиданной странности.
источник
$
имя переменной ... (Отличный ответ) ..Я понимаю, что это старый поток, но я думаю, что стоит обновить с гораздо более простым решением. Обратите внимание, что это работает с 3.5 и не было протестировано ни с какой другой версией. Следующий код может быть помещен в плагин или файл functions.php.
Смотрите: http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order . Немного изменен, чтобы удовлетворить потребности оригинального плаката (хотя, я надеюсь, он нашел решение к настоящему времени ...).
Любые элементы в меню администратора, которые не перечислены здесь, не будут удалены. Они будут добавлены в нижней части меню.
источник
Я понимаю, что вы не хотите использовать плагин, но для простоты попробуйте плагин Admin Menu Editor от Janis Elsts. Перегруппируйте меню администратора так, как вам нравится; Можно также скрыть пункты меню.
источник
Для перемещения пунктов меню мне нравится использовать глобальную
$menu
переменную.Например, если бы я хотел переместить меню «Страницы» вниз меню, я бы использовал это в
functions.php
качестве плагина:и если бы я хотел поменять меню сообщений и ссылок:
Некоторое время использовал этот трюк, только что протестировал с WP 3.4.1
источник
admin_menu_items
функции, которая была исправлена путем замены наunset($menu[20]);
Потрясающе. Огромное спасибо. Я просто поместил несколько строк кода в мои functions.php
Плюс размещение wp-admin-menu-classes.php в моей папке с темой, и теперь кнопка «сообщения» нажата кнопкой «страницы».
Я надеюсь, что это скоро станет частью ядра, так что нам не нужно писать целое меню внутри функции, чтобы просто изменить порядок двух кнопок.
На самом деле было немного сложно получить более точный порядок для 4 кнопок. Чтобы изменить 4 кнопки на: Страницы, Почта, Медиа, Ссылки, мне нужно было использовать следующий код:
источник