¿Agregar un separador al menú de administración?

19

¿Alguien sabe cómo agregar un separador de menú de administración? Encontré esto pero no ayudó.

¿Alguna idea?

    
pregunta user1147 06.10.2010 - 22:02

6 respuestas

31

Aquí hay una manera rápida y sucia de obtener lo que quieres.

Fondo

WordPress almacena las secciones del menú de administración en una matriz global llamada $menu . Para agregar un separador, agregue un elemento a la matriz $menu utilizando un índice que se encuentra entre los índices de las opciones que desea separar.

Usando la función add_admin_menu_separator()

Así que escribí una función para encapsular la lógica para 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 lo cual desea agregar un separador y luego llamar a la función add_admin_menu_separator() pasando dicho índice como su parámetro.

Por ejemplo:

add_admin_menu_separator(37);

La función add_admin_menu_separator() en sí

Aquí está la definición de la función add_admin_menu_separator() que puede copiar en el archivo functions.php de su tema. Sí, es arcano, pero también lo es el código que crea y utiliza la matriz global $menu . (Los planes son finalmente desaprobarlos, por suerte, pero probablemente serán algunos 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 );
}

Buscando el índice en $menu que necesita

Para averiguar qué número de índice necesita, puede hacer un var_dump() de $GLOBALS['menu'] desde dentro de un gancho admin_init . Aquí hay un poco de código que puede colocar en el archivo functions.php de su tema temporalmente para ver cuáles son los valores. Esto solo funcionará cuando se 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 a FTP para el archivo functions.php de tu 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;
  }
}

Ver también:

Por cierto, puede encontrar estos enlaces útiles en general para trabajar con los menús de administración:

Aunque mis clases del menú de administración actualmente no ofrecen una manera fácil de agregar separadores, creo que ahora lo agregaré cuando tenga tiempo.

    
respondido por el MikeSchinkel 07.10.2010 - 04:00
3

Es fácil 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 predeterminada del separador ( $menu[4] ) puede ser diferente dependiendo de la configuración que haya realizado (o sus complementos) antes de este enlace.

Por supuesto, también puedes ajustar la introspección de las clases menu-top-first y menu-top-last .

    
respondido por el vmassuchetto 19.09.2012 - 15:06
2

Tuvo algunos problemas con los separadores que no se agregaron, se debió a la forma en que wordpress elimina los separadores duplicados. Al agregar ksort($menu); a la parte inferior de la función, se corrigió el problema.

    
respondido por el Kieran Baker 18.11.2010 - 04:15
1

Esto se basa en la respuesta de MastaBaba, pero no reemplaza nada en la posición que especifique, solo 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;
    }
});
    
respondido por el robrecord 08.05.2018 - 14:44
0

Es un poco difícil determinar qué intentas 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 Códice de WordPress.

En resumen, está buscando el uso de la función add_menu_page() , que toma varios argumentos y muestra un elemento adicional en el menú administrativo como hermano de "Dashboard", "Posts", "Media", etc.

Espero haberlo hecho bien. :-)

    
respondido por el dgw 06.10.2010 - 22:32
0

Los siguientes anuncios publicitan una acción para Wordpress que se ejecuta cuando se representa 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 más a la respuesta actualmente aceptada, la respuesta actualmente aceptada no funcionó para mí (y, a juzgar por los comentarios, para varios otros).

    
respondido por el MastaBaba 19.06.2016 - 15:57

Lea otras preguntas en las etiquetas