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

Я хотел бы добавить разделитель к администраторскому разделу подменю, НЕ в высокоуровневом разделе.

enter image description here

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

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

[ОБНОВЛЕННЫЙ]

6
13.04.2017, 15:37
5 ответов

Меню администратора и разделители подменю

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

Результат

Это - то, как наше меню будет похоже, после того, как мы добавили разделители.

Admin menu and sub menu separators

Чтобы заставить это произойти, просто добавьте маленький плагин или бросьте этот отрывок в свой файл плагинов или functions.php. Вот плагин в качестве примера. Как Вы видите, необходимо будет добавить родительскую страницу, где Вы хотите, чтобы Ваш разделитель появился. Затем необходимо добавить идентификатор wp-menu-separator. Можно скорректировать видимость для пользователя путем изменения read- возможность к тому, что имеют другие объекты в этом меню. 11 просто приоритет. Скорректируйте его к тому, везде, где Вы хотите, чтобы разделитель появился в меню.

<?php
defined( 'ABSPATH' ) OR exit;
/** Plugin Name: Example Admin Menu Separator */

add_action( 'admin_menu', 'add_admin_menu_separator' );
function add_admin_menu_separator()
{
    add_menu_page( '', '', 'read', 'wp-menu-separator', '', '', '21' );
    add_submenu_page( 'edit.php?post_type=page', 'wp-menu-separator', '', 'read', '11', '' );
}

Сам Плагин

Снова этот плагин может использоваться в качестве плагина, части другого плагина или (лучше всего) как muplugin.

Следовать за любыми обновлениями

Подпишитесь/соедините эту Суть GitHub звездой. Я отправлю обновления только там.

<?php
defined( 'ABSPATH' ) OR exit;
/**
 * Plugin Name: Admin Menu Separator
 * Description: Adds a separator on whatver priority is needed.
 */

add_filter( 'parent_file', 'admin_menu_separator' );
function admin_menu_separator( $parent_file )
{
    $menu = &$GLOBALS['menu'];
    $submenu = &$GLOBALS['submenu'];
    foreach( $submenu as $key => $item )
    {
        foreach ( $item as $index => $data )
        {
            // Check if we got the identifier
            if ( in_array( 'wp-menu-separator', $data, true ) )
            {
                // Set the MarkUp, so it gets used instead of the menu title
                $data[0] = '<div class="separator"></div>';
                // Grab our index and temporarily save it, so we can safely overrid it
                $new_index = $data[2];
                // Set the parent file as new index, so core attaches the "current" class
                $data[2] = $GLOBALS['parent_file'];
                // Reattach to the global with the new index
                $submenu[ $key ][ $new_index ] = $data;
                // Prevent duplicate
                unset( $submenu[ $key ][ $index ] );
                // Get back into the right order
                ksort( $submenu[ $key ] );
            }
        }
    }
    foreach( $menu as $key => $item )
    {
        if (
            in_array( 'wp-menu-separator', $item )
            AND 5 < count( $item )
            )
        {
            $menu[ $key ][2] = 'separator0';
            $menu[ $key ][4] = 'wp-menu-separator';
            unset(
                 $menu[ $key ][5]
                ,$menu[ $key ][6]
            );
        }
    }
    return $parent_file;
}
3
19.02.2020, 22:04

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

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

Плагин для спасения

Вот то, что мы собираемся иметь впоследствии: пользовательский разделитель.

enter image description here

Я записал довольно простой плагин, который я выполняю как mu-плагин. Использование, как Вы видите от примера, очень легкого, и полностью выравниваетесь с внутренним API.

// @example
add_action( 'admin_menu', 'add_admin_menu_separator' );
function add_admin_menu_separator()
{
    add_menu_page( '', '', 'read', 'wp-menu-separator', '', '', '10' );
}

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

<?php
defined( 'ABSPATH' ) OR exit;
/**
 * Plugin Name: Admin Menu Separator
 * Description: Adds a separator on whatver priority is needed.
 */

add_filter( 'parent_file', 'admin_menu_separator' );
function admin_menu_separator( $parent_file )
{
    $menu = &$GLOBALS['menu'];
    foreach( $menu as $key => $item )
    {
        if (
            in_array( 'wp-menu-separator', $item )
            AND 5 < count( $item )
        )
        {
            $menu[ $key ][2] = 'separator0';
            $menu[ $key ][4] = 'wp-menu-separator';
            unset(
                 $menu[ $key ][5]
                ,$menu[ $key ][6]
            );
        }
    }
    return $parent_file;
}
5
19.02.2020, 22:04
  • 1
    Очень хорошая, прекрасная идея для сменного –  NTL0820 01.02.2013, 19:19
  • 2
    Спасибо за ответ, но на самом деле я ищу разделитель на администраторском разделе подменю –  Giraldi 02.02.2013, 02:07
  • 3
    @GiraldiMaggio добавьте снимок экрана к своему вопросу, еще невозможно визуализировать то, что Вы хотите иметь. И со снимком экрана я не имею в виду, некоторые фиолетовые строки, дистиллируемые меню администратора по умолчанию, я на самом деле имею в виду, как Вы наконец хотите иметь его в UI. –  kaiser 02.02.2013, 05:20

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

Рассматриваемый плагин является s2Member

enter image description here

