¿Alguien sabe cómo agregar un separador de menú de administrador? Encontré esto pero no ayudó.
¿Algunas ideas?
¿Alguien sabe cómo agregar un separador de menú de administrador? Encontré esto pero no ayudó.
¿Algunas ideas?
Respuestas:
Aquí hay una manera rápida y sucia de obtener lo que quieres.
WordPress almacena las secciones del menú de administración en una matriz global llamada $menu
. Para agregar un separador, agrega un elemento a la $menu
matriz utilizando un índice que se encuentra entre los índices de las opciones que desea separar.
add_admin_menu_separator()
funciónAsí que he escrito una función para encapsular la lógica de esto que llamé add_admin_menu_separator()
. Deberá elegir un número de índice de matriz que sea más alto que la opción después de la cual desea agregar un separador, y luego llamar a la función que add_admin_menu_separator()
pasa dicho índice como su parámetro.
Por ejemplo:
add_admin_menu_separator(37);
add_admin_menu_separator()
función en síAquí está la definición de la función add_admin_menu_separator()
que puede copiar en el functions.php
archivo de su tema . Sí, es arcano, pero también lo es el código que crea y usa la $menu
matriz global . (Afortunadamente, los planes son desaprobarlo, pero probablemente serán unos pocos años).
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
que necesitasPara averiguar qué número de índice que necesita se puede hacer una var_dump()
de $GLOBALS['menu']
desde dentro de un admin_init
gancho. Aquí hay un poco de código que puede colocar functions.php
temporalmente en el archivo de su tema para ver cuáles son los valores. Esto solo funcionará cuando solicite una URL que comience con /wp-admin/
(pero asegúrese de hacerlo con FTP y no con el editor de temas incorporado o perderá el acceso a su sitio, ¡al menos hasta que obtenga acceso FTP al functions.php
archivo de su 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;
}
}
Por cierto, puede encontrar estos enlaces útiles en general para trabajar con menús de administración:
Aunque mis clases de menú de administrador actualmente no ofrecen una manera fácil de agregar separadores, creo que ahora lo agregaré cuando tenga tiempo.
Es facil como:
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 posición del separador predeterminada ( $menu[4]
) puede ser diferente según la configuración que usted (o sus complementos) haya realizado antes de este enlace.
Por supuesto, también puede ajustar la introspección menu-top-first
y menu-top-last
clases.
Hubo algunos problemas con los separadores que no se agregaron, se debió a la forma en que Wordpress elimina los separadores duplicados. Agregar ksort($menu);
al final de la función corrigió el problema.
Esto se basa en la respuesta de MastaBaba, pero no reemplaza nada en la posición que especifique, simplemente agrega el separador después.
También utiliza una función anónima, por lo que solo es compatible con PHP versión 5.3 y superior.
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;
}
});
Es un poco difícil determinar qué estás tratando de hacer, pero creo que estás buscando agregar una entrada de nivel superior en el menú de administración de WordPress.
Consulte esta documentación en el Codex de WordPress.
En resumen, está buscando el uso de la add_menu_page()
función, que toma una serie de argumentos y muestra un elemento adicional en el menú administrativo como hermano de "Panel de control", "Publicaciones", "Medios", etc.
Espero haberlo hecho bien. :-)
add_menu_page()
.
El siguiente anuncio es una acción para Wordpress que se ejecuta cuando se muestra el menú de administración. El menú de administración es una matriz y todo lo que está haciendo aquí es agregar un elemento de matriz que define un separador, en la posición que especifique.
Desde aquí :
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'
);
}
Tenga en cuenta que, aunque esto se parece bastante a la respuesta actualmente aceptada, la respuesta actualmente aceptada no funcionó para mí (y, a juzgar por los comentarios, para varios otros).