Eliminarea claselor și ID-urilor din elementele li în wp_nav_menu

23 mar. 2011, 06:44:28
Vizualizări: 36.5K
Voturi: 6

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!

1
Comentarii

Folosește plugin-ul Falcon, care are o funcționalitate pentru a curăța ID-urile și clasele elementelor de meniu, păstrând doar cele esențiale (cum ar fi current-menu-item).

Anh Tran Anh Tran
1 aug. 2023 10:08:59
Toate răspunsurile la întrebare 5
1

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.

27 apr. 2011 12:35:08
Comentarii

Întotdeauna este mai bine să folosești funcțiile de returnare din nucleul WordPress. Deci, în acest caz, folosește: add_filter( 'nav_menu_item_id', '__return_null', 10, 3 ); sau add_filter( 'nav_menu_css_class', '__return_empty_array', 10, 3 );

WPExplorer WPExplorer
8 mar. 2018 00:17:18
0

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.

23 mar. 2011 15:53:56
2
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' );
23 mar. 2011 07:14:50
Comentarii

acest lucru mă va împiedica să adaug clasa "active" pentru navigația mea activă?

eddyward eddyward
23 mar. 2011 07:25:35

Da, pentru că exact acest lucru ai cerut.

zeo zeo
23 mar. 2011 07:44:46
0

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

9 feb. 2017 22:13:55
1

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');
1 aug. 2023 08:47:35
Comentarii

inspirat din comentariul anterior al lui @Jan Fabry

Abouasy Abouasy
1 aug. 2023 08:49:00