Skip to content

Instantly share code, notes, and snippets.

@johnmegahan
Created January 12, 2012 01:50

Revisions

  1. johnmegahan revised this gist Mar 12, 2012. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion functions.php
    Original file line number Diff line number Diff line change
    @@ -31,7 +31,7 @@ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {

    $classes = empty( $item->classes ) ? array() : (array) $item->classes;
    $classes[] = ($args->has_children) ? 'dropdown' : '';
    $classes[] = ($item->current) ? 'active' : '';
    $classes[] = ($item->current || $item->current_item_ancestor) ? 'active' : '';
    $classes[] = 'menu-item-' . $item->ID;


  2. johnmegahan revised this gist Feb 17, 2012. 2 changed files with 5 additions and 11 deletions.
    6 changes: 2 additions & 4 deletions functions.php
    Original file line number Diff line number Diff line change
    @@ -30,11 +30,9 @@ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    $class_names = $value = '';

    $classes = empty( $item->classes ) ? array() : (array) $item->classes;
    if ($args->has_children){
    $classes[] = 'dropdown';
    }
    $classes[] = 'menu-item-' . $item->ID;
    $classes[] = ($args->has_children) ? 'dropdown' : '';
    $classes[] = ($item->current) ? 'active' : '';
    $classes[] = 'menu-item-' . $item->ID;


    $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
    10 changes: 3 additions & 7 deletions header.php
    Original file line number Diff line number Diff line change
    @@ -1,23 +1,19 @@
    <div class="navbar"><!-- add class navbar-fixed-top for the fixed menu -->

    <div class="navbar navbar-fixed-top">
    <div class="navbar-inner">

    <div class="container">

    <?php

    $args = array(
    'theme_location' => 'top-bar',
    'depth' => 2,
    'container' => false,
    'menu_class' => 'nav',
    'walker' => new Bootstrap_Walker_Nav_Menu()
    );

    wp_nav_menu($args);

    ?>

    </div>

    </div>

    </div>
  3. johnmegahan revised this gist Feb 11, 2012. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions header.php
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    <div class="topbar">
    <div class="navbar"><!-- add class navbar-fixed-top for the fixed menu -->

    <div class="topbar-inner">
    <div class="navbar-inner">

    <div class="container">

  4. johnmegahan revised this gist Feb 11, 2012. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion functions.php
    Original file line number Diff line number Diff line change
    @@ -49,7 +49,7 @@ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    $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 ) .'"' : '';
    $attributes .= ($args->has_children) ? ' class="dropdown-toggle" data-dropdown="dropdown"' : '';
    $attributes .= ($args->has_children) ? ' class="dropdown-toggle" data-toggle="dropdown"' : '';

    $item_output = $args->before;
    $item_output .= '<a'. $attributes .'>';
  5. johnmegahan revised this gist Feb 11, 2012. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion functions.php
    Original file line number Diff line number Diff line change
    @@ -54,7 +54,7 @@ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    $item_output = $args->before;
    $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) ? '<b class="caret"></b></a>' : '</a>';
    $item_output .= ($args->has_children) ? ' <b class="caret"></b></a>' : '</a>';
    $item_output .= $args->after;

    $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
  6. johnmegahan revised this gist Feb 11, 2012. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion functions.php
    Original file line number Diff line number Diff line change
    @@ -54,7 +54,7 @@ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    $item_output = $args->before;
    $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) ? '<b class="caret"></b></a>' : '</a>';
    $item_output .= ($args->has_children) ? '<b class="caret"></b></a>' : '</a>';
    $item_output .= $args->after;

    $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
  7. johnmegahan revised this gist Feb 11, 2012. 1 changed file with 1 addition and 3 deletions.
    4 changes: 1 addition & 3 deletions functions.php
    Original file line number Diff line number Diff line change
    @@ -51,12 +51,10 @@ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    $attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : '';
    $attributes .= ($args->has_children) ? ' class="dropdown-toggle" data-dropdown="dropdown"' : '';

    $attributes .= (

    $item_output = $args->before;
    $item_output .= '<a'. $attributes .'>';
    $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
    $item_output .= '</a>';
    $item_output .= (args->has_children) ? '<b class="caret"></b></a>' : '</a>';
    $item_output .= $args->after;

    $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
  8. johnmegahan revised this gist Feb 11, 2012. 1 changed file with 3 additions and 2 deletions.
    5 changes: 3 additions & 2 deletions functions.php
    Original file line number Diff line number Diff line change
    @@ -32,7 +32,6 @@ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    $classes = empty( $item->classes ) ? array() : (array) $item->classes;
    if ($args->has_children){
    $classes[] = 'dropdown';
    $li_attributes .= 'data-dropdown="dropdown"';
    }
    $classes[] = 'menu-item-' . $item->ID;
    $classes[] = ($item->current) ? 'active' : '';
    @@ -50,7 +49,9 @@ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    $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 ) .'"' : '';
    $attributes .= ($args->has_children) ? ' class="dropdown-toggle"' : '';
    $attributes .= ($args->has_children) ? ' class="dropdown-toggle" data-dropdown="dropdown"' : '';

    $attributes .= (

    $item_output = $args->before;
    $item_output .= '<a'. $attributes .'>';
  9. johnmegahan revised this gist Jan 24, 2012. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions header.php
    Original file line number Diff line number Diff line change
    @@ -8,8 +8,8 @@

    $args = array(
    'theme_location' => 'top-bar',
    'depth' => 2,
    'walker' => new Bootstrap_Walker_Nav_Menu()
    'depth' => 2,
    'walker' => new Bootstrap_Walker_Nav_Menu()
    );

    wp_nav_menu($args);
  10. johnmegahan revised this gist Jan 24, 2012. 2 changed files with 110 additions and 92 deletions.
    167 changes: 88 additions & 79 deletions functions.php
    Original file line number Diff line number Diff line change
    @@ -1,105 +1,114 @@
    <?php

    class Bootstrap_Walker_Nav_Menu extends Walker_Nav_Menu {


    function start_lvl( &$output, $depth ) {

    //In a child UL, add the 'dropdown-menu' class
    $indent = str_repeat( "\t", $depth );
    $output .= "\n$indent<ul class=\"dropdown-menu\">\n";

    }
    add_action( 'after_setup_theme', 'bootstrap_setup' );

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

    $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
    if ( ! function_exists( 'bootstrap_setup' ) ):

    $li_attributes = '';
    $class_names = $value = '';
    function bootstrap_setup(){

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

    //Add class and attribute to LI element that contains a submenu UL.
    if ($args->has_children){
    $classes[] = 'dropdown';
    $li_attributes .= 'data-dropdown="dropdown"';
    add_action( 'init', 'register_menu' );

    function register_menu(){
    register_nav_menu( 'top-bar', 'Bootstrap Top Menu' );
    }
    $classes[] = 'menu-item-' . $item->ID;
    //If we are on the current page, add the active class to that menu item.
    $classes[] = ($item->current) ? 'active' : '';

    //Make sure you still add all of the WordPress classes.
    $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
    $class_names = ' class="' . esc_attr( $class_names ) . '"';
    class Bootstrap_Walker_Nav_Menu extends Walker_Nav_Menu {

    $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
    $id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : '';
    function start_lvl( &$output, $depth ) {

    $output .= $indent . '<li' . $id . $value . $class_names . $li_attributes . '>';
    $indent = str_repeat( "\t", $depth );
    $output .= "\n$indent<ul class=\"dropdown-menu\">\n";

    }

    //Add attributes to link element.
    $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 ) .'"' : '';
    $attributes .= ($args->has_children) ? ' class="dropdown-toggle"' : '';
    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {

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

    $item_output = $args->before;
    $item_output .= '<a'. $attributes .'>';
    $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
    $item_output .= '</a>';
    $item_output .= $args->after;
    $li_attributes = '';
    $class_names = $value = '';

    $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    }
    $classes = empty( $item->classes ) ? array() : (array) $item->classes;
    if ($args->has_children){
    $classes[] = 'dropdown';
    $li_attributes .= 'data-dropdown="dropdown"';
    }
    $classes[] = 'menu-item-' . $item->ID;
    $classes[] = ($item->current) ? 'active' : '';


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

    //Overwrite display_element function to add has_children attribute. Not needed in >= Wordpress 3.4
    function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ) {

    if ( !$element )
    return;

    $id_field = $this->db_fields['id'];
    $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
    $id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : '';

    //display this element
    if ( is_array( $args[0] ) )
    $args[0]['has_children'] = ! empty( $children_elements[$element->$id_field] );
    else if ( is_object( $args[0] ) )
    $args[0]->has_children = ! empty( $children_elements[$element->$id_field] );
    $cb_args = array_merge( array(&$output, $element, $depth), $args);
    call_user_func_array(array(&$this, 'start_el'), $cb_args);
    $output .= $indent . '<li' . $id . $value . $class_names . $li_attributes . '>';

    $id = $element->$id_field;
    $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 ) .'"' : '';
    $attributes .= ($args->has_children) ? ' class="dropdown-toggle"' : '';

    // descend only when the depth is right and there are childrens for this element
    if ( ($max_depth == 0 || $max_depth > $depth+1 ) && isset( $children_elements[$id]) ) {
    $item_output = $args->before;
    $item_output .= '<a'. $attributes .'>';
    $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
    $item_output .= '</a>';
    $item_output .= $args->after;

    foreach( $children_elements[ $id ] as $child ){
    $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    }

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

    if ( !$element )
    return;

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

    //display this element
    if ( is_array( $args[0] ) )
    $args[0]['has_children'] = ! empty( $children_elements[$element->$id_field] );
    else if ( is_object( $args[0] ) )
    $args[0]->has_children = ! empty( $children_elements[$element->$id_field] );
    $cb_args = array_merge( array(&$output, $element, $depth), $args);
    call_user_func_array(array(&$this, 'start_el'), $cb_args);

    $id = $element->$id_field;

    // descend only when the depth is right and there are childrens for this element
    if ( ($max_depth == 0 || $max_depth > $depth+1 ) && isset( $children_elements[$id]) ) {

    foreach( $children_elements[ $id ] as $child ){

    if ( !isset($newlevel) ) {
    $newlevel = true;
    //start the child delimiter
    $cb_args = array_merge( array(&$output, $depth), $args);
    call_user_func_array(array(&$this, 'start_lvl'), $cb_args);
    }
    $this->display_element( $child, $children_elements, $max_depth, $depth + 1, $args, $output );
    }
    unset( $children_elements[ $id ] );
    }

    if ( !isset($newlevel) ) {
    $newlevel = true;
    //start the child delimiter
    if ( isset($newlevel) && $newlevel ){
    //end the child delimiter
    $cb_args = array_merge( array(&$output, $depth), $args);
    call_user_func_array(array(&$this, 'start_lvl'), $cb_args);
    call_user_func_array(array(&$this, 'end_lvl'), $cb_args);
    }
    $this->display_element( $child, $children_elements, $max_depth, $depth + 1, $args, $output );
    }
    unset( $children_elements[ $id ] );
    }

    if ( isset($newlevel) && $newlevel ){
    //end the child delimiter
    $cb_args = array_merge( array(&$output, $depth), $args);
    call_user_func_array(array(&$this, 'end_lvl'), $cb_args);
    //end this element
    $cb_args = array_merge( array(&$output, $element, $depth), $args);
    call_user_func_array(array(&$this, 'end_el'), $cb_args);

    }

    }

    //end this element
    $cb_args = array_merge( array(&$output, $element, $depth), $args);
    call_user_func_array(array(&$this, 'end_el'), $cb_args);

    }

    }

    endif;
    ?>
    35 changes: 22 additions & 13 deletions header.php
    Original file line number Diff line number Diff line change
    @@ -1,14 +1,23 @@
    <?php
    <div class="topbar">

    $args = array(
    'menu' => 'top',
    'container' => false,
    'menu_class' => 'nav',
    'depth' => 2,
    'walker' => new Bootstrap_Walker_Nav_Menu(),
    'items_wrap' => '<ul id="primary-nav" class="%2$s">%3$s</ul>'
    );

    wp_nav_menu($args);

    ?>
    <div class="topbar-inner">

    <div class="container">

    <?php

    $args = array(
    'theme_location' => 'top-bar',
    'depth' => 2,
    'walker' => new Bootstrap_Walker_Nav_Menu()
    );

    wp_nav_menu($args);

    ?>

    </div>

    </div>

    </div>
  11. johnmegahan revised this gist Jan 24, 2012. 2 changed files with 14 additions and 0 deletions.
    File renamed without changes.
    14 changes: 14 additions & 0 deletions header.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,14 @@
    <?php

    $args = array(
    'menu' => 'top',
    'container' => false,
    'menu_class' => 'nav',
    'depth' => 2,
    'walker' => new Bootstrap_Walker_Nav_Menu(),
    'items_wrap' => '<ul id="primary-nav" class="%2$s">%3$s</ul>'
    );

    wp_nav_menu($args);

    ?>
  12. johnmegahan revised this gist Jan 13, 2012. 1 changed file with 10 additions and 2 deletions.
    12 changes: 10 additions & 2 deletions jcm-bootstrap-menu_walker.php
    Original file line number Diff line number Diff line change
    @@ -2,8 +2,10 @@

    class Bootstrap_Walker_Nav_Menu extends Walker_Nav_Menu {


    function start_lvl( &$output, $depth ) {


    //In a child UL, add the 'dropdown-menu' class
    $indent = str_repeat( "\t", $depth );
    $output .= "\n$indent<ul class=\"dropdown-menu\">\n";

    @@ -17,14 +19,17 @@ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    $class_names = $value = '';

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

    //Add class and attribute to LI element that contains a submenu UL.
    if ($args->has_children){
    $classes[] = 'dropdown';
    $li_attributes .= 'data-dropdown="dropdown"';
    }
    $classes[] = 'menu-item-' . $item->ID;
    //If we are on the current page, add the active class to that menu item.
    $classes[] = ($item->current) ? 'active' : '';


    //Make sure you still add all of the WordPress classes.
    $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
    $class_names = ' class="' . esc_attr( $class_names ) . '"';

    @@ -33,6 +38,7 @@ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {

    $output .= $indent . '<li' . $id . $value . $class_names . $li_attributes . '>';

    //Add attributes to link element.
    $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 ) .'"' : '';
    @@ -48,6 +54,7 @@ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    }

    //Overwrite display_element function to add has_children attribute. Not needed in >= Wordpress 3.4
    function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ) {

    if ( !$element )
    @@ -94,4 +101,5 @@ function display_element( $element, &$children_elements, $max_depth, $depth=0, $
    }

    }

    ?>
  13. johnmegahan revised this gist Jan 13, 2012. 1 changed file with 4 additions and 2 deletions.
    6 changes: 4 additions & 2 deletions jcm-bootstrap-menu_walker.php
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,7 @@
    <?php

    class Bootstrap_Walker_Nav_Menu extends Walker_Nav_Menu {


    function start_lvl( &$output, $depth ) {

    $indent = str_repeat( "\t", $depth );
    @@ -92,4 +93,5 @@ function display_element( $element, &$children_elements, $max_depth, $depth=0, $

    }

    }
    }
    ?>
  14. johnmegahan revised this gist Jan 13, 2012. 1 changed file with 52 additions and 11 deletions.
    63 changes: 52 additions & 11 deletions jcm-bootstrap-menu_walker.php
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,5 @@
    class Bootstrap_Walker_Nav_Menu extends Walker_Nav_Menu {


    function start_lvl( &$output, $depth ) {

    @@ -8,25 +9,20 @@ function start_lvl( &$output, $depth ) {
    }

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

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

    $li_attributes = '';
    $has_children = false;
    $class_names = $value = '';

    $classes = empty( $item->classes ) ? array() : (array) $item->classes;
    if ($args->has_children){
    $classes[] = 'dropdown';
    $li_attributes .= 'data-dropdown="dropdown"';
    }
    $classes[] = 'menu-item-' . $item->ID;
    $classes[] = ($item->current) ? 'active' : '';

    foreach($wpdb->last_result as $a) {
    if ( $a->meta_key == '_menu_item_menu_item_parent' && $a->meta_value == $item->ID && $has_children == false){
    $has_children = true;
    $classes[] = 'dropdown';
    $li_attributes .= 'data-dropdown="dropdown"';
    break;
    }
    }

    $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
    $class_names = ' class="' . esc_attr( $class_names ) . '"';
    @@ -40,7 +36,7 @@ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    $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 ) .'"' : '';
    $attributes .= ($has_children) ? ' class="dropdown-toggle"' : '';
    $attributes .= ($args->has_children) ? ' class="dropdown-toggle"' : '';

    $item_output = $args->before;
    $item_output .= '<a'. $attributes .'>';
    @@ -50,5 +46,50 @@ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {

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

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

    if ( !$element )
    return;

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

    //display this element
    if ( is_array( $args[0] ) )
    $args[0]['has_children'] = ! empty( $children_elements[$element->$id_field] );
    else if ( is_object( $args[0] ) )
    $args[0]->has_children = ! empty( $children_elements[$element->$id_field] );
    $cb_args = array_merge( array(&$output, $element, $depth), $args);
    call_user_func_array(array(&$this, 'start_el'), $cb_args);

    $id = $element->$id_field;

    // descend only when the depth is right and there are childrens for this element
    if ( ($max_depth == 0 || $max_depth > $depth+1 ) && isset( $children_elements[$id]) ) {

    foreach( $children_elements[ $id ] as $child ){

    if ( !isset($newlevel) ) {
    $newlevel = true;
    //start the child delimiter
    $cb_args = array_merge( array(&$output, $depth), $args);
    call_user_func_array(array(&$this, 'start_lvl'), $cb_args);
    }
    $this->display_element( $child, $children_elements, $max_depth, $depth + 1, $args, $output );
    }
    unset( $children_elements[ $id ] );
    }

    if ( isset($newlevel) && $newlevel ){
    //end the child delimiter
    $cb_args = array_merge( array(&$output, $depth), $args);
    call_user_func_array(array(&$this, 'end_lvl'), $cb_args);
    }

    //end this element
    $cb_args = array_merge( array(&$output, $element, $depth), $args);
    call_user_func_array(array(&$this, 'end_el'), $cb_args);

    }

    }
  15. johnmegahan revised this gist Jan 12, 2012. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions jcm-bootstrap-menu_walker.php
    Original file line number Diff line number Diff line change
    @@ -24,6 +24,7 @@ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    $has_children = true;
    $classes[] = 'dropdown';
    $li_attributes .= 'data-dropdown="dropdown"';
    break;
    }
    }

  16. @invalid-email-address Anonymous created this gist Jan 12, 2012.
    53 changes: 53 additions & 0 deletions jcm-bootstrap-menu_walker.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,53 @@
    class Bootstrap_Walker_Nav_Menu extends Walker_Nav_Menu {

    function start_lvl( &$output, $depth ) {

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

    }

    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    global $wpdb;
    $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';

    $li_attributes = '';
    $has_children = false;
    $class_names = $value = '';

    $classes = empty( $item->classes ) ? array() : (array) $item->classes;
    $classes[] = 'menu-item-' . $item->ID;
    $classes[] = ($item->current) ? 'active' : '';

    foreach($wpdb->last_result as $a) {
    if ( $a->meta_key == '_menu_item_menu_item_parent' && $a->meta_value == $item->ID && $has_children == false){
    $has_children = true;
    $classes[] = 'dropdown';
    $li_attributes .= 'data-dropdown="dropdown"';
    }
    }

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

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

    $output .= $indent . '<li' . $id . $value . $class_names . $li_attributes . '>';

    $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 ) .'"' : '';
    $attributes .= ($has_children) ? ' class="dropdown-toggle"' : '';

    $item_output = $args->before;
    $item_output .= '<a'. $attributes .'>';
    $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
    $item_output .= '</a>';
    $item_output .= $args->after;

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

    }