binarybit
  • 0
Новичок

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

  • 0

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

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

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

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

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

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

    • 0
  2. Вот краткое описание того, как создается меню администратора WordPress — я не говорю об add_menu_page API, я имею в виду фактическое меню WordPress по умолчанию.

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

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

    Таким образом, чтобы загрузить систему меню, admin.php просто require s 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-адреса родительского меню. Таким образом, пункт подменю Dashboard под названием «Dashboard»:

     $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 настроен на вашем сайте (если он установлен в корне или во вложенной папке) и слаг пользовательского типа записи, который вы используете.

    Например…

    Допустим, у вас есть настраиваемый тип сообщения для «Вопросы Stack 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');
    

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

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

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

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

    • 0
  4. Я понимаю, что вы не хотите использовать плагин, но для простоты попробуйте плагин Admin Menu Editor от Janis Elsts. Переупорядочивайте меню администратора по своему усмотрению; также может скрывать пункты меню.

    • 0
  5. Для перемещения пунктов меню мне нравится использовать глобальную $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.

    • 0
  6. Потрясающий. Большое спасибо. Я просто добавил несколько строк кода в свой 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 кнопки на: Pages, Post, Media, Links, мне нужно было использовать следующий код:

      swap_admin_menu_sections('Pages','Posts');                
      swap_admin_menu_sections('Media','Links');                 
      swap_admin_menu_sections('Posts','Links');
    
    • 0

Оставить ответ

You must login to add an answer.