Advertisement
Twansparant

Add anchor links as submenu

Jan 24th, 2014
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.49 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement