Want more features on Pastebin? Sign Up, it's FREE!

Add anchor links as submenu

By: Twansparant on Jan 24th, 2014  |  syntax: PHP  |  size: 2.71 KB  |  views: 37  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
This paste has a previous version, view the difference. Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /**
  2.  * Custom Main Menu Walker
  3.  */
  4. class Main_Nav_Walker extends Walker_Nav_Menu {
  5.         function check_current($classes) {
  6.                 return preg_match('/(current[-_])|active|dropdown/', $classes);
  7.         }
  8.         function start_lvl(&$output, $depth = 0, $args = array()) {
  9.                 $output .= "\n<ul class=\"dropdown-menu\">\n";
  10.         }
  11.         function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) {
  12.                 parent::start_el($item_html, $item, $depth, $args);
  13.                 if ($item->is_dropdown && ($depth === 0)) {
  14.                         $item_html = str_replace('<a', '<a class="dropdown-toggle" data-toggle="dropdown" data-target="#"', $item_html);
  15.                         $item_html = str_replace('</a>', ' <b class="caret"></b></a>', $item_html);
  16.                 } elseif (stristr($item_html, 'li class="divider')) {
  17.                         $item_html = preg_replace('/<a[^>]*>.*?<\/a>/iU', '', $item_html);
  18.                 } elseif (stristr($item_html, 'li class="dropdown-header')) {
  19.                         $item_html = preg_replace('/<a[^>]*>(.*)<\/a>/iU', '$1', $item_html);
  20.                 }
  21.                 $item_html = apply_filters('roots_wp_nav_menu_item', $item_html);
  22.                 $output .= $item_html;
  23.         }
  24.         function display_element($element, &$children_elements, $max_depth, $depth = 0, $args, &$output) {
  25.                 // Add anchors as children elements
  26.                 if ($depth == 0){
  27.                         $elementid      = $element->ID;
  28.                         $objectid       = $element->object_id;
  29.                         // Get subitems
  30.                         $subitems = get_field('sub_items', $objectid);
  31.                         if ($subitems) {
  32.                                 // Construct child array from anchors
  33.                                 $children_elements = '';
  34.                                 foreach ($subitems as $wp_post) {
  35.                                         $item_title     = $wp_post['sub_item_title'];
  36.                                         $item_anchor    = sanitize_title($item_title);
  37.                                         // Create new Array for each item
  38.                                         $children_elements[$elementid][] = array(
  39.                                                 'ID'                                    => 124,
  40.                                                 'post_title'                            => $item_title,
  41.                                                 'post_name'                             => $item_anchor,
  42.                                                 'post_type'                             => 'nav_menu_item',
  43.                                                 'db_id'                                 => 124,
  44.                                                 'menu_item_parent'                      => $elementid,
  45.                                                 'object_id'                             => 124,
  46.                                                 'object'                                => 'custom',
  47.                                                 'type'                                  => 'custom',
  48.                                                 'type_label'                            => 'Anchor',
  49.                                                 'title'                                 => $item_title,
  50.                                                 'url'                                   => '#'.$item_anchor,
  51.                                                 'target'                                => '',
  52.                                                 'attr_title'                            => $item_title
  53.                                         );                               
  54.                                 }
  55.                                 //print_r($children_elements);
  56.                         }      
  57.                 }
  58.  
  59.                 $element->is_dropdown = ((!empty($children_elements[$element->ID]) && (($depth + 1) < $max_depth || ($max_depth === 0))));
  60.                 if ($element->is_dropdown) {
  61.                         $element->classes[] = 'dropdown';
  62.                 }
  63.                 parent::display_element($element, $children_elements, $max_depth, $depth, $args, $output);
  64.         }
  65. }
  66.  
  67. // Call custom menu
  68. if (has_nav_menu('primary_navigation')) :
  69.         wp_nav_menu(array('theme_location' => 'primary_navigation', 'menu_class' => 'main-menu nav navbar-nav col-md-8', 'walker' => new Main_Nav_Walker() ));
  70. endif;
clone this paste RAW Paste Data