Risposte:
Ecco un modo rapido e sporco per ottenere quello che vuoi.
WordPress memorizza le sezioni del menu di amministrazione in un array globale chiamato $menu
. Per aggiungere un separatore, aggiungi un elemento $menu
all'array utilizzando un indice compreso tra gli indici delle opzioni che desideri separare.
add_admin_menu_separator()
funzioneQuindi 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);
add_admin_menu_separator()
stessa funzioneEcco la definizione della funzione add_admin_menu_separator()
che è possibile copiare nel functions.php
file del tema . Sì, è arcano ma lo è anche il codice che crea e utilizza l' $menu
array 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 );
}
$menu
quello che ti servePer capire quale numero indice è necessario si può fare un var_dump()
di $GLOBALS['menu']
all'interno di un admin_init
gancio. Ecco un po 'di codice che puoi rilasciare functions.php
temporaneamente 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.php
file 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;
}
}
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.
È 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-first
e menu-top-last
.
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.
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;
}
});
È 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. :-)
add_menu_page()
.
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).