web-dev-qa-db-fra.com

supprimer li class & id pour les éléments de menu et la liste de pages

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?

19
Cam

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')) : '';
}
42
Richard M

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;
        }
4
alhoseany

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

2

simplement add_filter('nav_menu_item_id', '__return_false'); pour l'identifiant d'élément de menu

1
vralle

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; 
}
0
Randy Kilwag

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;
}
0
Zeno Popovici

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;
0
Olivier C