Ich versuche, die Klasse current_page_parent aus dem Blog-Index-Menüelement zu entfernen (ich habe eine benutzerdefinierte Seite zum Anzeigen aller Blog-Beiträge und sie befindet sich im Menü), wenn ich durch die Archivseite für benutzerdefinierte Beiträge und die benutzerdefinierten Beiträge für Beitragstypen navigiere.
Ich habe ähnliche Fragen gefunden, weiß aber nicht, wie ich sie lösen soll. Außerdem habe ich kein current_page_parent, wenn ich im custom_post_type navigiere (ich denke, es hängt zusammen).
Mit dem Filter nav_menu_css_class
können Sie Klassen zu Menüelementen hinzufügen oder daraus entfernen. Auf jeden einzelnen Menüpunkt wird dieser Filter angewendet. Ein Array von Klassen und das Menüelement-Objekt werden an die Funktion übergeben, und Sie werden return
ein Array der Klassen, die das Menüelement haben soll.
PHPs array_diff
kann zum Entfernen von Klassen verwendet werden, und das Hinzufügen von Elementen kann durch Anhängen von Klassennamen an das Array über $classes[] = 'some-class-name'
erfolgen. Sie können den Conditional Tags
verwenden, um zu überprüfen, welche Art von Seite gerade angezeigt wird, um festzustellen, was Sie hinzufügen oder entfernen müssen.
Hier ist ein kurzes Beispiel, das prüft, ob die aktuell angezeigte Seite entweder ein Archiv oder ein einzelner Beitrag vom Typ your-post-type
ist und der Name des Menüelements Blog
lautet. Wenn diese Bedingungen erfüllt sind, wird die Klasse current_page_parent
aus dem Array der Klassen für dieses Menüelement entfernt. Sie können dies für Ihre Bedürfnisse hinzufügen oder optimieren.
function wpdev_nav_classes( $classes, $item ) {
if( ( is_post_type_archive( 'your-post-type' ) || is_singular( 'your-post-type' ) )
&& $item->title == 'Blog' ){
$classes = array_diff( $classes, array( 'current_page_parent' ) );
}
return $classes;
}
add_filter( 'nav_menu_css_class', 'wpdev_nav_classes', 10, 2 );
Die aktuelle Antwort ist großartig, setzt jedoch voraus, dass der Titel des Blog-Navigationselements "Blog" lautet. Dies kann zu Problemen führen, wenn ein Benutzer das Navigationselement in WordPress ändert. Der folgende Code ist universell, da er die Seiten-ID des Navigationselements mit der in den WordPress-Optionen gespeicherten Seiten-ID des Blogs vergleicht.
function my_custom_post_type_nav_classes( $classes, $item ) {
$custom_post_type = 'custom-post-type';
if( ( is_post_type_archive( $custom_post_type) || is_singular( $custom_post_type ) )
&& get_post_meta( $item->ID, '_menu_item_object_id', true ) == get_option( 'page_for_posts' ) ){
$classes = array_diff( $classes, array( 'current_page_parent' ) );
}
return $classes;
}
add_filter( 'nav_menu_css_class', 'my_custom_post_type_nav_classes', 10, 2 );