Advertisement
shakil97bd

Dynamic bootstrap navbar for wordpress

Jan 24th, 2015
460
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 7.05 KB | None | 0 0
  1. https://github.com/twittem/wp-bootstrap-navwalker
  2.  
  3. OR
  4.  
  5.  
  6. functions.php
  7. #............................................................................................
  8.  <?php
  9. add_action( 'after_setup_theme', 'bootstrap_setup' );
  10.  
  11. if ( ! function_exists( 'bootstrap_setup' ) ):
  12.  
  13.         function bootstrap_setup(){
  14.  
  15.                 add_action( 'init', 'register_menu' );
  16.                        
  17.                 function register_menu(){
  18.                         register_nav_menu( 'top-bar', 'Bootstrap Top Menu' );
  19.                 }
  20.  
  21.                 class Bootstrap_Walker_Nav_Menu extends Walker_Nav_Menu {
  22.  
  23.                        
  24.                         function start_lvl( &$output, $depth ) {
  25.  
  26.                                 $indent = str_repeat( "\t", $depth );
  27.                                 $output    .= "\n$indent<ul class=\"dropdown-menu\">\n";
  28.                                
  29.                         }
  30.  
  31.                         function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
  32.                                
  33.                                 $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
  34.  
  35.                                 $li_attributes = '';
  36.                                 $class_names = $value = '';
  37.  
  38.                                 $classes = empty( $item->classes ) ? array() : (array) $item->classes;
  39.                                 $classes[] = ($args->has_children) ? 'dropdown' : '';
  40.                                 $classes[] = ($item->current || $item->current_item_ancestor) ? 'active' : '';
  41.                                 $classes[] = 'menu-item-' . $item->ID;
  42.  
  43.  
  44.                                 $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
  45.                                 $class_names = ' class="' . esc_attr( $class_names ) . '"';
  46.  
  47.                                 $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
  48.                                 $id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : '';
  49.  
  50.                                 $output .= $indent . '<li' . $id . $value . $class_names . $li_attributes . '>';
  51.  
  52.                                 $attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) .'"' : '';
  53.                                 $attributes .= ! empty( $item->target )     ? ' target="' . esc_attr( $item->target     ) .'"' : '';
  54.                                 $attributes .= ! empty( $item->xfn )        ? ' rel="'    . esc_attr( $item->xfn        ) .'"' : '';
  55.                                 $attributes .= ! empty( $item->url )        ? ' href="'   . esc_attr( $item->url        ) .'"' : '';
  56.                                 $attributes .= ($args->has_children)        ? ' class="dropdown-toggle" data-toggle="dropdown"' : '';
  57.  
  58.                                 $item_output = $args->before;
  59.                                 $item_output .= '<a'. $attributes .'>';
  60.                                 $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
  61.                                 $item_output .= ($args->has_children) ? ' <b class="caret"></b></a>' : '</a>';
  62.                                 $item_output .= $args->after;
  63.  
  64.                                 $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
  65.                         }
  66.  
  67.                         function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ) {
  68.                                
  69.                                 if ( !$element )
  70.                                         return;
  71.                                
  72.                                 $id_field = $this->db_fields['id'];
  73.  
  74.                                 //display this element
  75.                                 if ( is_array( $args[0] ) )
  76.                                         $args[0]['has_children'] = ! empty( $children_elements[$element->$id_field] );
  77.                                 else if ( is_object( $args[0] ) )
  78.                                         $args[0]->has_children = ! empty( $children_elements[$element->$id_field] );
  79.                                 $cb_args = array_merge( array(&$output, $element, $depth), $args);
  80.                                 call_user_func_array(array(&$this, 'start_el'), $cb_args);
  81.  
  82.                                 $id = $element->$id_field;
  83.  
  84.                                 // descend only when the depth is right and there are childrens for this element
  85.                                 if ( ($max_depth == 0 || $max_depth > $depth+1 ) && isset( $children_elements[$id]) ) {
  86.  
  87.                                         foreach( $children_elements[ $id ] as $child ){
  88.  
  89.                                                 if ( !isset($newlevel) ) {
  90.                                                         $newlevel = true;
  91.                                                         //start the child delimiter
  92.                                                         $cb_args = array_merge( array(&$output, $depth), $args);
  93.                                                         call_user_func_array(array(&$this, 'start_lvl'), $cb_args);
  94.                                                 }
  95.                                                 $this->display_element( $child, $children_elements, $max_depth, $depth + 1, $args, $output );
  96.                                         }
  97.                                                 unset( $children_elements[ $id ] );
  98.                                 }
  99.  
  100.                                 if ( isset($newlevel) && $newlevel ){
  101.                                         //end the child delimiter
  102.                                         $cb_args = array_merge( array(&$output, $depth), $args);
  103.                                         call_user_func_array(array(&$this, 'end_lvl'), $cb_args);
  104.                                 }
  105.  
  106.                                 //end this element
  107.                                 $cb_args = array_merge( array(&$output, $element, $depth), $args);
  108.                                 call_user_func_array(array(&$this, 'end_el'), $cb_args);
  109.                                
  110.                         }
  111.                        
  112.                 }
  113.  
  114.         }
  115.  
  116. endif;
  117.  
  118.  
  119.  ?>
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126. Header.php
  127. #............................................................................
  128.  
  129.                         <?php
  130.                                
  131.                                 $args = array(
  132.                                         'theme_location' => 'top-bar',
  133.                                         'depth'          => 2,
  134.                                         'container'      => false,
  135.                                         'menu_class'     => 'nav navbar-nav',
  136.                                         'walker'         => new Bootstrap_Walker_Nav_Menu()
  137.                                 );
  138.  
  139.                                 wp_nav_menu($args);
  140.                        
  141.                         ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement