wake-up-neo.net

Fügen Sie benutzerdefinierte Klassen nur an Navigationsmenüelemente an

Ich überprüfte diesen äußerst hilfreichen Beitrag die Bereinigung von WP-generierten Klassen und IDs aus dem Navigationsmenü und stellte fest, dass die Option von RevelationTravis - siehe Code unten - besonders gut ist, um effektiv zu arbeiten. " Whitelist "bestimmte Menüklassen. Ich frage mich jedoch, ob es eine Möglichkeit gibt, die benutzerdefinierten Navigationsmenüklassen beizubehalten, die über das Menüadministrationsfenster WP angegeben wurden, z. B. "CSS-Klassen (optional)", ohne sie explizit nach auflisten zu müssen Name?

<?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');
?>

Vielen Dank für jede Hilfe hier.

2
nickpish

Ja, sie werden als Metadaten '_menu_item_classes' für jeden Menüpunkt gespeichert, z. B. ( aktualisiert, um eine separate Funktion zu verwenden )

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