web-dev-qa-db-fra.com

wp_nav_menu retire la classe et l'id de li

Je suis nouveau sur wordpress et j'essaie d'apprendre à créer un thème. En ce moment, j'utilise wp_nav_menu pour générer mon menu. Mon menu est composé de pages et de catégories.

Cependant, la génération par défaut du menu ressemble à

<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>

Je veux supprimer toute la classe et id de li et ul. J'ai été googler pendant un certain temps maintenant. Essayé différentes méthodes et pas de chance. Toute aide serait très appréciée. J'utilise actuellement Wordpress 3.1

Merci d'avance!

5
eddyward

Si vous regardez dans la fonction wp_nav_menu() , vous voyez que les éléments sont écrits par walk_nav_menu_tree() , qui appelle Walker_Nav_Menu pour effectuer le travail (à moins que vous n'ayez spécifié votre propre classe de défilement). Cette classe contient une méthode start_el() appelée pour chaque élément de menu. Dans cette fonction, vous voyez que les classes sont filtrées via nav_menu_css_class et que l'id est filtré via nav_menu_item_id. Donc, si vous attachez votre propre code à ces crochets, vous pouvez les changer comme vous le souhaitez.

Les sous-menus sont toujours entourés de <ul class="sub-menu"> , le wrapper principal peut être modifié via les arguments menu_id et menu_class .

4
Jan Fabry

Vous pouvez modifier l'id et la classe de chaque élément avec les crochets de filtre nav_menu_item_id et nav_menu_css_class comme suit:

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();
}

Cela entraînera des éléments disant <li id="" class="">. Le même mécanisme peut être utilisé pour définir des identifiants sur quelque chose d’utile, tel que le slug de page.

3
Marcus Downing
function wp_nav_menu_remove_attributes( $menu ){
    return $menu = preg_replace('/ id=\"(.*)\" class=\"(.*)\"/iU', '', $menu );
}
add_filter( 'wp_nav_menu', 'wp_nav_menu_remove_attributes' );
1
zeo

Cette solution a été publiée sur wp3layout .Vous devez l’ajouter à la fonction de votre thème.

 
 function remove_css_id_filter ($ var) {
 renvoyer is_array ($ var)? array_intersect ($ var, array ('élément-de-menu-courant')): ''; 
} 
 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); 

J'espère que cela t'aides.

0
Richy