Измените порядок разделов меню администратора?
5 ответ
- голосов
-
- 2010-09-02
Привет, @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 ,так что,если нам повезет,они могут даже стать стандартными!
Hi @BinaryBit:
It's no wonder you are a bit frustrated; the admin menu is one of the most obtuse and frustrating implementations through WordPress core. Honestly, I don't know what they were thinking when they designed it that way.
@EAMann did an excellent job of explaining how the admin menus work in WordPress (I wish I had been able to read that about 4 months ago... :)
Still, after I figured it out how it worked I was still at a loss to work with it without devoting enough time to keep my head straight while I tried to do simple things. So that's why I built a Menu API that simplifies and streamlines working with the WordPress admin menu.
They are 100% compatible with WordPress' existing structures and still very much in alpha since I've been the only one using it. I'm sure there are use-cases they do not yet handle. But I'll post the code here for you and others to try out.
You can download the file to drop in your theme's directory here: wp-admin-menu-classes.php and what follows shows how you might call the functions in your theme's
functions.php
file:<?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 }
What's more, these functions are even under consideration (as a base) for inclusion in WordPress 3.1 so if we're lucky these might even become standard!
-
* Фантастическое * дополнение к API!Мне потребовались месяцы,чтобы добавить свой первый раздел настраиваемого меню с существующей структурой (именно поэтому я много изучал код) ... но ваш API кажется гораздо более интуитивным в использовании!*Fantastic* addition to the API! It took me months to add my first custom menu section with the existing framework (which is why I studied the code do much) ... but your API seems much more intuitive to use!
- 0
- 2010-09-02
- EAMann
-
* @ EAMann * - Спасибо!Если вы хотите внести какие-либо предложения или даже сотрудничать в его улучшении,я бы хотел создать что-то,что могло бы упростить задачу для всех,за исключением тех немногих,кто случайно видел эти вопросы и ответы.*@EAMann* - Thanks! If you want to offer any suggestions or even collaborate on improving it I'd love to get something established that could make it easier for everyone except for just the few who happen to see this Q&A.
- 0
- 2010-09-03
- MikeSchinkel
-
это сделало ядро или это или что-то подобное все еще требуется для управления порядком пунктов меню в админке?did this make core or is this or something similar still required to manipulate the order of menu items in the admin?
- 0
- 2012-09-12
- Q Studio
-
Насколько я понял,он перенесен на WP 3.5As far as i have found, it's been postponed to WP 3.5
- 0
- 2012-09-22
- pixeline
-
Привет,Майк,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); return $ section; } --- Примечание: неопределенная переменная: разделHey Mike - wp_debug throws an error on this function: -------- function swap_admin_menu_sections($from_section,$to_section) { $from_section = get_admin_menu_section($from_section); if ($from_section) $from_section->swap_with($to_section); return $section; } --- Notice: Undefined variable: section
- 0
- 2012-10-11
- Q Studio
-
- 2012-12-20
Я понимаю,что это старый поток,но я думаю,что его стоит обновить,используя НАМНОГО более простое решение. Обратите внимание,что это работает с 3.5 и не тестировалось ни с одной другой версией. Следующий код можно поместить в плагин или файлfunctions.php.
См. http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order . Слегка изменен,чтобы удовлетворить потребности исходного плаката (хотя,надеюсь,он уже нашел решение ...).
// Rearrange the admin menu function custom_menu_order($menu_ord) { if (!$menu_ord) return true; return array( 'index.php', // Dashboard 'edit.php?post_type=custom_type_one', // Custom type one 'edit.php?post_type=custom_type_two', // Custom type two 'edit.php?post_type=custom_type_three', // Custom type three 'edit.php?post_type=custom_type_four', // Custom type four 'edit.php?post_type=custom_type_five', // Custom type five 'separator1', // First separator 'edit.php?post_type=page', // Pages 'edit.php', // Posts 'upload.php', // Media 'link-manager.php', // Links 'edit-comments.php', // Comments 'separator2', // Second separator 'themes.php', // Appearance 'plugins.php', // Plugins 'users.php', // Users 'tools.php', // Tools 'options-general.php', // Settings 'separator-last', // Last separator ); } add_filter('custom_menu_order', 'custom_menu_order'); // Activate custom_menu_order add_filter('menu_order', 'custom_menu_order');
Любые элементы в меню администратора,не перечисленные здесь,не будут удалены. Они будут добавлены в конец меню.
I realize this is an old thread, but I think it's worth updating with a MUCH easier solution. Please note that this works with 3.5 and has not been tested with any other version. The following code can be placed in a plugin or the functions.php file.
See: http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order. Modified slightly to suit the original poster's needs (though, I hope he found a solution by now...).
// Rearrange the admin menu function custom_menu_order($menu_ord) { if (!$menu_ord) return true; return array( 'index.php', // Dashboard 'edit.php?post_type=custom_type_one', // Custom type one 'edit.php?post_type=custom_type_two', // Custom type two 'edit.php?post_type=custom_type_three', // Custom type three 'edit.php?post_type=custom_type_four', // Custom type four 'edit.php?post_type=custom_type_five', // Custom type five 'separator1', // First separator 'edit.php?post_type=page', // Pages 'edit.php', // Posts 'upload.php', // Media 'link-manager.php', // Links 'edit-comments.php', // Comments 'separator2', // Second separator 'themes.php', // Appearance 'plugins.php', // Plugins 'users.php', // Users 'tools.php', // Tools 'options-general.php', // Settings 'separator-last', // Last separator ); } add_filter('custom_menu_order', 'custom_menu_order'); // Activate custom_menu_order add_filter('menu_order', 'custom_menu_order');
Any items in the admin menu that are not listed here won't be removed. They will be appended to the bottom of the menu.
-
Да,это намного лучше,также для изменения порядка элементов подменю вы можете отключить их,а затем сбросить их.Yes this is much better, also to re-order submenu items you can unset and then reset them.
- 1
- 2012-12-20
- Wyck
-
- 2010-09-04
Я понимаю,что вы не хотите использовать плагин,но для простоты попробуйте плагин Admin Menu Editor от Яниса Элстса.Переставьте меню администратора так,как вам нравится;также может скрывать пункты меню.
I understand you don't want to use a plugin, but for pure simplicity, try the Admin Menu Editor plugin by Janis Elsts. Rearrange your admin menus any way you like; can also hide menu items.
-
Я пробовал этот плагин при многосайтовой установке. Он работает лучше всего,но нам нужно вручную настроить параметры для каждого подсайта,если у нас есть многосайтовая установка.I tried this plugin in multisite installation .It works best.But we need to manually configure the options for every sub-site if we have multisite Installation.
- 0
- 2010-10-13
- user391
-
- 2012-11-08
Для перемещения элементов меню мне нравится использовать глобальную переменную
$menu
.Например,если бы я хотел переместить меню «Страницы» в нижнюю часть меню,я бы использовал его в
functions.php
или в плагине:function admin_menu_items() { global $menu; $menu[102]=$menu[20];//make menu 102 be the same as menu 20 (pages) $menu[20]=array();//make original pages menu disappear } add_action('admin_menu', 'admin_menu_items');
и если бы я хотел поменять местами меню "Сообщения" и "Ссылки":
function admin_menu_items() { global $menu; $storemenu = $menu[15];//save links menu into $storemenu $menu[15] = $menu[5];//make links menu = posts menu $menu[5] = $storemenu; //make menu 5/posts = $storemenu/links } add_action('admin_menu', 'admin_menu_items');
Использовал этот трюк некоторое время,только что протестировал с WP 3.4.1
To move menu items around, I like using the Global
$menu
variable.For example, if I wanted to move the "Pages" menu to the bottom of the menus, I would use this in
functions.php
or a plugin:function admin_menu_items() { global $menu; $menu[102]=$menu[20];//make menu 102 be the same as menu 20 (pages) $menu[20]=array();//make original pages menu disappear } add_action('admin_menu', 'admin_menu_items');
and if I wanted to swap the Posts and Links menus:
function admin_menu_items() { global $menu; $storemenu = $menu[15];//save links menu into $storemenu $menu[15] = $menu[5];//make links menu = posts menu $menu[5] = $storemenu; //make menu 5/posts = $storemenu/links } add_action('admin_menu', 'admin_menu_items');
Been using this trick a little while, just tested with WP 3.4.1
-
Я знаю,что это более старый пост,но что касается вашего первого фрагмента,я столкнулся с проблемой с последней строкой в функции `admin_menu_items`,которая была исправлена заменой ее на` unset ($menu [20]);I know this is an older post but with regards to your first snippet I ran into an issue with the last line in the `admin_menu_items` function which was fixed by replacing it with `unset($menu[20]);`
- 0
- 2017-08-04
- hot_barbara
-
- 2012-03-05
Замечательно. Огромное спасибо. Я просто вставил несколько строк кода в свойfunctions.php
require_once('/extras/wp-admin-menu-classes.php'); add_action('admin_menu','my_admin_menu'); function my_admin_menu() { swap_admin_menu_sections('Pages','Posts'); // Swop location of Posts Section with Pages Section }
Плюс размещение wp-admin-menu-classes.php в папке моей темы и теперь кнопка сообщений заменяется кнопкой "страницы".
Я надеюсь,что это скоро станет частью ядра и таким образом,чтобы нам не нужно было писать все меню внутри функции,чтобы просто изменить порядок двух кнопок.
На самом деле было немного сложно получить более конкретный порядок для 4 кнопок. Чтобы изменить из 4 кнопок на: Страницы,Сообщение,Медиа,Ссылки Мне нужно было использовать следующий код:
swap_admin_menu_sections('Pages','Posts'); swap_admin_menu_sections('Media','Links'); swap_admin_menu_sections('Posts','Links');
Awesome. Thank you so much. I just put some lines of code into my functions.php
require_once('/extras/wp-admin-menu-classes.php'); add_action('admin_menu','my_admin_menu'); function my_admin_menu() { swap_admin_menu_sections('Pages','Posts'); // Swop location of Posts Section with Pages Section }
Plus placing the wp-admin-menu-classes.php in my theme folder and now the 'posts' button is swopped with the 'pages' button.
I hope this will become part of the core soon and in a way so that we don't need to write the whole menu within a function to just reorder two buttons.
In fact it was a bit tricky to get a more specified order for 4 buttons. In order to change the of 4 buttons to: Pages, Post, Media, Links I needed to use the folowing code:
swap_admin_menu_sections('Pages','Posts'); swap_admin_menu_sections('Media','Links'); swap_admin_menu_sections('Posts','Links');
Я здесь немного расстроен после того,как потратил несколько часов,пытаясь безуспешно выполнить эту довольно простую задачу.
По сути,у меня есть 5 настраиваемых типов сообщений,которые я создал,и все,что я хочу сделать,это показать каждый из них в определенном порядке прямо под "панелью управления" .
Из документации WordPress кажется,что вы действительно не можете этого сделать,потому что самый высокий порядок меню равен «5». И выше L
Я полагаю,что какой-то эксперт,читающий это,может показать мне простой способ упорядочить меню администратора именно так,как я хочу,с помощью файла функций и без использования плагина (который,как я знаю,существует).
Пожалуйста,попробуйте создать 5 отдельных типов сообщений и включить их в определенном порядке прямо под панелью управления ... кажется,это невозможно.?? ... есть ли какой-нибудь способ взломаjquery,чтобы сделать это работа,которой кто-то мог бы поделиться со мной или,желательно,без использованияjQuery?