Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

For some reason, this walker won't work when I pass in 'echo ' => 0, it always prints the nav, and never returns the nav as a var. I can't seem to figure out where it's by passing that in wordpress. Any chance anyone can spot the problem?

function bones_main_nav() {
    $menu_args = array(
        'menu' => 'main_nav', /* menu name */
        'menu_class' => 'nav',
        'echo ' => 0,
        'theme_location' => 'main_nav', /* where in the theme it's assigned */
        'container' => 'false', /* container class */
        //'fallback_cb' => 'bones_main_nav_fallback', /* menu fallback */
        'depth' => '2', /* suppress lower levels for now */
        'walker' => new description_walker()
    );

    echo wp_nav_menu($menu_args);
    /*
    if(function_exists('new_beginnings')) {
        $topNav = wp_get_cache('topNav');
        if ($topNav === false) {
            $topNav = wp_nav_menu($menu_args);
            print_r($topNav);
            wp_set_cache('topNav', $topNav, 4000);
        }
        echo $topNav;
    } else {
        echo wp_nav_menu($menu_args);
    }
    */
}






// this is the fallback for header menu
function bones_main_nav_fallback() {
    // not calling this in case of multiple level pages - hope to add dropdown menu as an enhancement
    //wp_page_menu( 'show_home=Home&menu_class=menu' );
}

// this is the fallback for footer menu
function bones_footer_links_fallback() {
    /* you can put a default here if you like */
}

// Menu output mods
class description_walker extends Walker_Nav_Menu {
      function start_el(&$output, $item, $depth, $args) {
            global $wp_query;
            $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';

            $class_names = $value = '';

            // If the item has children, add the dropdown class for bootstrap
            if ( $args->has_children ) {
                $class_names = "dropdown ";
            }

            $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 ) . '"';

            $output .= $indent . '<li id="menu-item-'. $item->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        ) .'"' : '';
            // if the item has children add these two attributes to the anchor tag
            if ( $args->has_children ) {
                $attributes .= 'class="dropdown-toggle" data-toggle="dropdown"';
            }

            $item_output = $args->before;
            $item_output .= '<a'. $attributes .'>';
            $item_output .= $args->link_before .apply_filters( 'the_title', $item->title, $item->ID );
            $item_output .= $args->link_after;
            // if the item has children add the caret just before closing the anchor tag
            if ( $args->has_children ) {
                $item_output .= '<b class="caret"></b></a>';
            }
            else{
                $item_output .= '</a>';
            }
            $item_output .= $args->after;

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

        function start_lvl(&$output, $depth) {
            $indent = str_repeat("\t", $depth);
            $output .= "\n$indent<ul class=\"dropdown-menu\">\n";
        }

        function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output )
            {
                $id_field = $this->db_fields['id'];
                if ( is_object( $args[0] ) ) {
                    $args[0]->has_children = ! empty( $children_elements[$element->$id_field] );
                }
                return parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
            }


}
share|improve this question
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.