Rimuovere class e id dai tag li in wp_nav_menu
Sono nuovo in WordPress e sto cercando di imparare come creare un tema. Attualmente sto usando wp_nav_menu per generare il mio menu Il mio menu è composto da pagine e categorie
Tuttavia, la generazione predefinita del menu appare così
<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>
Voglio rimuovere tutte le classi e gli id dai tag li e ul. Ho cercato su Google per un po'. Ho provato diversi metodi ma senza successo. Qualsiasi aiuto sarebbe molto apprezzato. Attualmente sto usando WordPress 3.1
Grazie in anticipo!

Puoi modificare l'id e la classe di ogni elemento utilizzando i filtri nav_menu_item_id
e nav_menu_css_class
in questo modo:
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();
}
Questo porterà ad avere elementi con il codice <li id="" class="">
. Lo stesso meccanismo può essere utilizzato per impostare ID utili, come lo slug della pagina.

Se osservi la funzione wp_nav_menu()
, vedrai che gli elementi sono scritti da walk_nav_menu_tree()
, che chiama Walker_Nav_Menu
per eseguire il lavoro (a meno che tu non abbia specificato la tua classe walker). Questa classe contiene un metodo start_el()
che viene chiamato per ogni voce del menu. In questa funzione, puoi vedere che le classi vengono filtrate attraverso nav_menu_css_class
e l'id viene filtrato attraverso nav_menu_item_id
. Quindi, se colleghi il tuo codice a questi hook, puoi modificarli come preferisci.
I sottomenu sono sempre racchiusi con <ul class="sub-menu">
, mentre il wrapper principale può essere modificato tramite gli argomenti menu_id
e menu_class
.

Questa soluzione è stata pubblicata su wp3layout. Dovresti aggiungere questo al file function.php del tuo tema.
function remove_css_id_filter($var) {
// Filtra gli array mantenendo solo 'current-menu-item'
return is_array($var) ? array_intersect($var, array('current-menu-item')) : '';
}
// Aggiungi i filtri per le classi CSS del menu
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);
Spero che questo ti aiuti.

Credo che dovresti mantenere menu-item-has-children e current-menu-item per lo stile
incolla il codice qui sotto nel tuo functions.php
//rimuove le classi CSS inutili per ogni 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);
//rimuove l'ID per ogni elemento li
add_filter('nav_menu_item_id', '__return_false');
