Thursday, 3 May 2018

Wordpress Bootstrap Navwalker Menu


<div class="navbar-header">

  <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">

    <span class="sr-only">Toggle navigation</span>

    <span class="icon-bar"></span>

    <span class="icon-bar"></span>

    <span class="icon-bar"></span>

  </button>              

</div>

<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">

  <?php             

    $main_menu = array(

        'theme_location'  => 'primary',

        'menu'            => 'Main Menu',  // menu name

        'container'       => 'div',

        'container_class' => ' ',

        'container_id'    => '',

        'menu_class'      => 'menu',

        'menu_id'         => '',

        'echo'            => true,

        'fallback_cb'     => 'wp_page_menu',

        'before'          => '',

        'after'           => '',

        'link_before'     => '',

        'link_after'      => '',

        'items_wrap'      => '<ul class="nav navbar-nav">%3$s</ul>',

        'depth'           => 0,

        'walker'          => new WP_Bootstrap_Navwalker()

    );

    wp_nav_menu( $main_menu );

    ?>                                 

</div>


//walker menu function

<?php

if ( ! class_exists( 'WP_Bootstrap_Navwalker' ) ) {

    class WP_Bootstrap_Navwalker extends Walker_Nav_Menu {

        public function start_lvl( &$output, $depth = 0, $args = array() ) {

            $indent = str_repeat( "\t", $depth );

            $output .= "\n$indent<ul class=\" dropdown-menu\" >\n";

        }

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

            $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';

            if ( 0 === strcasecmp( $item->attr_title, 'divider' ) && 1 === $depth ) {

                $output .= $indent . '<li class="divider">';

            } elseif ( 0 === strcasecmp( $item->title, 'divider' ) && 1 === $depth ) {

                $output .= $indent . '<li class="divider">';

            } elseif ( 0 === strcasecmp( $item->attr_title, 'dropdown-header' ) && 1 === $depth ) {

                $output .= $indent . '<li class="dropdown-header">' . esc_attr( $item->title );

            } elseif ( 0 === strcasecmp( $item->attr_title, 'disabled' ) ) {

                $output .= $indent . '<li class="disabled"><a href="#">' . esc_attr( $item->title ) . '</a>';

            } else {


                $classes = empty( $item->classes ) ? array() : (array) $item->classes;

                $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );

                if ( $args->has_children ) {

                    $class_names .= ' dropdown';

                }

                if ( in_array( 'current-menu-item', $classes, true ) ) {

                    $class_names .= ' active';

                }

                $class_names = 'class="' . esc_attr( $class_names ) . '"';

                $output .= $indent . '<li ' . $class_names . '>';

                $atts = array();


                if ( empty( $item->attr_title ) ) {

                    $atts['title']  = ! empty( $item->title )   ? strip_tags( $item->title ) : '';

                } else {

                    $atts['title'] = $item->attr_title;

                }

                $atts['target'] = ! empty( $item->target ) ? $item->target : '';

                $atts['rel']    = ! empty( $item->xfn )    ? $item->xfn    : '';

                if ( $args->has_children && 0 === $depth ) {

                    $atts['href']           = '#';

                    $atts['data-toggle']    = 'dropdown';

                    $atts['class']          = 'dropdown-toggle';

                    $atts['aria-haspopup']  = 'true';

                    $atts['role']  = 'button';

                } else {

                    $atts['href'] = ! empty( $item->url ) ? $item->url : '';

                }

                $atts = apply_filters( 'nav_menu_link_attributes', $atts, $item, $args );

                $attributes = '';

                foreach ( $atts as $attr => $value ) {

                    if ( ! empty( $value ) ) {


                        $value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );

                        $attributes .= ' ' . $attr . '="' . $value . '"';

                    }

                }

                $item_output = $args->before;

         

                if ( ! empty( $item->attr_title ) ) {

                    $pos = strpos( esc_attr( $item->attr_title ), 'glyphicon' );

                    if ( false !== $pos ) {

                        $item_output .= '<a' . $attributes . '><span class="glyphicon ' . esc_attr( $item->attr_title ) . '" aria-hidden="true"></span>&nbsp;';

                    } else {

                        $item_output .= '<a' . $attributes . '><i class="fa ' . esc_attr( $item->attr_title ) . '" aria-hidden="true"></i>&nbsp;';

                    }

                } else {

                    $item_output .= '<a' . $attributes . '>';

                }

                $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;

                $item_output .= ( $args->has_children && 0 === $depth ) ? ' <span class="caret"></span></a>' : '</a>';

                $item_output .= $args->after;

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

            }

        }     

        public function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {

            if ( ! $element ) {

                return; }

            $id_field = $this->db_fields['id'];

            if ( is_object( $args[0] ) ) {

                $args[0]->has_children = ! empty( $children_elements[ $element->$id_field ] ); }

                parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );

        }


        public static function fallback( $args ) {

            if ( current_user_can( 'edit_theme_options' ) ) {

                $container = $args['container'];

                $container_id = $args['container_id'];

                $container_class = $args['container_class'];

                $menu_class = $args['menu_class'];

                $menu_id = $args['menu_id'];


                if ( $container ) {

                    echo '<' . esc_attr( $container );

                    if ( $container_id ) {

                        echo ' id="' . esc_attr( $container_id ) . '"';

                    }

                    if ( $container_class ) {

                        echo ' class="' . sanitize_html_class( $container_class ) . '"'; }

                    echo '>';

                }

                echo '<ul';

                if ( $menu_id ) {

                    echo ' id="' . esc_attr( $menu_id ) . '"'; }

                if ( $menu_class ) {

                    echo ' class="' . esc_attr( $menu_class ) . '"'; }

                echo '>';

                echo '<li><a href="' . esc_url( admin_url( 'nav-menus.php' ) ) . '" title="">' . esc_attr( 'Add a menu', '' ) . '</a></li>';

                echo '</ul>';

                if ( $container ) {

                    echo '</' . esc_attr( $container ) . '>'; }

            }

        }

    }

}

?>

-------------------------------------------------

Let me know your thoughts and questions in the comments.
Email: vyasankit2008@gmail.com

No comments:

Post a Comment