Я немного расстроился после того, как потратил несколько часов, безуспешно пытаясь выполнить эту довольно простую задачу.
По сути, у меня есть 5 пользовательских типов сообщений, которые я создал, и все, что я хочу сделать, это показать каждый из них в определенном порядке непосредственно под «панелью инструментов».
Из документации WordPress кажется, что вы не можете этого сделать, потому что самый высокий порядок меню, кажется, «5». И выше Л.
Я предполагаю, что какой-то эксперт, читающий это, может показать мне простой способ, которым я могу упорядочить меню администратора именно так, как я хочу, используя файл функций и без использования плагина (который, как я знаю, существует).
Пожалуйста, попробуйте создать 5 отдельных типов сообщений и включить их в определенном порядке непосредственно под панелью инструментов… кажется, это невозможно.??… есть какой-то хак jquery, чтобы заставить эту работу работать могли бы поделиться со мной или желательно без использования jQuery?
Привет @BinaryBit:
Неудивительно, что вы немного расстроены; меню администратора — одна из самых тупых и разочаровывающих реализаций в ядре WordPress. Честно говоря, я не знаю, о чем они думали, когда проектировали это таким образом.
@EAMann проделал отличную работу, объяснив, как работают меню администратора в WordPress (жаль, что я не смог прочитать это около 4 месяцев назад… 🙂
Тем не менее, после того, как я понял, как это работает, я все еще не мог работать с ним, не уделяя достаточно времени, чтобы держать голову прямо, пока я пытался делать простые вещи. Вот почему я создал API меню, который упрощает и оптимизирует работу с меню администратора WordPress.
Они на 100% совместимы с существующими структурами WordPress и все еще находятся в стадии альфа-тестирования, так как я был единственным, кто их использовал. Я уверен, что есть варианты использования, которые они еще не обрабатывают. Но я опубликую код здесь, чтобы вы и другие могли попробовать.
Вы можете скачать файл и поместить его в каталог вашей темы здесь: wp-admin-menu-classes.php, а далее показано, как вы можете вызывать функции в
functions.php
файле вашей темы:Более того, эти функции даже рассматриваются (в качестве основы) для включения в WordPress 3.1, поэтому, если нам повезет, они могут даже стать стандартом!
Фантастическое дополнение к API! Мне потребовались месяцы, чтобы добавить свой первый пользовательский раздел меню с существующей структурой (именно поэтому я много изучал код)… но ваш API кажется гораздо более интуитивно понятным в использовании!
@EAMann — Спасибо! Если вы хотите предложить какие-либо предложения или даже сотрудничать в его улучшении, я бы хотел установить что-то, что могло бы облегчить жизнь всем, кроме тех немногих, кто случайно увидел этот вопрос и ответ.
это сделало ядро или это или что-то подобное все еще требуется для управления порядком пунктов меню в админке?
Насколько я понял, его перенесли на WP 3.5.
Привет, Майк, wp_debug выдает ошибку в этой функции: ——— function swap_admin_menu_sections($from_section,$to_section) { $from_section = get_admin_menu_section($from_section); если ($ from_section) $ from_section-> swap_with ($ to_section); вернуть раздел $; } — Примечание: неопределенная переменная: раздел
В вашем примере кода есть небольшая ошибка под заголовком «Заказ пользовательских меню», в условном операторе if отсутствует
$
имя переменной… (Хотя отличный ответ)..Как бы вы добавили настраиваемый тип сообщения для «Вопросов по обмену стеками» в раздел под разделом «Панель инструментов»?
Привет EAMann — быстрый вопрос. С самой новой версии wordpress этот процесс вообще изменился или стал проще?
Как насчет подменю ? Есть ли аналогичный метод перестановки элементов подменю ?
@GiraldiMaggio Пожалуйста , задайте новый вопрос и сошлитесь на этот.
Да, это намного лучше, также для изменения порядка элементов подменю вы можете отключить, а затем сбросить их.
Я попробовал этот плагин в многосайтовой установке. Он работает лучше всего. Но нам нужно вручную настроить параметры для каждого дочернего сайта, если у нас многосайтовая установка.
Я знаю, что это старый пост, но что касается вашего первого фрагмента, я столкнулся с проблемой с последней строкой в
admin_menu_items
функции, которая была исправлена путем замены ее наunset($menu[20]);
Вот краткое описание того, как создается меню администратора 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
вместо этого установить флаг и определить явный порядок меню:Укажите желаемый порядок для всех меню (я предоставил ссылки на файл загрузки меню, чтобы вы могли получить список имен файлов), и это должно позаботиться об этом.
РЕДАКТИРОВАТЬ (9/2/2010):
Чтобы указать порядок экрана редактирования пользовательского типа записи с помощью этого метода, вам необходимо знать URL-адрес экрана редактирования. В большинстве случаев это будет
http://blog.url/wp-admin/edit.php?post_type=POST_TYPE
. Это зависит от того, как WordPress настроен на вашем сайте (если он установлен в корне или во вложенной папке) и слаг пользовательского типа записи, который вы используете.Например…
Допустим, у вас есть настраиваемый тип сообщения для «Вопросы Stack Exchange», и вы хотите, чтобы редактор отображался в том же разделе, что и панель инструментов, непосредственно под значком панели инструментов. Вы должны использовать следующий код в
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.
Потрясающий. Большое спасибо. Я просто добавил несколько строк кода в свой functions.php
Плюс размещение wp-admin-menu-classes.php в папке моей темы, и теперь кнопка «сообщения» заменена кнопкой «страницы».
Я надеюсь, что это скоро станет частью ядра и таким образом, что нам не нужно будет писать все меню внутри функции, чтобы просто изменить порядок двух кнопок.
На самом деле было немного сложно получить более конкретный порядок для 4 кнопок. Чтобы изменить 4 кнопки на: Pages, Post, Media, Links, мне нужно было использовать следующий код: