Markieren Sie einen bestimmten Menüeintrag, wenn der benutzerdefinierte Post eine Seite ist

Ich weiß, dass diese Frage viele Male gestellt wurde, aber ich fand keine wirklich gute Lösung für mein Problem:

Ich habe einen benutzerdefinierten Beitragstyp “Ereignis” mit einigen Kategorien wie “Vortrag”. Für jede Kategorie habe ich eine eigene Seite erstellt, auf der Informationen zur Kategorie und eine Liste der Ereignisse aus dieser Kategorie angezeigt werden. Die Seiten sind alle über Untermenüeinträge zugänglich.

Wenn ich ein Ereignis öffne, wird kein Menüelement als aktuell markiert. Ich denke, die beste Lösung wäre es, jede Kategorie mit ihrer Seite zu verknüpfen, aber ich weiß nicht, wie ich das machen soll.

Das Hinzufügen der richtigen classn zu den Menüeinträgen und und ihren Eltern wäre gut, aber das Ändern des Navigationsmenüs wäre perfekt (ein anderes Addon braucht zu wissen, welcher der aktuelle Menüeintrag ist, um das aktuelle Untermenü in einer zweiten Navigationsleiste anzuzeigen).


Meine aktuelle Lösung ist der folgende Filter:

function my_special_nav_class( $classes, $item ) { global $post; if (get_post_type() == "event") { $page_categories = wp_get_post_terms($post->ID, 'event-categories'); if ($page_categories) { foreach( $page_categories as $category ) { $ignored_terms = array('CRM', 'PPM'); $cat_name = $category->name; if ( !in_array($cat_name, $ignored_terms) ) { if ($cat_name == $item->title) { $classes[] = 'current-menu-item'; } } } } } return $classes; } add_filter( 'nav_menu_css_class', 'my_special_nav_class', 10, 2 ); 

Aber wie kann ich eine class zu den übergeordneten Menüpunkten des aktuellen hinzufügen?

Solutions Collecting From Web of "Markieren Sie einen bestimmten Menüeintrag, wenn der benutzerdefinierte Post eine Seite ist"

Ich denke, ich habe eine function, die es für Sie tun wird.

Die übliche WP-Methode, um den Menüeintrag hervorzuheben, besteht darin, die class “current-menu-item” zum Element hinzuzufügen, dann können Sie hervorgehobene Links mit CSS formatieren.

In diesem Fall möchten Sie einen Taxonomie-Menü-Link hervorheben , wenn wir in einem Post für diese Taxonomie sind, ist das richtig? Zum Beispiel, wenn wir in einem Post in “CategoryX” sind, möchten wir, dass der Menülink für “CategoryX” hervorgehoben wird.

Der folgende Filter für Walker_Nav_Menu sollte helfen. Dies kann in functions.php gehen

 function my_special_nav_class( $classes, $item ) { if( 'category' == $item->object ){ $current_category = array(); $category = get_category( $item->object_id ); $category = $category->term_id; global $wp_query, $wp_rewrite; $queried_object = $wp_query->get_queried_object(); $current_category[] = $queried_object->term_id; // uncomment the following if you want to debug: // echo '
Category of this menu item
'; // print_r($category); // echo '

'; // echo '

Category queried for this page
'; // print_r($current_category); // echo '

'; if( in_array( $category, $current_category ) ) { $classes[] = 'current-menu-item'; } } return $classes; } add_filter( 'nav_menu_css_class', 'my_special_nav_class', 10, 2 );

Diese function filtert nav_menu_css_class das von Walker_Nav_Menu verwendet wird.

https://core.trac.wordpress.org/browser/tags/4.1/src/wp-includes/nav-menu-template.php#L427

Der obige Filter funktioniert für die Standard-Taxonomie “category”, aber wir müssten wahrscheinlich alle aktuellen Post-Taxonomien durchlaufen, um eine benutzerdefinierte Taxonomie zu erfassen. Wenn Sie nur eine Taxonomie benötigen, ist es einfacher. Ich arbeite immer noch an einer Lösung für benutzerdefinierte Taxonomien …