Skip to content

Instantly share code, notes, and snippets.

@alfredochuc
Forked from setola/functions.php
Created July 18, 2019 04:04
Show Gist options
  • Save alfredochuc/0faa73eb87b2c7b0a54f8c07ada73405 to your computer and use it in GitHub Desktop.
Save alfredochuc/0faa73eb87b2c7b0a54f8c07ada73405 to your computer and use it in GitHub Desktop.

Revisions

  1. @setola setola revised this gist Apr 9, 2014. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions functions.php
    Original file line number Diff line number Diff line change
    @@ -5,6 +5,7 @@
    * Twitter Bootstrap toolkit Dropdown menus in Wordpress.
    * Edited to support n-levels submenu.
    * @author johnmegahan https://gist.github.com/1597994, Emanuele 'Tex' Tessore https://gist.github.com/3765640
    * @license CC BY 4.0 https://creativecommons.org/licenses/by/4.0/
    */
    class BootstrapNavMenuWalker extends Walker_Nav_Menu {

  2. @setola setola revised this gist Apr 9, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion open-on-mouseover.js
    Original file line number Diff line number Diff line change
    @@ -6,7 +6,7 @@
    */
    jQuery(document).ready(function($) {
    $('ul.nav li.dropdown, ul.nav li.dropdown-submenu').hover(function() {
    $(this).find(' > .dropdown-menu, ').stop(true, true).delay(200).fadeIn();
    $(this).find(' > .dropdown-menu').stop(true, true).delay(200).fadeIn();
    }, function() {
    $(this).find(' > .dropdown-menu').stop(true, true).delay(200).fadeOut();
    });
  3. @setola setola revised this gist Jun 27, 2013. 1 changed file with 13 additions and 0 deletions.
    13 changes: 13 additions & 0 deletions open-on-mouseover.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,13 @@
    /**
    * This code changes the default behavior of the navbar:
    * now the submenu pops in when the user rolls his mouse
    * over the parent level menu entry.
    * Many tanks to Hanzi for this idea and code!
    */
    jQuery(document).ready(function($) {
    $('ul.nav li.dropdown, ul.nav li.dropdown-submenu').hover(function() {
    $(this).find(' > .dropdown-menu, ').stop(true, true).delay(200).fadeIn();
    }, function() {
    $(this).find(' > .dropdown-menu').stop(true, true).delay(200).fadeOut();
    });
    });
  4. @setola setola revised this gist Sep 23, 2012. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion header.php
    Original file line number Diff line number Diff line change
    @@ -8,7 +8,7 @@
    'depth' => 0,
    'container' => false,
    'menu_class' => 'nav',
    'walker' => new Bootstrap_Walker_Nav_Menu()
    'walker' => new BootstrapNavMenuWalker()
    );

    wp_nav_menu($args);
  5. @setola setola revised this gist Sep 22, 2012. 1 changed file with 99 additions and 97 deletions.
    196 changes: 99 additions & 97 deletions functions.php
    Original file line number Diff line number Diff line change
    @@ -1,113 +1,115 @@
    <?php

    add_action( 'after_setup_theme', 'bootstrap_setup' );
    /**
    * Extended Walker class for use with the
    * Twitter Bootstrap toolkit Dropdown menus in Wordpress.
    * Edited to support n-levels submenu.
    * @author johnmegahan https://gist.github.com/1597994, Emanuele 'Tex' Tessore https://gist.github.com/3765640
    */
    class BootstrapNavMenuWalker extends Walker_Nav_Menu {

    if ( ! function_exists( 'bootstrap_setup' ) ):

    function bootstrap_setup(){
    function start_lvl( &$output, $depth ) {

    add_action( 'init', 'register_menu' );

    function register_menu(){
    register_nav_menu( 'top-bar', 'Bootstrap Top Menu' );
    }
    $indent = str_repeat( "\t", $depth );
    $submenu = ($depth > 0) ? ' sub-menu' : '';
    $output .= "\n$indent<ul class=\"dropdown-menu$submenu depth_$depth\">\n";

    class Bootstrap_Walker_Nav_Menu extends Walker_Nav_Menu {
    }


    function start_lvl( &$output, $depth ) {

    $indent = str_repeat( "\t", $depth );
    $submenu = ($depth > 0) ? ' sub-menu' : '';
    $output .= "\n$indent<ul class=\"dropdown-menu$submenu depth_$depth\">\n";

    }

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

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

    $li_attributes = '';
    $class_names = $value = '';

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


    $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 .= ($args->has_children) ? ' 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 ) . $args->link_after;
    $item_output .= ($depth == 0 && $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 );
    }

    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 ){
    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {


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

    $li_attributes = '';
    $class_names = $value = '';

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

    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 ] );
    }
    // managing divider: add divider class to an element to get a divider before it.
    $divider_class_position = array_search('divider', $classes);
    if($divider_class_position !== false){
    $output .= "<li class=\"divider\"></li>\n";
    unset($classes[$divider_class_position]);
    }

    if ( isset($newlevel) && $newlevel ){
    //end the child delimiter
    $classes[] = ($args->has_children) ? 'dropdown' : '';
    $classes[] = ($item->current || $item->current_item_ancestor) ? 'active' : '';
    $classes[] = 'menu-item-' . $item->ID;
    if($depth && $args->has_children){
    $classes[] = 'dropdown-submenu';
    }


    $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 .= ($args->has_children) ? ' 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 ) . $args->link_after;
    $item_output .= ($depth == 0 && $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 );
    }


    function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ) {
    //v($element);
    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, 'end_lvl'), $cb_args);
    call_user_func_array(array(&$this, 'start_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);

    $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);

    }

    endif;
    ?>
    }
  6. @setola setola revised this gist Sep 22, 2012. 2 changed files with 34 additions and 32 deletions.
    64 changes: 33 additions & 31 deletions functions.php
    Original file line number Diff line number Diff line change
    @@ -15,71 +15,73 @@ function register_menu(){
    class Bootstrap_Walker_Nav_Menu extends Walker_Nav_Menu {


    function start_lvl( &$output, $depth ) {

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

    $submenu = ($depth > 0) ? ' sub-menu' : '';
    $output .= "\n$indent<ul class=\"dropdown-menu$submenu depth_$depth\">\n";

    }

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

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

    $li_attributes = '';
    $class_names = $value = '';

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


    if($depth && $args->has_children){ $classes[] = 'dropdown-submenu'; }


    $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 .= ($args->has_children) ? ' 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 ) . $args->link_after;
    $item_output .= ($args->has_children) ? ' <b class="caret"></b></a>' : '</a>';
    $item_output .= ($depth == 0 && $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 );
    }

    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] ) )
    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] );
    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
    @@ -88,19 +90,19 @@ function display_element( $element, &$children_elements, $max_depth, $depth=0, $
    }
    $this->display_element( $child, $children_elements, $max_depth, $depth + 1, $args, $output );
    }
    unset( $children_elements[ $id ] );
    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);

    }

    }
    2 changes: 1 addition & 1 deletion header.php
    Original file line number Diff line number Diff line change
    @@ -5,7 +5,7 @@

    $args = array(
    'theme_location' => 'top-bar',
    'depth' => 2,
    'depth' => 0,
    'container' => false,
    'menu_class' => 'nav',
    'walker' => new Bootstrap_Walker_Nav_Menu()
  7. @johnmegahan 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;


  8. @johnmegahan 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>
  9. @johnmegahan 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">

  10. @johnmegahan 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 .'>';
  11. @johnmegahan 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 );
  12. @johnmegahan 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 );
  13. @johnmegahan 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 );
  14. @johnmegahan 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 .'>';
  15. @johnmegahan 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);
  16. @johnmegahan 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>
  17. @johnmegahan 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);

    ?>
  18. @johnmegahan 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, $
    }

    }

    ?>
  19. @johnmegahan 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, $

    }

    }
    }
    ?>
  20. @johnmegahan 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);

    }

    }
  21. @johnmegahan 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;
    }
    }

  22. @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 );
    }

    }