web-dev-qa-db-fra.com

Ajouter un séparateur au menu Admin?

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

Des idées?

21
user1147

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

Contexte

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 de cette opération, 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 pour ajouter un séparateur, puis appeler la fonction add_admin_menu_separator() en passant 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. (Il est prévu que, finalement, il sera obsolète, heureusement, 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 );
}

Trouver l'index dans $menu dont vous avez besoin

Pour déterminer le numéro d’index dont vous avez besoin, vous pouvez créer une var_dump() de $GLOBALS['menu'] à partir d’un point d'ancrage 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 à votre thème. functions.php fichier!)}:

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 également:

En passant, ces liens pourraient vous être utiles en général pour utiliser les menus d’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 cela lorsque j'en aurai le temps.

32
MikeSchinkel

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

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

3
vmassuchetto

Si certains problèmes avec les séparateurs n’ont pas été ajoutés, cela est dû à 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.

2
Kieran Baker

Ceci s'appuie sur la réponse de MastaBaba, mais ne remplace rien à la position que vous spécifiez - il ajoute simplement le séparateur par la suite.

Utilise également une fonction anonyme, donc uniquement compatible avec PHP version 5.3 et ultérieure.

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

Le texte ci-dessous ajoute une action à Wordpress qui est exécutée lorsque le menu d'administration est affiché. 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 fonctionne pas pour moi (et, à en juger par les commentaires, pour plusieurs autres).

0
MastaBaba

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

Voir cette documentation dans le Codex WordPress.

En bref, 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. :-)

0
dgw