Aggiungi un separatore al menu Admin?


22

Qualcuno sa come aggiungere un separatore del menu di amministrazione? Ho trovato questo , ma non ha aiutato.

Qualche idea?


Nel caso in cui qualcuno stia ancora cercando la risposta a questo, questo plugin può gestire il lavoro.
user31760,

Risposte:


33

Ecco un modo rapido e sporco per ottenere quello che vuoi.

sfondo

WordPress memorizza le sezioni del menu di amministrazione in un array globale chiamato $menu. Per aggiungere un separatore, aggiungi un elemento $menuall'array utilizzando un indice compreso tra gli indici delle opzioni che desideri separare.

Utilizzando la add_admin_menu_separator()funzione

Quindi ho scritto una funzione per incapsulare la logica per questo che ho chiamato add_admin_menu_separator(). Dovrai scegliere un numero di indice dell'array superiore all'opzione dopo la quale desideri aggiungere un separatore, quindi chiamare la funzione add_admin_menu_separator()passando tale indice come parametro.

Per esempio:

add_admin_menu_separator(37);

La add_admin_menu_separator()stessa funzione

Ecco la definizione della funzione add_admin_menu_separator()che è possibile copiare nel functions.phpfile del tema . Sì, è arcano ma lo è anche il codice che crea e utilizza l' $menuarray globale . (Alla fine i piani sono di deprecarlo, per fortuna, ma probabilmente ci vorranno alcuni anni.)

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

Trovare l'indice in $menuquello che ti serve

Per capire quale numero indice è necessario si può fare un var_dump()di $GLOBALS['menu']all'interno di un admin_initgancio. Ecco un po 'di codice che puoi rilasciare functions.phptemporaneamente nel file del tuo tema per vedere quali sono i valori. Funzionerà solo quando richiedi un URL a partire da /wp-admin/ (ma assicurati di avere a che fare con FTP e non con l'editor di temi integrato o perderai l'accesso al tuo sito, almeno fino a quando non otterrai l'accesso FTP al functions.phpfile del tuo tema !) :

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

Guarda anche:

A proposito, potresti trovare questi link utili in generale per lavorare con i menu di amministrazione:

Sebbene le mie lezioni nel menu di amministrazione non offrano attualmente un modo semplice per aggiungere separatori, penso che ora lo aggiungerò quando avrò tempo.


Grazie Mike, ho controllato tutta la notte studiando il menu var globale, ma non sono riuscito ad aggiungere un separatore, ora mi è molto più chiaro come funzionano i menu in wp.
user1147

Ciao @ user1147 : Sì, sono molto difficili da capire. Quando ho dovuto farlo per la prima volta mi ci è voluto un sacco di tempo, e continuo a lottare con loro. Da qui il motivo per cui ho scritto quelle funzioni, così posso farlo da ora in poi! Comunque, contento che la mia risposta abbia aiutato.
MikeSchinkel,

1
@MikeSchinkel Questo metodo non funziona per me con Wordpress 3.3.1.
Jim Geurts,

1
@JimGeurts - non funziona neanche per me: /
Evan Mattson il

2
L'ho appena testato e "funziona" in 4.5, ma WordPress ha deciso di sbarazzarsi delle linee che semplicemente non compaiono più. Penso alla soluzione se aggiungere CSS ma per la mia vita non riesco a capire quale CSS aggiungere poiché sono uno sviluppatore di backend e faccio schifo a CSS. Forse qualcun altro può suggerire?
MikeSchinkel,

4

È facile come:

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

}

Nota: la posizione predefinita del separatore ( $menu[4]) può essere diversa a seconda della configurazione eseguita dall'utente (o dai plug-in) prima di questo hook.

Naturalmente, puoi anche modificare l' introspezione delle classi menu-top-firste menu-top-last.


2

Aveva alcuni problemi con i separatori che non venivano aggiunti, era dovuto al modo in cui wordpress rimuoveva i separatori duplicati. L'aggiunta ksort($menu);alla fine della funzione ha corretto il problema.


1

Questo si basa sulla risposta di MastaBaba, ma non sostituisce nulla nella posizione specificata, ma aggiunge semplicemente il separatore in seguito.

Utilizza anche una funzione anonima, quindi è compatibile solo con PHP versione 5.3 e successive.

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

È un po 'difficile determinare cosa stai cercando di fare, ma penso che stai cercando di aggiungere una voce di livello superiore nel menu di amministrazione di WordPress.

Vedi questa documentazione nel codice WordPress.

In breve, stai cercando l'uso della add_menu_page()funzione, che accetta una serie di argomenti e visualizza un elemento aggiuntivo nel menu amministrativo come fratello di "Dashboard", "Post", "Media", ecc.

Spero di aver capito bene. :-)


Sto solo cercando di aggiungere un seprator del menu di amministrazione. Prima di pubblicare la domanda ho provato a utilizzare add_menu_page().
user1147

Sembra che MikeSchinkel ti abbia coperto abbastanza bene. Mi dispiace per l'incomprensione. In bocca al lupo!
dgw,

0

Di seguito viene pubblicata un'azione per Wordpress che viene eseguita quando viene visualizzato il menu di amministrazione. Il menu admin è un array e tutto ciò che stai facendo, qui, è aggiungere un elemento array che definisce un separatore, nella posizione che specifichi.

Da qui :

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

Nota che, sebbene assomigli piuttosto alla risposta attualmente accettata, la risposta attualmente accettata non ha funzionato per me (e, a giudicare dai commenti, per molti altri).


Non vi è alcuna differenza rispetto alla risposta esistente accettata, tranne per il fatto che non si fornisce alcuna spiegazione. Si prega di leggere come rispondere .
fuxia

@toscho: Bene, questo funziona per me e la risposta accettata no.
MastaBaba,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.