WordPress Inclusivo 27: Mejorando los submenús del menú de administración

En anteriores entregas, ordenamos alfabéticamente el menú de administración de nuestro wordpress, hoy mejoramos los submenús de administración.

Para hacerlo simplemente ampliaremos el código de la última entrega del modo siguiente:

function com_metsuke_sort_admin_menu() {
  global $menu;
  global $submenu;

  // Ordena los menus
  $menu = com_metsuke_sort_admin_menu_options($menu,1);

  //Obtener Array de Prefijos
  $prefijos = array();
  foreach ($menu as $token) {
    $prefijos[$token[2]] = $token[0];
  }

  // Ordena los submenús.
  foreach ($submenu as &$token) {
    $prefix = $prefijos[$clave] . " - ";
    foreach($token as &$option) {
      $option[0] = $prefix . $option[0];	
      unset($option);			
    }
    $token = com_metsuke_sort_admin_menu_options($token,1);
  }
  unset($token);
}

function com_metsuke_sort_admin_menu_options($menuItems,$menuTopCount=1) {
  // Ordena elementos iniciales ($menuTopCount)
  $default = array_slice( $menuItems, 0, $menuTopCount, true );
  usort( $default, 'com_metsuke_sort_admin_menu_sort_options' );

  // Ordena el resto de elementos
  $length = count( $menuItems );
  $extra = array_slice( $menuItems,$menuTopCount, $length, true );
  usort( $extra, 'com_metsuke_sort_admin_menu_sort_options' );

  // Mantener un solo separador si los hay.
  $cleaned = array();
  foreach($extra as $review) {
    if($review[0]!="" || count($cleaned)==0) {
      array_push($cleaned,$review);
    }	
  }
  $extra = $cleaned;
  unset($cleaned);

  // Apply
  return array_merge( $default, $extra );

}

//http://stackoverflow.com/a/1597788/1287812
function com_metsuke_sort_admin_menu_sort_options( $item1, $item2 ) {
  if ($item1[0] == $item2[0]) return 0;
  return ( $item1[0] > $item2[0] ) ? 1 : -1;
}
	
 /* Se usa admin_head y no admin_menu para evitar que plugins 
  como Site Kit mantengan su menu arriba a pesar de la 
  reordenacion.
		
  No usamos admin_init porque causa error de whitespace 
  extra en algunos entornos.
*/
add_action( 'admin_head', 'com_metsuke_sort_admin_menu', 999 );

Esencialmente hemos obtenido un array con los nombres de los elementos padre y aplicado estos como prefijos de cada entrada hija. Aunque a nivel visual parezca no haber pasado nada extremadamente relevante, no es así.

Los usuarios de lector de pantalla, tanto con discapacidad visual, como con dificultades e movilidad e incluso algunos perfiles de discapacidad cognitiva, obtienen una información muy valiosa para localizar los menús y mantener la continuidad del proceso.

En especial el caso de las personas ciegas, dado que navegan mostrando de golpe todos los enlaces del menú, la mejora les permite que estos menús aparezcan ordenados cada uno en su bloque correspondiente y evitar que aparezcan por ejemplo tres “añadir nuevo” seguidos sin contexto que los identifique.

En próximas entregas seguiremos optimizando este código y mejorando la interacción en cuanto a accesibilidad funcional.

Quizá te interese ...

Dejar una Respuesta

XHTML: Usted puede usar las siguientes etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>