wordpress - mostrar - wp_nav_menu example
eliminar li class & id para elementos de menú y lista de páginas (7)
Ejemplo de salida de clase de CSS predeterminada de WordPress:
<li id="menu-item-55" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-55">
<li class="page_item page-item-37">
El elemento de la lista de menú y páginas viene con varias class
e id
propias.
¿Cómo eliminarlos en el archivo functions.php
para el menú y para la lista de páginas?
Aquí hay una solución que se me ocurrió. Elimina todas las identificaciones y clases del wp_nav_menu, pero le permite crear su propia lista "aprobada" de clases y / o id. También cambia el extenso "elemento del menú actual" a "activo". Si prefiere mantener los estilos CSS de WordPress predeterminados, simplemente elimine esa sección del código. En aras de mantener esta publicación mínima, aquí están los enlaces a la pastebin con el código:
http://pastebin.com/W16cxDfY - para su archivo functions.php
http://pastebin.com/CGx4aprf - para su plantilla, donde quiera que vaya el menú
Debería poder eliminarlos enganchando un par de filtros y devolviendo matrices o cadenas vacías en lugar de nuevas clases o ID:
add_filter(''nav_menu_css_class'', ''my_css_attributes_filter'', 100, 1);
add_filter(''nav_menu_item_id'', ''my_css_attributes_filter'', 100, 1);
add_filter(''page_css_class'', ''my_css_attributes_filter'', 100, 1);
function my_css_attributes_filter($var) {
return is_array($var) ? array() : '''';
}
Si quisiera mantener clases particulares, podría hacer algo como esto:
function my_css_attributes_filter($var) {
return is_array($var) ? array_intersect($var, array(''current-menu-item'')) : '''';
}
Mi solución:
$defaults = array(
''theme_location'' => '''',
''menu'' => '''',
''container'' => '''',
''container_class'' => '''',
''container_id'' => '''',
''menu_class'' => '''',
''menu_id'' => '''',
''echo'' => false, // param important
''fallback_cb'' => ''wp_page_menu'',
''before'' => '''',
''after'' => '''',
''link_before'' => '''',
''link_after'' => '''',
''items_wrap'' => '''',
''depth'' => -1,
''walker'' => ''''
);
ob_start();
echo preg_replace( ''#<li[^>]+>#'', ''<li>'', wp_nav_menu( $defaults ) );
$mainNav = ob_get_clean();
// In the page :
echo $mainNav;
Si solo desea eliminar todas las listas de clases y los id, agréguelos a functions.php
add_filter(''nav_menu_item_id'', ''filter_menu_id'');
add_filter( ''nav_menu_css_class'', ''filter_menu_li'' );
function filter_menu_li(){
return array('''');
}
function filter_menu_id(){
return;
}
Una adición a la respuesta de Richard: tenemos que limpiar las clases vacías que quedaron atrás:
//Strip Empty Classes
add_filter (''wp_nav_menu'',''strip_empty_classes'');
function strip_empty_classes($menu) {
$menu = preg_replace(''/ class=(["/'])(?!active).*?/1/'','''',$menu);
return $menu;
}
esto es una adición a la respuesta de Richard.
en caso de que quiera cambiar la clase del elemento del menú actual por otra cosa.
add_filter(''nav_menu_css_class'', ''my_css_attributes_filter'', 100, 1);
add_filter(''nav_menu_item_id'', ''my_css_attributes_filter'', 100, 1);
function my_css_attributes_filter($var) {
if(is_array($var)){
$varci= array_intersect($var, array(''current-menu-item''));
$cmeni = array(''current-menu-item'');
$selava = array(''selectedmenu'');
$selavaend = array();
$selavaend = str_replace($cmeni, $selava, $varci);
}
else{
$selavaend= '''';
}
return $selavaend;
}
simplemente add_filter(''nav_menu_item_id'', ''__return_false'');
para el id del elemento de menú