Eliminarea claselor și ID-urilor din elementele li în wp_nav_menu
Sunt nou în WordPress și încerc să învăț cum să creez o temă. În prezent, folosesc wp_nav_menu pentru a genera meniul meu Meniul meu constă din pagini și categorii
Totuși, generarea implicită a meniului arată astfel:
<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>
Vreau să elimin toate clasele și ID-urile din elementele li și ul. Am căutat pe Google de ceva timp. Am încercat diferite metode dar fără succes. Orice ajutor ar fi foarte apreciat. În prezent folosesc WordPress 3.1
Mulțumesc anticipat!

Puteți schimba ID-ul și clasa fiecărui element folosind hook-urile de filtrare nav_menu_item_id
și nav_menu_css_class
astfel:
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();
}
Aceasta va avea ca rezultat elemente care arată <li id="" class="">
. Același mecanism poate fi utilizat pentru a seta ID-urile la ceva util, cum ar fi slug-ul paginii.

Dacă te uiți în funcția wp_nav_menu()
, vei vedea că elementele sunt scrise de walk_nav_menu_tree()
, care apelează Walker_Nav_Menu
pentru a face treaba (dacă nu ai specificat propria clasă walker). Această clasă conține o metodă start_el()
care este apelată pentru fiecare element din meniu. În această funcție, vei observa că clasele sunt filtrate prin nav_menu_css_class
, iar ID-ul este filtrat prin nav_menu_item_id
. Astfel, dacă atașezi propriul cod la aceste hook-uri, le poți modifica după preferință.
Submeniurile sunt întotdeauna înfășurate în <ul class="sub-menu">
, iar wrapper-ul principal poate fi modificat prin argumentele menu_id
și menu_class
.

Această soluție a fost postată pe wp3layout. Ar trebui să adăugați acest cod în fișierul functions.php al temei dumneavoastră.
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);
Sper că vă ajută.

Cred că ar trebui să păstrezi clasele menu-item-has-children și current-menu-item pentru stilizare
lipește codul de mai jos în fișierul tău functions.php
//elimină clasele CSS inutile pentru fiecare element 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);
//elimină ID-ul pentru fiecare element li
add_filter('nav_menu_item_id', '__return_false');
