Die Standard-Menüklassen in WordPress sind sehr nützlich. Aber ein Problem, über das ich von Zeit zu Zeit stolpere, sind Kategorien als Unterelemente in Menüs. Zum Beispiel die folgende Menüstruktur:
Wenn also Category 1
aktiv ist, erhält Page 2
einen .current-menu-ancestor
, was in Ordnung ist… aber sobald ein Beitrag von Category 1
angezeigt wird, hat Page 2
keine spezifischen Klassen… Aber Category 1
hat .current-menu-ancestor
wie erwartet.
Zum Schluss noch die Frage: Wie ordne ich diesen .current-post-ancestor
Eltern eine Klasse zu?
Ich suche nach einer PHP Lösung. Javascript/jQuery ist ziemlich klar ... hier ist eine jQuery-Lösung, um besser zu verstehen, was ich tun möchte (und für diejenigen, die das gleiche Problem haben und mit einer JS-Lösung zufrieden sind):
jQuery( 'li.current-post-ancestor' ).parents( 'li.menu-item' ).addClass( 'current-menu-ancestor' );
Sie könnten https://codex.wordpress.org/Class_Reference/Walker verwenden, und wenn Sie aktive Eltern erkennen möchten, könnten Sie verwenden.
if ( in_array( 'current-menu-ancestor', $classes) ) {
$class_names .= ' is-active';
}
Dies ist wahrscheinlich, was Sie suchen ..
add_filter( 'wp_nav_menu_objects', 'add_menu_parent_class' );
function add_menu_parent_class( $items ) {
$parents = array();
foreach ( $items as $item ) {
if ( in_array('current-post-ancestor', $item->classes) ) {
$parents[] = $item->menu_item_parent;
}
}
foreach ( $items as $item ) {
if ( in_array( $item->ID, $parents ) ) {
$item->classes[] = 'current-menu-ancestor';
}
}
return $items;
}
Es wird eine Klasse zu aktuellem übergeordneten Post-Vorfahren Menüelement hinzugefügt. Ich habe das in meinem Theme ausprobiert und es funktioniert perfekt.