Walker Nav – appear on single post page
-
I was wondering if there was a way to get the nav menu to display on posts pages. For example. I have a main page called news. Then sub pages (e.g., New Articles, Press Releases) and then custom post types for new articles and press releases. But on the single post page the nav does not display. I’m assuming that is because my walker nav only goes to the second level sub-nav. Is there a way to edit it? I am pretty novice with php so not sure how to go about doing that. Here is what I have:
In theme functions file:
class themeslug_walker_nav_menu extends Walker_Nav_Menu { var $found_parents = array(); function start_el(&$output, $item, $depth, $args) { global $wp_query; //this only works for second level sub navigations $parent_item_id = 0; $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; $class_names = $value = ''; $classes = empty( $item->classes ) ? array() : (array) $item->classes; $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ); $class_names = ' class="' . esc_attr( $class_names ) . '"'; #current_page_item // Checks if the current element is in the current selection if (strpos($class_names, 'current-menu-item') || strpos($class_names, 'current-menu-parent') || strpos($class_names, 'current-menu-ancestor') || (is_array($this->found_parents) && in_array( $item->menu_item_parent, $this->found_parents )) ) { // Keep track of all selected parents $this->found_parents[] = $item->ID; //check if the item_parent matches the current item_parent if($item->menu_item_parent!=$parent_item_id){ $output .= $indent . '<li' . $class_names .'>'; $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 ) .'"' : ''; $item_output = $args->before; $item_output .= '<a'. $attributes .'><div>'; $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after; $item_output .= '</div></a></li>'; $item_output .= $args->after; } //} $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args ); } } function end_el(&$output, $item, $depth) { // Closes only the opened li if ( is_array($this->found_parents) && in_array( $item->ID, $this->found_parents ) ) { $output .= ""; } } function end_lvl(&$output, $depth) { $indent = str_repeat("\t", $depth); // If the sub-menu is empty, strip the opening tag, else closes it if (substr($output, -22)=="<ul class=\"sub-menu\">\n") { $output = substr($output, 0, strlen($output)-23); } else { $output .= "$indent</ul>\n"; } } }
To call the menu in my posts, I have this code:
<?php wp_nav_menu(array( 'container' => '', 'fallback_cb' => false, 'menu_class' => 'left-nav', 'theme_location' => 'header-menu', 'walker' => new themeslug_walker_nav_menu) ); ?>
Help please!
- The topic ‘Walker Nav – appear on single post page’ is closed to new replies.