Изменение порядка разделов меню администратора?

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

По существу у меня есть 5 пользовательских типов сообщения, которые я создал и все, что я хочу сделать, показать каждому из них в определенном порядке непосредственно в соответствии с "панелью инструментов".

Из документации WordPress кажется, что Вы не можете действительно сделать этого, потому что самый высокий порядок меню, кажется, "5". И выше L

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

Идите вперед и попытайтесь создать 5 отдельных типов сообщения, и включать их в определенный порядок непосредственно в соответствии с панелью инструментов... кажется, что это не возможно.??... там некоторый тип взлома jQuery для создания этой работы, которую кто-то мог совместно использовать со мной или предпочтительно не используя jQuery?

31
13.10.2010, 06:37
6 ответов

Привет @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 поэтому, если мы удачливы, что они могли бы даже стать стандартными!

33
19.02.2020, 21:55
  • 1
    , это делало ядро или является этим или чем-то подобным все еще, потребовал для управления порядком пунктов меню в администраторе? –  Q Studio 12.09.2012, 17:16
  • 2
    Насколько я нашел, это было отложено до WP 3.5 –  pixeline 23.09.2012, 01:23
  • 3
    Эй Mike - wp_debug бросает ошибку на эту функцию:--------функционируют swap_admin_menu_sections ($from_section, $to_section) {$from_section = get_admin_menu_section ($from_section); если ($from_section) $from_section-> swap_with ($to_section); возвратите $section;}---Уведомление: Неопределенная переменная: –  Q Studio 11.10.2012, 12:57

Вот быстрая пошаговая демонстрация того, как меню администратора WordPress создается - я не говорю add_menu_page API, я имею в виду фактическое меню WordPress по умолчанию.

Вызов файла меню

Меню, очевидно, загружается wp-admin/admin.php. Но это не загружается через стандартный API, который мы привыкли использовать на основе документации WordPress. Скорее все меню (все возможные варианты, подменю, и т.д.) загружается через простой массив, в котором это определяется wp-admin/menu.php.

Таким образом загрузить систему меню, admin.php просто requires menu.php ... вокруг строки 99 в WordPress 3.0.

Загрузка меню

Само меню хранится в глобальном массиве $menu. Согласно встроенной документации, массив меню имеет эти элементы:

The elements in the array are:
    *     0: Menu item name
    *     1: Minimum level or capability required.
    *     2: The URL of the item's file
    *     3: Class
    *     4: ID
    *     5: Icon for top level menu

Панель инструментов, например:

$menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' );

Файл проходит и загружает каждый пункт меню в массив и загружает все их элементы подменю в названный массив $submenu это индексирует на основе URL родительского меню. Таким образом, элемент подменю Панели инструментов под названием "Панель инструментов":

 $submenu[ 'index.php' ][0] = array( __('Dashboard'), 'read', 'index.php' );

После того, как система сделана, загрузив все меню (нет то, что многие, но система ступают через индекс во время 5 или 10... уведомление, что Панель инструментов, даже при том, что это - первый пункт меню, все еще индексируется как объект "2" (массивы PHP запускаются в индексе 0..., таким образом, это дает Вам некоторую маневрирующую комнату).

На данном этапе системные вызовы wp-admin/includes/menu.php.

Продвижение через меню

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

Наконец, это сортирует меню на основе их присвоенного порядка меню.

Упорядочивание пользовательских меню

Рычаг admin_menu назван после того, как меню настраиваются, но прежде чем что-либо будет заказано. Таким образом, возможно заказать всю систему меню WordPress, не "взламывая" API.

После действия admin_menu запущен, Ваши пользовательские страницы загружаются в систему. Следующей вещью, которая происходит, являются проверки WordPress названный фильтр custom_menu_order ... этот фильтр всегда возвращается false и говорит WordPress, хотите ли Вы использовать пользовательский порядок.

Добавьте следующее к своей теме для установки флага на true вместо этого и определите свой явный порядок меню:

function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array('index.php', 'edit.php', 'edit-comments.php');
}

add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');

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


РЕДАКТИРОВАНИЕ (9/2/2010):

Для определения порядка пользовательского экрана редактирования типа сообщения с помощью этого метода необходимо знать URL экрана редактирования. Я большинство случаев, это будет http://blog.url/wp-admin/edit.php?post_type=POST_TYPE. Это зависит от того, как WordPress настраивается на Вашем сайте (если он установлен в корне или в подпапке), и краткий заголовок пользовательского типа сообщения, Вы используете.

Например...

Скажем, у Вас есть пользовательский тип сообщения для 'Вопросов о Exchange Стека', и Вы хотите, чтобы редактор появился в том же разделе как панель инструментов непосредственно ниже значка панели инструментов. Вы использовали бы следующий код в своей теме functions.php файл:

function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array('index.php', 'edit.php?post_type=stack_exchange_questions');
}

add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');

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

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

21
19.02.2020, 21:55
  • 1
    Там является небольшой ошибкой в Вашем примере кода в соответствии с "Заголовком" пользовательских меню упорядочивания, если условный оператор отсутствует $ на имени переменной... (Большой ответ, хотя).. –  t31os 17.11.2010, 17:24
  • 2
    Как Вы добавили бы пользовательский тип сообщения для "Вопросов о Exchange Стека" разделу ниже раздела Dashboard? –  epaps 31.05.2011, 07:32
  • 3
    Привет EAMann - быстрый вопрос. Так как новейшей версии Wordpress изменили этот процесс вообще, или станьте более простыми? –  NetConstructor.com 14.09.2011, 22:26
  • 4
    Как насчет для подменю? Существует ли похожий метод перестроить элементы подменю? –  Giraldi 16.11.2012, 11:47
  • 5
    @GiraldiMaggio, задайте новый вопрос и ссылку этот. –  EAMann 16.11.2012, 19:09

Я понимаю, что Вы не хотите использовать плагин, но для чистой простоты, судить Редактора Меню администратора плагин Janis Elsts. Перестройте свои меню администратора любым путем, Вам нравится; может также скрыть пункты меню.

2
19.02.2020, 21:55
  • 1
    я попробовал этот плагин в многоузловой установке.It работы лучше всего. Но мы должны вручную настроить опции для каждого подсайта, если у нас есть многоузловая Установка. –  user391 13.10.2010, 18:07

Потрясающе. Огромное спасибо. Я просто поместил некоторые строки кода в свой 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');
0
19.02.2020, 21:55

Для перемещения пунктов меню мне нравится использовать Глобальное $menu переменная.

Например, если бы я хотел переместить меню "Pages" в нижнюю часть меню, то я использовал бы это в 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');

и если я хотел подкачать меню Posts и Links:

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

2
19.02.2020, 21:55
  • 1
    , я знаю, что это - более старое сообщение, но относительно Вашего первого отрывка я столкнулся с проблемой с последней строкой в admin_menu_items функция, которая была зафиксирована путем замены его с unset($menu[20]); –  hot_barbara 05.08.2017, 00:16

Я понимаю, что это - старый поток, но я думаю, что это стоит обновить с НАМНОГО более легким решением. Обратите внимание на то, что это работает с 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');

Любые объекты в меню администратора, которые не перечислены здесь, не будут удалены. Они будут добавлены к нижней части меню.

19
19.02.2020, 21:55
  • 1
    Да это должно намного лучше, также переупорядочить элементы подменю, можно сбросить и затем сбросить их. –  Wyck 20.12.2012, 22:11

Теги

Похожие вопросы