Как они достигают, это путем добавления объекта страницы подменю к самому объекту родительского меню;

    add_submenu_page(
        $parent_slug,                //parent menu slug to attach to
        "",                          //page title (left blank)
                                     //menu title (inserted span with inline CSS)
       '<span style="display:block;  
        margin:1px 0 1px -5px; 
        padding:0; 
        height:1px; 
        line-height:1px; 
        background:#CCCCCC;"></span>',
        "create_users",              //capability (set to your requirement)
        "#"                          //slug (URL) shows Hash domain.com/# incase of mouse over
     );

Можно найти ссылку на это в самом s2Member плагине, если Вы хотите осмотреть его в: plugins\s2member\includes\classes\menu-pages.inc.php запуск line 138

Поскольку ссылка на функции add_menu_page видит:

http://codex.wordpress.org/Function_Reference/add_submenu_page

2
19.02.2020, 22:04
  • 1
    Да! Это похоже на более простой способ сделать его. Теперь мы просто должны изменить местоположение его, я предполагаю. –  Giraldi 02.02.2013, 08:57
  • 2
    Вы могли адаптировать то, что Вы уже сделали в своей функции, чтобы изменить местоположение объекта в подменю, альтернативно я рекомендующий читающий этот ответ, который говорит о точной теме (располагающий объекты подменю). Также, если Вы смотрите на файл, я упоминаю как часть s2member плагина, Вы будете видеть, что положение их "делителей" основано на порядке, в котором они объявляют объекты подменю. –  Adam 02.02.2013, 09:13

Решение для селектора CSS:

добавьте новый администраторский-styles.css файл к своей теме с:

.wp-submenu a[href="post-new.php?post_type=city"],
.wp-submenu a[href="post-new.php?post_type=region"] {
  border-bottom:1px solid #ccc
}
.wp-submenu li:last-child a {
  border-bottom:none
}

и загрузите стили

wp_register_style( 'my_admin_styles', trailingslashit( get_template_directory_uri() ) . 'admin-styles.css');
add_action( 'admin_print_styles', 'admin_styles' );

function admin_styles() { wp_enqueue_style( 'my_admin_styles' ); }
0
19.02.2020, 22:04

[ОБНОВЛЕННЫЙ]

Это - то, что я имел, придумал. Ниже образец того, как я сделал бы это на разделе меню сообщения:

(Благодаря @userabuser для совета)

function add_submenu_separator( $menu_ord ) {
  global $submenu;

  // Create 'separator' array for submenu
  $submenuSep = Array ('<div class="separator"></div>', 'read', '#');

    // Note: Use 'div' with class 'separator' to use
    //       WP's built-in separator styling

  $offset = 2; // Position of separator

  // Insert separator into POST menu array
  $post = $submenu['edit.php'];               
  $post = array_slice($post, 0, $offset, true) +
          array($submenuSep) +
          array_slice($post, $offset, NULL, true);
  $submenu['edit.php'] = $post;

  return $menu_ord;
}
add_filter( 'custom_menu_order', 'add_submenu_separator' );

Эта часть не необходима, но если Вы хотите избавиться от a наклейте разделитель, Вам, вероятно, придется использовать JavaScript. Так, добавьте следующее:

// Add the script
function submenu_scripts() {
  wp_enqueue_script('submenu_script', get_template_directory_uri().'/js/submenu_scripts.js', false, null);
}
add_action('admin_enqueue_scripts', 'submenu_scripts', 100);

Вот то, как JavaScript похож, который я назвал submenu_scripts.js и поместил его в папку, названную js:

(function($){
    $(document).ready( function() {

        // Remove 'a' tag on submenu separators
        $('a div[class="separator"]').unwrap();

    });
})(jQuery);

Вот то, как это должно посмотреть:

enter image description here

-1
19.02.2020, 22:04
  • 1
    Походит на длинный путь для достижения того, что Вы хотите. Почему не просто включают div в массиве, но вместо a div используйте a span и дайте его class="separator"? –  Adam 02.02.2013, 08:55
  • 2
    я предполагаю это, но поэтому я хотел избавиться от a тег от разделителя. Включая div в массиве хорошая идея. Причина я использовал div должен использовать встроенное моделирование WP для разделителя. –  Giraldi 02.02.2013, 10:05
  • 3
    Походит на большое количество кода + (возможно, недоступный) JavaScript для простого разделителя. См. мои ответы. –  kaiser 08.02.2013, 11:50
  • 4
    @kaiser: Спасибо за код. Я попробовал его. Это не немного короче, чем мой. На самом деле это намного больше. Как в отношении моего JavaScript, во-первых, это является дополнительным, как я заявил, для удаления a отметьте, таким образом, разделитель не становится гиперссылкой (персональное предпочтение). Во-вторых, как я настолько 'недоступен', может спросить? –  Giraldi 10.02.2013, 05:32
  • 5
    @GiraldiMaggio Моя ошибка, поскольку я неправильно читал Вашу часть JS. О полной длине: Я просто считал те строки, которые на самом деле добавляют и изменяют разделитель, и это - 19/23, настолько Ваш короче 4 строками, но очень конкретен, в то время как мое решение является допускающим повторное использование и может использоваться многократно и использует базовый API по умолчанию. И добавление другого разделителя проводит одну дополнительную строку только. При рассмотрении связанной Сути которую я несколько раз обновлял, Вы будете также видеть, что я не выполняю ее на каждом pageload (когда это не необходимо), так производительный мудрый... –  kaiser 10.02.2013, 11:12

Теги

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