wake-up-neo.com

Entfernen Sie die Klasse current_page_parent nav aus dem Blog-Index, wenn Sie sich in CPT befinden

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).

3
Kevin Mamaqi

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 );
9
Milo

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 );
2
richk