Benutzerdefinierter Beitragstyp und benutzerdefiniertes Menü Walker zum Anfügen einer benutzerdefinierten class für aktive Beitragstypen

Ich habe ein interessantes Problem, das ich hier in Bezug auf ein benutzerdefiniertes Navigationsmenü lösen möchte.

Im Wesentlichen habe ich eine benutzerdefinierte Walker-class für mein Navigationsmenü erstellt und manuell einen Menüeintrag hinzugefügt, der Benutzer zu “/ articles” führt, was eine benutzerdefinierte Archivierungsseite vom Post-Typ ist. (Übrigens, soweit ich weiß, gibt es keine Möglichkeit, diese benutzerdefinierten Post-Typ-Archivseiten in die linke Auswahl aufzunehmen, richtig?)

Wie auch immer … also, ich habe den Menüeintrag hinzugefügt, indem ich das benutzerdefinierte Verknüpfungsdialogfeld benutze, und meine benutzerdefinierte Gehhilfe hebt diesen Navigationsmenüeintrag richtig hervor, wenn Sie darauf klicken / die “/ articles” Seite besuchen.

Das Problem, das ich hier habe, ist, dass wenn Sie eine der Nachrichten auswählen, diese “/ articles” Menüverknüpfung nicht mehr ausgewählt ist. Die Frage hier ist also: Was müsste ich in meiner benutzerdefinierten Walker-class ändern (Code, den ich verwende, ist unten enthalten), um eine class an das Menü anzuhängen, wenn Sie auf diesen Post-Seiten sind.

Es scheint mir, dass diese functionalität in WordPress für benutzerdefinierte Post-Typen eingebaut werden sollte. Zum Beispiel wird die class “current_page_parent” an eine übergeordnete Seite angehängt, wenn Sie eine der Unterseiten besuchen. Ich dachte, es würde etwas wie “current_post_parent” oder “current_custom_post_parent” geben, aber das scheint nicht zu existieren, soweit ich das beurteilen kann.

Also Team, irgendeine Idee, wie ich diese functionalität hinzufügen kann?

Mein benutzerdefiniertes Walker-Menü

// COMPANY - RIGHT MENU - CUSTOM MENU WALKER class Company_Menu_Bar_Walker extends Walker_Nav_Menu { function start_el(&$output, $item, $depth, $args) { global $wp_query; $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; $class_names = $value = ''; $classes = empty( $item->classes ) ? array() : (array) $item->classes; $current_indicators = array('current-menu-item', 'current-menu-parent', 'current_page_item', 'current_page_parent'); $newClasses = array(); foreach($classes as $original_class) { //check if it's indicating the current page, otherwise we don't need the class if (in_array($original_class, $current_indicators)) { array_push($newClasses, $original_class); } } $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $newClasses), $item ) ); if($class_names!='') $class_names = ' class="'. esc_attr( $class_names ) . '"'; $output .= "\t" . '
  • '; $attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : ''; $attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : ''; $attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : ''; $attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : ''; if($depth != 0) { //option to store things like sub-menus } $item_output = $args->before; $item_output .= ''; $item_output .= $args->link_before .apply_filters( 'the_title', $item->title, $item->ID ); $item_output .= ''; $item_output .= $args->after; $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args ); } }
  • Template Code, der den Custom Walker aufruft *

      

    Solutions Collecting From Web of "Benutzerdefinierter Beitragstyp und benutzerdefiniertes Menü Walker zum Anfügen einer benutzerdefinierten class für aktive Beitragstypen"

    Wenn ich die classn current-menu-item und current-page-ancestor hinzufügen möchte, verwende ich immer das wp_nav_menu ohne einen benutzerdefinierten Walker. Ich baue nur meinen eigenen Walker, wenn ich ändern möchte, sagen wir die classn zu etwas wie “sel” statt.

    Also füge ich das Menü wie folgt hinzu:

     < ?php wp_nav_menu( array( 'theme_location' => 'company-menu', 'container' => false, 'menu_class' => '', 'echo' => true, 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 'depth' => 2, 'items_wrap' => '
      ' . "\n" . '%3$s
    ' . "\n" ) ); ?>

    Und dann füge ich diese Aktion meiner functions.php hinzu:

     function additional_active_item_classes($classes = array(), $menu_item = false){ global $wp_query; if( in_array('current-menu-item', $menu_item->classes) ){ $classes[] = 'current-menu-item'; } // add class current-menu-item to archive if ( $menu_item->post_name == 'my_custom_post' && is_post_type_archive('my_custom_post') ) { $classes[] = 'current-menu-item'; } // add class current-menu-item to single if ( $menu_item->post_name == 'my_custom_post' && is_singular('my_custom_post') ) { $classes[] = 'current-menu-item'; } return $classes; } add_filter( 'nav_menu_css_class', 'additional_active_item_classes', 10, 2 ); 

    Wenn dies in der richtigen Richtung ist, kann ich Ihnen mehr helfen, wenn Sie wollen.