web-dev-qa-db-fra.com

Ajouter uniquement des classes personnalisées aux éléments de menu de navigation

Je passais en revue cet article extrêmement utile sur le nettoyage des classes et des identifiants générés par WP dans le menu de navigation, et j'ai trouvé L'option de RevelationTravis - voir le code ci-dessous - est particulièrement utile pour "mettre en liste blanche" certaines classes de menus. Je me demande toutefois s'il existe un moyen de conserver les classes de menu de navigation personnalisées spécifiées via le panneau d'administration du menu WP - c'est-à-dire "Classes CSS (facultatif)" - sans avoir à les répertorier explicitement par prénom?

<?php
//Deletes all CSS classes and id's, except for those listed in the array below
function custom_wp_nav_menu($var) {
    return is_array($var) ? array_intersect($var, array(
        //List of allowed menu classes
        'current_page_item',
        'current_page_parent',
        'current_page_ancestor',
        'first',
        'last',
        'vertical',
        'horizontal'
        )
    ) : '';
}
add_filter('nav_menu_css_class', 'custom_wp_nav_menu');
add_filter('nav_menu_item_id', 'custom_wp_nav_menu');
add_filter('page_css_class', 'custom_wp_nav_menu');

//Replaces "current-menu-item" with "active"
function current_to_active($text){
    $replace = array(
        //List of menu item classes that should be changed to "active"
        'current_page_item' => 'active',
        'current_page_parent' => 'active',
        'current_page_ancestor' => 'active',
    );
    $text = str_replace(array_keys($replace), $replace, $text);
        return $text;
    }
add_filter ('wp_nav_menu','current_to_active');

//Deletes empty classes and removes the sub menu class
function strip_empty_classes($menu) {
    $menu = preg_replace('/ class=""| class="sub-menu"/','',$menu);
    return $menu;
}
add_filter ('wp_nav_menu','strip_empty_classes');
?>

Merci pour toute aide ici.

2
nickpish

Oui, elles sont stockées sous forme de métadonnées '_menu_item_classes' pour chaque élément de menu. Par exemple, ( est mis à jour pour utiliser une fonction séparée )

function custom_wp_nav_menu_css_class( $classes, $item, $args, $depth ) {
    $whitelist = array(
        //List of allowed menu classes
        'current_page_item',
        'current_page_parent',
        'current_page_ancestor',
        'first',
        'last',
        'vertical',
        'horizontal'
    );
    // Note array containing empty entry always created for menu item meta so filter out.
    if ( $optional = array_filter( get_post_meta( $item->ID, '_menu_item_classes', true ) ) ) {
        $whitelist = array_merge( $whitelist, $optional );
    }
    return array_intersect( $classes, $whitelist );
}
add_filter( 'nav_menu_css_class', 'custom_wp_nav_menu_css_class', 10, 4 );
1
bonger