Ajouter un séparateur au menu Admin?


22

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

Des idées?


Si quelqu'un cherche toujours la réponse à cette question, ce plugin peut gérer le travail.
user31760

Réponses:


33

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

Contexte

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

Utilisation de la add_admin_menu_separator()fonction

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

Par exemple:

add_admin_menu_separator(37);

La add_admin_menu_separator()fonction elle-même

Voici la définition de la fonction add_admin_menu_separator()que vous pouvez copier dans le functions.phpfichier de votre thème . Oui, c'est obscur, mais le code qui crée et utilise le $menutableau global l'est également . (Il est prévu de le déprécier éventuellement, heureusement, mais ce sera probablement dans 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'indice $menudont vous avez besoin

Pour savoir quel numéro d'index dont vous avez besoin , vous pouvez faire var_dump()de l' $GLOBALS['menu']intérieur d' un admin_initcrochet. Voici un peu de code que vous pouvez déposer functions.phptemporairement dans le fichier de votre thème pour voir quelles sont les valeurs. Cela ne fonctionnera que lorsque vous demanderez 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, au moins jusqu'à ce que vous obteniez un accès FTP au functions.phpfichier 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 également:

BTW, vous trouverez peut-être ces liens utiles en général pour travailler avec les menus d'administration:

Bien que mes classes de menu d'administration n'offrent pas actuellement un moyen facile d'ajouter des séparateurs, je pense que j'ajouterai maintenant cela quand j'aurai le temps.


Merci Mike, j'ai vérifié toute la nuit en étudiant le menu global var, mais je n'ai pas réussi à ajouter un séparateur, il est maintenant beaucoup plus clair pour moi comment les menus fonctionnent dans wp.
user1147

Salut @ user1147 : Oui, ils sont très difficiles à comprendre. Au début, cela m'a pris beaucoup de temps et j'ai toujours du mal avec eux. D'où la raison pour laquelle j'ai écrit ces fonctions, donc je peux le faire facilement à partir de maintenant! Quoi qu'il en soit, je suis content que ma réponse ait aidé.
MikeSchinkel

1
@MikeSchinkel Cette méthode ne fonctionne pas pour moi avec Wordpress 3.3.1.
Jim Geurts

1
@JimGeurts - ça ne marche pas non plus pour moi: /
Evan Mattson

2
Je viens de le tester et cela "fonctionne" en 4.5, mais WordPress a décidé de se débarrasser des lignes, elles n'apparaissent tout simplement plus. Je pense que la solution consiste à ajouter du CSS, mais pour la vie de moi, je ne peux pas savoir quel CSS ajouter, car je suis un développeur backend et je suis nul avec CSS. Peut-être que quelqu'un d'autre peut suggérer?
MikeSchinkel

4

C'est aussi simple que:

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 du séparateur par défaut ( $menu[4]) peut être différente selon la configuration que vous (ou vos plugins) avez effectuée avant ce crochet.

Bien sûr, vous pouvez également modifier l' introspection menu-top-firstet les menu-top-lastclasses.


2

Si certains problèmes avec les séparateurs n'étaient pas ajoutés, cela était dû à la façon dont wordpress supprime les séparateurs en double. L'ajout ksort($menu);au bas de la fonction a corrigé le problème.


1

Cela 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, il n'est donc compatible qu'avec PHP version 5.3 et supé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;
    }
});

0

Il 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 l'utilisation de la add_menu_page()fonction, qui prend un certain nombre d'arguments et affiche un élément supplémentaire dans le menu administratif en tant que frère de "Dashboard", "Posts", "Media", etc.

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


J'essaie juste d'ajouter un séparateur du menu administrateur. Avant de poster la question, j'ai essayé d'utiliser add_menu_page().
user1147

On dirait que MikeSchinkel vous a assez bien couvert. Désolé pour ce malentendu. Bonne chance!
dgw

0

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

D' 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 n'a pas fonctionné pour moi (et, à en juger par les commentaires, pour plusieurs autres).


Il n'y a aucune différence avec la réponse existante acceptée, sauf que vous ne donnez aucune explication. Veuillez lire Comment répondre .
fuxia

@toscho: Eh bien, cela fonctionne pour moi et la réponse acceptée ne fonctionne pas.
MastaBaba
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.