user1147
  • 0
Новичок

Добавить разделитель в меню администратора?

  • 0

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

Есть идеи?

Share
  1. Если кто-то все еще ищет ответ на этот вопрос, этот плагин может справиться с этой задачей.

    • 0
  2. Вот быстрый и грязный способ получить то, что вы хотите.

    Задний план

    WordPress хранит разделы меню администратора в глобальном массиве с именем $menu . Чтобы добавить разделитель, вы добавляете элемент в $menu массив, используя индекс, который находится между индексами параметров, которые вы хотите разделить.

    Использование add_admin_menu_separator() функции

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

    Например:

    add_admin_menu_separator(37);
    

    Сама add_admin_menu_separator() функция

    Вот определение функции add_admin_menu_separator(), которую вы можете скопировать в functions.php файл вашей темы. Да, это загадочно, но также и код, который создает и использует глобальный $menu массив. (К счастью, в конечном итоге он будет объявлен устаревшим, но, вероятно, это произойдет через несколько лет.)

    function add_admin_menu_separator($position) {
      global $menu;
      $index = 0;
      foreach($menu as $offset => $section) {
        if (substr($section[2],0,9)=='separator')
          $index++;
        if ($offset>=$position) {
          $menu[$position] = array('','read',"separator{$index}",'','wp-menu-separator');
          break;
        }
      }
      ksort( $menu );
    }
    

    Поиск индекса в $menu том, что вам нужно

    Чтобы выяснить, какой номер индекса вам нужен, вы можете сделать var_dump() из $GLOBALS['menu'] хука admin_init . Вот небольшой код, который вы можете functions.php временно добавить в файл вашей темы, чтобы посмотреть, какие значения. Это будет работать только при запросе URL-адреса, начинающегося с /wp-admin/ (но обязательно используйте FTP, а не встроенный редактор тем, иначе вы потеряете доступ к своему сайту, по крайней мере, до тех пор, пока не получите FTP-доступ к functions.php файлу вашей темы!) :

    add_action('admin_init','dump_admin_menu');
    function dump_admin_menu() {
      if (is_admin()) {
        header('Content-Type:text/plain');
        var_dump($GLOBALS['menu']);
        exit;
      }
    }
    

    Смотрите также:

    Кстати, вы можете найти эти ссылки полезными в целом для работы с меню администратора:

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

    • 0
  3. Это просто как:

    add_action( 'admin_init', 'add_sep' );
    function add_sep() {
    
        if ( ! is_admin() )
            return false;
    
        global $menu;
        $sep = $menu[4]; // that's the default separator
        $pos = 6; // change it for the desired position
        $menu = array_merge(
            array_slice( $menu, 0, $pos ),
            array( $sep ),
            array_slice( $menu, $pos + 1, -1)
        );
        $menu[ $pos - 1 ][4] .= ' menu-top-last';
        $menu[ $pos + 1 ][4] .= ' menu-top-first';
    
    }
    

    Примечание. Положение разделителя по умолчанию ( $menu[4] ) может отличаться в зависимости от того, какую конфигурацию вы (или ваши плагины) выполнили до этого хука.

    Конечно, вы также можете настроить menu-top-first и menu-top-last самоанализ классов.

    • 0
  4. Были некоторые проблемы с тем, что разделители не добавлялись, это было связано с тем, как WordPress удаляет повторяющиеся разделители. Добавление ksort($menu); в нижнюю часть функции исправило проблему.

    • 0
  5. Это основано на ответе MastaBaba, но ничего не заменяет в указанной вами позиции — после этого просто добавляется разделитель.

    Также использует анонимную функцию, поэтому она совместима только с PHP версии 5.3 и выше.

    add_action( 'admin_menu', function () {
        $position = 29;
        global $menu;
        $separator = [
            0 => '',
            1 => 'read',
            2 => 'separator' . $position,
            3 => '',
            4 => 'wp-menu-separator'
        ];
        if (isset($menu[$position])) {
            $menu = array_splice($menu, $position, 0, $separator);
        } else {
            $menu[$position] = $separator;
        }
    });
    
    • 0
  6. Вы можете просто добавить это в functions.php

    add_action('admin_menu', function () {   
      global $menu;
      $menu[49] = ['', 'read', '', '', 'wp-menu-separator'];
    });
    

    Где 49 — позиция разделителя. Вы должны помнить, что позиция разделителя может заменить ваш элемент меню, если он имеет ту же позицию.

    • 0
  7. Немного сложно определить, что вы пытаетесь сделать, но я думаю, вы хотите добавить запись верхнего уровня в меню администратора WordPress.

    См. эту документацию в Кодексе WordPress.

    Короче говоря, вы ищете использование add_menu_page() функции, которая принимает ряд аргументов и отображает дополнительный элемент в административном меню в качестве родственного элемента «Панель управления», «Сообщения», «Медиа» и т. д.

    Надеюсь, я понял это правильно. 🙂

    • 0
  8. Ниже показано действие для WordPress, которое запускается при отображении меню администратора. Меню администратора представляет собой массив, и все, что вы здесь делаете, это добавляете элемент массива, определяющий разделитель, в указанную вами позицию.

    Отсюда : _

    add_action( 'admin_menu', 'set_admin_menu_separator' );
    function set_admin_menu_separator() {
    $position = 79;
    global $menu;
    $menu[$position] = array(
    0   =>  '',
    1   =>  'read',
    2   =>  'separator' . $position,
    3   =>  '',
    4   =>  'wp-menu-separator'
    );
    }
    

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

    • 0

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

You must login to add an answer.