Custom walker menu for wordpress not working

The reason for posting this here (and not on wordpress stackexchange) is because I have a feeling that this might be related to invalid PHP. It seems more users are familiar with php coding here.

I have a strange problem where I am not able to add an image to a post through the media library. I am able to upload an image, but wordpress does not display the previously uploaded images in the media library, so I cannot insert any of them to a new post. Basically the media library does not fetch any images.

Read More

enter image description here

So far I have found out that this problem is spesific to my theme, and that removing this line: require get_template_directory() . '/inc/css_menu_walker.php'; from my functions.php solves the problem.

However I need to load the custom walker to render the menu. So what is wrong here? As far as I can see I have loaded the template properly and I cannot find any errors in css_menu_walker.php:

<?php
class CSS_Menu_Maker_Walker 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";
  }
}

I did not write the custom walker myself. I got it from here: http://cssmenumaker.com/blog/wordpress-3-drop-down-menu-tutorial and it seems this page has not been updated since 2013. This leads me to think that the code might be outdated and incompatible with the current version of wordpress.

WordPress version does not matter. I have the same problem in 4.5.2 and 4.4.3.

Related posts

1 comment

  1. In my functions.php I replaced:

    // Include the custom walker navigation
    require get_template_directory() .  '/inc/css_menu_walker.php';
    

    with

    /**
     * Custom walker navigation
     */
    require get_template_directory() . '/inc/css-menu-walker.php';
    

    Complete difference here: https://www.diffnow.com/?report=ba2d5

    I also had some indentation before <?php at the start of my css-menu-walker.php which I removed. This fixed the problem.

Comments are closed.