Ajouter un séparateur au menu Admin?

19

Quelqu'un sait-il comment ajouter un séparateur de menu administrateur? J'ai trouvé ceci mais cela n'a pas aidé.

Des idées?

    
posée user1147 06.10.2010 - 22:02

6 réponses

31

Voici un moyen rapide et sale d'obtenir ce que vous voulez.

Arrière-plan

WordPress stocke les sections du menu administrateur dans un tableau global appelé $menu . Pour ajouter un séparateur, vous ajoutez un élément au tableau $menu à l'aide d'un index situé entre les index des options à séparer.

Utilisation de la fonction add_admin_menu_separator()

J'ai donc écrit une fonction pour encapsuler la logique que j'ai appelée add_admin_menu_separator() . Vous devez choisir un numéro d'indice de tableau supérieur à l'option après laquelle vous souhaitez ajouter un séparateur, puis appeler la fonction add_admin_menu_separator() en transmettant ledit index en tant que paramètre.

Par exemple:

add_admin_menu_separator(37);

La fonction add_admin_menu_separator() elle-même

Voici la définition de la fonction add_admin_menu_separator() que vous pouvez copier dans le fichier functions.php de votre thème. Oui, il est mystérieux, mais le code le crée et utilise le tableau global $menu . (heureusement, il est prévu de le rendre finalement obsolète, mais cela prendra probablement quelques années.)

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

Recherche de l'index dans $menu dont vous avez besoin

Pour déterminer le numéro d'index dont vous avez besoin, vous pouvez créer un var_dump() of $GLOBALS['menu'] à partir d'un crochet admin_init . Voici un peu de code que vous pouvez insérer temporairement dans le fichier functions.php de votre thème pour voir quelles sont les valeurs. Cela ne fonctionnera que si vous demandez une URL commençant par /wp-admin/ (mais assurez-vous de le faire avec FTP et non avec l'éditeur de thème intégré ou vous perdrez l'accès à votre site, du moins jusqu'à ce que vous obteniez un accès FTP à le fichier functions.php de votre thème!) :

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

Voir aussi:

BTW, ces liens pourraient vous être utiles en général pour utiliser les menus de l'administrateur:

Bien que mes classes de menu administrateur n'offrent pas actuellement un moyen facile d'ajouter des séparateurs, je pense que je vais maintenant ajouter que lorsque j'en aurai le temps.

    
réponse donnée MikeSchinkel 07.10.2010 - 04:00
3

C’est simple comme:

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

}

Remarque: la position de séparateur par défaut ( $menu[4] ) peut être différente selon la configuration que vous (ou vos plugins) avez effectuée avant ce hook.

Bien sûr, vous pouvez également modifier l'introspection des classes menu-top-first et menu-top-last .

    
réponse donnée vmassuchetto 19.09.2012 - 15:06
2

Si certains problèmes avec les séparateurs n’ont pas été ajoutés, c’est en raison de la façon dont wordpress supprime les séparateurs en double. L'ajout de ksort($menu); au bas de la fonction a corrigé le problème.

    
réponse donnée Kieran Baker 18.11.2010 - 04:15
1

Ceci s’appuie sur la réponse de MastaBaba, mais ne remplace rien à la position spécifiée. Il ajoute simplement le séparateur par la suite.

Utilise également une fonction anonyme, donc uniquement compatible avec les versions 5.3 et supérieures de PHP.

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;
    }
});
    
réponse donnée robrecord 08.05.2018 - 14:44
0

Il est un peu difficile de déterminer ce que vous essayez de faire, mais je pense que vous souhaitez ajouter une entrée de niveau supérieur dans le menu d'administration de WordPress.

Voir cette documentation dans le codex WordPress.

En résumé, vous recherchez une utilisation de la fonction add_menu_page() , qui prend un certain nombre d'arguments et affiche un élément supplémentaire dans le menu administratif en tant que frère de "Tableau de bord", "Messages", "Médias", etc.

J'espère que j'ai bien compris. : -)

    
réponse donnée dgw 06.10.2010 - 22:32
0

Ce qui suit annonce une action sur Wordpress qui est exécutée lorsque le menu admin est rendu. Le menu admin est un tableau et tout ce que vous faites, ici, consiste à ajouter un élément de tableau définissant un séparateur, à la position que vous spécifiez.

De ici :

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

Notez que, bien que cela ressemble plutôt à la réponse actuellement acceptée, la réponse actuellement acceptée ne fonctionnait pas pour moi (et, à en juger par les commentaires, pour plusieurs autres).

    
réponse donnée MastaBaba 19.06.2016 - 15:57

Lire d'autres questions sur les étiquettes