it-swarm.com.de

Filtern Sie die integrierten wp_nav_menu-Klassen heraus, aber behalten Sie die benutzerdefinierte Klasse bei

Ich versuche, alle Klassen aus dem wp_nav_menu zu entfernen/zu filtern, AUSSER die benutzerdefinierten, die ich beim Erstellen des Menüs im Admin-Bereich (im Feld "CSS-Klassen (optional)") einfüge.

Ich habe eine Funktion gefunden, die ALLES entfernt, aber das ist nicht gut

hat jemand irgendwelche Ideen?

vielen Dank!

3
Mark Theron

Eine der dunkleren Ecken des Codes. :) Hier ist meine Einstellung:

add_filter('nav_menu_css_class', 'discard_menu_classes', 10, 2);

function discard_menu_classes($classes, $item) {

    return (array)get_post_meta( $item->ID, '_menu_item_classes', true );
}
5
Rarst

Ich versuche zu antworten.

Die Funktion, die für das Generieren von Klassen für Menüelemente verantwortlich ist, ist _wp_menu_item_classes_by_context in der Datei wp-includes/nav-menu-template.php. Sie können dort suchen, um zu sehen, welche Klassen generiert werden, sodass Sie sie im nav_menu_css_class-Filter entfernen können.

Ich fand heraus, dass jede Klasse, die automatisch generiert wurde, mit der Klasse menu-item begann. Also schleife ich im Filter das Klassen-Array, bis ich diese Klasse gefunden habe.

Das ist mein Code:

function my_nav_menu_css_class($classes) {
    $custom_classes = array();
    foreach($classes as $class) {
        if($class=='menu-item') return $custom_classes;
        $custom_classes[] = $class;
    }
}
add_filter('nav_menu_css_class', 'my_nav_menu_css_class');
1
fad.lee