Eliminar clases e IDs de los elementos li en wp_nav_menu
Soy nuevo en WordPress y estoy tratando de aprender cómo crear un tema. Actualmente estoy usando wp_nav_menu para generar mi menú Mi menú consiste en páginas y categorías
Sin embargo, la generación predeterminada del menú se ve así
<div id="navi">
<div class="menu-primary-container">
<ul id="menu-primary" class="menu">
<li id="menu-item-14" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-14"></li>
<li id="menu-item-16" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-16"></li>
<li id="menu-item-20" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-20"></li>
<li id="menu-item-15" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-15"></li>
<li id="menu-item-17" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-17"></li>
</ul>
</div>
</div>
Quiero eliminar todas las clases e IDs de los elementos li y ul. He estado buscando en Google durante un tiempo. He probado diferentes métodos sin éxito. Cualquier ayuda sería muy apreciada. Actualmente estoy usando WordPress 3.1
¡Gracias de antemano!

Puedes cambiar el ID y la clase de cada elemento utilizando los filtros nav_menu_item_id
y nav_menu_css_class
de la siguiente manera:
add_filter('nav_menu_item_id', 'clear_nav_menu_item_id', 10, 3);
function clear_nav_menu_item_id($id, $item, $args) {
return "";
}
add_filter('nav_menu_css_class', 'clear_nav_menu_item_class', 10, 3);
function clear_nav_menu_item_class($classes, $item, $args) {
return array();
}
Esto hará que los elementos aparezcan como <li id="" class="">
. El mismo mecanismo puede usarse para establecer IDs con valores útiles, como el slug de la página.

Si miras en la función wp_nav_menu()
, verás que los elementos son escritos por walk_nav_menu_tree()
, que llama a Walker_Nav_Menu
para hacer el trabajo (a menos que hayas especificado tu propia clase walker). Esta clase contiene un método start_el()
que se llama para cada elemento del menú. En esta función, verás que las clases se filtran a través de nav_menu_css_class
y el ID se filtra a través de nav_menu_item_id
. Por lo tanto, si adjuntas tu propio código a estos hooks, puedes cambiarlos a lo que quieras.
Los submenús siempre están envueltos con <ul class="sub-menu">
, el envoltorio principal se puede cambiar mediante los argumentos menu_id
y menu_class
.

Esta solución fue publicada en wp3layout. Debes agregar esto al archivo function.php de tu tema.
function remove_css_id_filter($var) {
return is_array($var) ? array_intersect($var, array('current-menu-item')) : '';
}
add_filter( 'page_css_class', 'remove_css_id_filter', 100, 1);
add_filter( 'nav_menu_item_id', 'remove_css_id_filter', 100, 1);
add_filter( 'nav_menu_css_class', 'remove_css_id_filter', 100, 1);
Espero que esto ayude.

Creo que deberías mantener menu-item-has-children & current-menu-item para los estilos
pega el siguiente código en tu functions.php
//elimina clases CSS inútiles para cada elemento li
function remove_css_from_menu($var)
{
return is_array($var) ? array_intersect($var, array('current-menu-item', 'menu-item-has-children',)) : '';
}
add_filter('nav_menu_css_class', 'remove_css_from_menu', 100, 1);
//elimina el ID para cada elemento li
add_filter('nav_menu_item_id', '__return_false');
