Exemple de sortie de classe CSS par défaut pour WordPress:
<li id="menu-item-55" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-55">
<li class="page_item page-item-37">
Les éléments de menu et de liste de pages sont accompagnés de plusieurs variables li class
et id
.
Comment les supprimer dans le fichier functions.php
pour le menu et la liste de pages?
Vous devriez pouvoir les supprimer en ajoutant des filtres et en renvoyant des tableaux ou des chaînes vides plutôt que de nouvelles classes ou identifiants:
add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1);
add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
add_filter('page_css_class', 'my_css_attributes_filter', 100, 1);
function my_css_attributes_filter($var) {
return is_array($var) ? array() : '';
}
Si vous voulez garder des classes particulières, vous pouvez faire quelque chose comme ceci:
function my_css_attributes_filter($var) {
return is_array($var) ? array_intersect($var, array('current-menu-item')) : '';
}
ceci est un ajout à la réponse de Richard.
au cas où vous voudriez changer la classe d'item-menu-item en autre.
add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1);
add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
function my_css_attributes_filter($var) {
if(is_array($var)){
$varci= array_intersect($var, array('current-menu-item'));
$cmeni = array('current-menu-item');
$selava = array('selectedmenu');
$selavaend = array();
$selavaend = str_replace($cmeni, $selava, $varci);
}
else{
$selavaend= '';
}
return $selavaend;
}
Voici une solution que je suis venu avec. Il supprime tous les identifiants et classes du wp_nav_menu, mais vous permet de créer votre propre liste "approuvée" de classes et/ou d'identifiants. Il change également le long "élément de menu en cours" en "actif". Si vous préférez conserver les styles CSS par défaut de WordPress, supprimez simplement cette section du code. Afin de garder ce message minimal, voici les liens vers la Pastebin avec le code:
http://Pastebin.com/W16cxDfY - pour votre fichier functions.php
http://Pastebin.com/CGx4aprf - pour votre modèle, où que vous soyez dans le menu
simplement add_filter('nav_menu_item_id', '__return_false');
pour l'identifiant d'élément de menu
Si vous voulez juste supprimer toutes les classes de la liste et tous les identifiants, ajoutez ceci à functions.php
add_filter('nav_menu_item_id', 'filter_menu_id');
add_filter( 'nav_menu_css_class', 'filter_menu_li' );
function filter_menu_li(){
return array('');
}
function filter_menu_id(){
return;
}
Un ajout à la réponse de Richard: Nous devons nettoyer les classes vides laissées derrière:
//Strip Empty Classes
add_filter ('wp_nav_menu','strip_empty_classes');
function strip_empty_classes($menu) {
$menu = preg_replace('/ class=(["\'])(?!active).*?\1/','',$menu);
return $menu;
}
Ma solution:
$defaults = array(
'theme_location' => '',
'menu' => '',
'container' => '',
'container_class' => '',
'container_id' => '',
'menu_class' => '',
'menu_id' => '',
'echo' => false, // param important
'fallback_cb' => 'wp_page_menu',
'before' => '',
'after' => '',
'link_before' => '',
'link_after' => '',
'items_wrap' => '',
'depth' => -1,
'walker' => ''
);
ob_start();
echo preg_replace( '#<li[^>]+>#', '<li>', wp_nav_menu( $defaults ) );
$mainNav = ob_get_clean();
// In the page :
echo $mainNav;