web-dev-qa-db-de.com

wp_nav_menu entferne Klasse und ID von li

Ich bin neu in WordPress und versuche, meinen Weg durch das Erstellen eines Themas zu lernen. Im Moment benutze ich wp_nav_menu, um mein Menü zu generieren. Mein Menü besteht aus Seiten und Kategorien

Die Standardgeneration des Menüs sieht jedoch so aus

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

Ich möchte alle Klassen und IDs aus li und ul entfernen. Ich google jetzt schon eine Weile. Versuchte verschiedene Methoden und kein Glück. Jede Hilfe wäre sehr dankbar. Ich benutze derzeit Wordpress 3.1

Danke im Voraus!

5
eddyward

Wenn Sie in die Funktion wp_nav_menu() schauen, sehen Sie, dass die Elemente von walk_nav_menu_tree() geschrieben wurden, der Walker_Nav_Menu aufruft, um die Arbeit zu erledigen (es sei denn, Sie haben Ihre eigene Gehklasse angegeben). Diese Klasse enthält eine Methode start_el() , die für jeden Menüpunkt aufgerufen wird. In dieser Funktion sehen Sie, dass die Klassen durch nav_menu_css_class und die ID durch nav_menu_item_id gefiltert werden. Wenn Sie also Ihren eigenen Code an diese Hooks anhängen, können Sie sie in einen beliebigen Code ändern.

Untermenüs werden immer mit <ul class="sub-menu"> umbrochen, der Hauptwrapper kann über die Argumente menu_id und menu_class geändert werden.

4
Jan Fabry

Sie können die ID und Klasse jedes Elements mit den Filter-Hooks nav_menu_item_id und nav_menu_css_class wie folgt ändern:

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

Dies führt dazu, dass <li id="" class=""> angezeigt wird. Der gleiche Mechanismus kann verwendet werden, um IDs auf etwas Nützliches zu setzen, wie zum Beispiel den Page Slug.

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

Diese Lösung wurde auf wp3layout gepostet. Sie sollten dies zur function.php Ihres Themas hinzufügen

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

Hoffe das hilft.

0
Richy