0

I have a bizarre problem that I just can't figure out. I have been fixing this site for almost 3 days with so many customizations that the previous developer did. The structure of this site was total chaos!

However, this menu/child menu bug has me stumped. It will ONLY show the menu for Programs. But if I delete the Programs menu, none of the other submenu's show up. In fact, GET INVOLVED menu has several child sub menu's and they are not showing up. Only Programs is able to display child menu's which makes no sense. This is the URL: https://thewomenscentreofhalton.com/

I have reviewed the functions.php file and I must be blind, because I can't see the problem.

Below is an excerpt that pertains to the menu from functions.php


class main_nav extends Walker {

  var $db_fields = array( 'parent' => 'menu_item_parent', 'id' => 'db_id' );

  function start_lvl( &$output, $depth = 0, $args = array() ) {
    $indent = str_repeat("\t", $depth);
    $output .= "\n$indent<ul>\n";
  }

  function end_lvl( &$output, $depth = 0, $args = array() ) {
    $indent = str_repeat("\t", $depth);
    $output .= "$indent</ul>\n";
  }

  function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {

    global $wp_query;
    $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
    $class_names = $value = '';
    $classes = empty( $item->classes ) ? array() : (array) $item->classes;

    /* Add active class */
    if(in_array('current-menu-item', $classes)) {
      $classes[] = 'active';
      unset($classes['current-menu-item']);
    }

    /* Check for children */
    $children = get_posts(array('post_type' => 'nav_menu_item', 'nopaging' => true, 'numberposts' => 1, 'meta_key' => '_menu_item_menu_item_parent', 'meta_value' => $item->ID));
    if (!empty($children)) {
      $classes[] = 'has-sub';
    }

    $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
    $class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';

    $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
    $id = $id ? ' id="' . esc_attr( $id ) . '"' : '';

    $output .= $indent . '<li ' . $id . $value . $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 .'><span>';
    $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
    $item_output .= '</span></a>';
    $item_output .= $args->after;

    $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
  }

  function end_el( &$output, $item, $depth = 0, $args = array() ) {
    $output .= "</li>\n";
  }
}

Here is the code where it is used:

 <div class="mid-header"> <div class="l_container clearfix"> <nav class="header-menu clearfix"> <div class="navToggle"><span class="fa fa-bars"></span></div> <?php wp_nav_menu( array( 'theme_location' => 'primary' , 'walker' => new main_nav() ) ); ?> </nav> </div> </div>
17
  • I notice your walker class extends from Walker, not Walker_Nav_Menu, is there a reason for this? You also haven't shared the code that uses this class
    – Tom J Nowell
    Mar 7 at 16:32
  • I don't really know... curious...
    – Matthew
    Mar 7 at 16:35
  • You should change it! Also it would be super helpful to see where main_nav is being used to create the nav menu output
    – Tom J Nowell
    Mar 7 at 16:37
  • @TomJNowell... How should I change it? I don't mind changing the code... hahaha!
    – Matthew
    Mar 7 at 16:41
  • @TomJNowell do you mean you want to see the page template that uses it?
    – Matthew
    Mar 7 at 16:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.