web-dev-qa-db-fra.com

Ajouter un séparateur au sous-menu admin

Je voudrais ajouter un séparateur au sous-menu admin section, PAS dans la section de niveau supérieur .

enter image description here

Je pense utiliser du javascript et du style pour faire le travail, mais je me demandais s'il existait une méthode plus simple, comme celle qui consiste à ajouter un séparateur à la section de menu de niveau supérieur .

Je suis encore en train d'expérimenter à ce sujet. Je fournirai ma méthode une fois que je la ferai fonctionner.

[MIS À JOUR]

5
Giraldi

Menu Admin & sous-menu séparateurs

Après l'avoir parcourue et étendu l'extension de l'API principale pour autoriser les séparateurs de menu principal dans des positions personnalisées, j'ai parcouru rapidement les fichiers de menu principaux, vidée de tout ce qui s'y trouvait et trouvé une solution permettant d'utiliser l'API principale également pour séparateurs de sous-menu personnalisés.

Le résultat

Voici à quoi ressemblera notre menu, après l’ajout des séparateurs.

Admin menu and sub menu separators

Pour ce faire, ajoutez simplement un petit plugin ou insérez cet extrait dans votre fichier de plugins ou dans le fichier functions.php. Voici un exemple de plugin. Comme vous pouvez le constater, vous devrez ajouter la page parente où vous souhaitez que votre séparateur apparaisse. Ensuite, vous devez ajouter l'identifiant wp-menu-separator. Vous pouvez ajuster la visibilité pour l'utilisateur en modifiant la capacité read - en fonction de ce que les autres éléments de ce menu ont. Le 11 est juste la priorité. Ajustez-le où vous voulez que le séparateur apparaisse à l'intérieur du menu.

<?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', '' );
}

Le plugin lui-même

Encore une fois, ce plugin peut être utilisé en tant que plugin, faisant partie d'un autre plugin ou (mieux) en tant que muplugin.

Pour suivre les mises à jour

Merci de vous inscrire/star ce GitHub Gist . Je vais poster des mises à jour seulement il.

<?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
kaiser

Ajouter un séparateur de menu administrateur

Les séparateurs, si cette question cible ceci, sont les séparateurs du menu admin qui séparent le menu en sections. Par défaut, il est divisé en une zone "Publier" et une zone "Administration".

Plugin pour le sauvetage

Voici ce que nous aurons après: un séparateur personnalisé.

enter image description here

J'ai écrit un plugin assez simple que je lance en tant que plug-in mu. Comme vous pouvez le constater dans cet exemple, l’utilisation est très simple et s’aligne parfaitement avec l’API interne.

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

Il suffit de charger ce plugin dans votre dossier mu-plugins ou plugins et vous êtes prêt. Le plugin détectera automatiquement que vous souhaitez ajouter un séparateur et transformera l'élément de menu ajouté en un.

<?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
kaiser

NOTE: il y a peut-être une façon plus appropriée de faire cela, cependant je vais juste vous montrer comment un autre plugin aborde ce problème.

Le plugin en question est s2Member

enter image description here

Pour y parvenir, ajoutez un élément de page de sous-menu à l'élément de menu parent lui-même.

    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
     );

Vous pouvez trouver une référence à cela dans le plugin s2Member lui-même si vous souhaitez l'inspecter à l'adresse: plugins\s2member\includes\classes\menu-pages.inc.php à partir de line 138

Pour référence sur add_menu_page function, voir:

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

1
userabuser

Solution de sélecteur CSS:

ajoutez un nouveau fichier admin-styles.css à votre thème avec:

.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
}

et charger les styles

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
Dankicity