Rimuovere class e id dai tag li in wp_nav_menu

23 mar 2011, 06:44:28
Visualizzazioni: 36.5K
Voti: 6

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!

1
Commenti

Utilizza il plugin Falcon, che include una funzione per ripulire gli ID e le classi degli elementi del menu, mantenendo solo quelli essenziali (come current-menu-item).

Anh Tran Anh Tran
1 ago 2023 10:08:59
Tutte le risposte alla domanda 5
1

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.

27 apr 2011 12:35:08
Commenti

È sempre meglio utilizzare le funzioni di ritorno core di WP. Quindi in questo caso usa: add_filter( 'nav_menu_item_id', '__return_null', 10, 3 ); o add_filter( 'nav_menu_css_class', '__return_empty_array', 10, 3 );

WPExplorer WPExplorer
8 mar 2018 00:17:18
0

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.

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
Commenti

questo mi impedirà di aggiungere una classe "active" per la mia navigazione attiva?

eddyward eddyward
23 mar 2011 07:25:35

Sì, perché è quello che hai chiesto.

zeo zeo
23 mar 2011 07:44:46
0

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.

9 feb 2017 22:13:55
1

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');
1 ago 2023 08:47:35
Commenti

ispirato dal commento precedente di @Jan Fabry

Abouasy Abouasy
1 ago 2023 08:49:00