Rework how the side navigation is done
authorSteve Sutton <steve@gaslightmedia.com>
Thu, 9 Jul 2015 14:52:34 +0000 (10:52 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Thu, 9 Jul 2015 14:52:34 +0000 (10:52 -0400)
Add anchor tag with url for the title of the side navigation.
When a menu item appears for a page more than once it was overriding
the correct menu. I'm now building an array of matches for the page to
menu items. The one I want is the one that has sub items.

functions.php

index 742b6da..be519c5 100644 (file)
@@ -202,8 +202,7 @@ function glm_get_header() {
  */
 function glm_side_menu() {
     global $post;
-    //var_dump($post->ID);
-    $sideMenu = $allMenu = array();
+    $sideMenu = $allMenu = $pageMenuId = array();
     if (($locations = get_nav_menu_locations()) && isset($locations['top-bar'])) {
         $menu = wp_get_nav_menu_object($locations['top-bar']);
         $menu_items = wp_get_nav_menu_items($menu->term_id);
@@ -211,23 +210,34 @@ function glm_side_menu() {
             $sideMenu[$menu_item->menu_item_parent][] = $menu_item;
             $allMenu[$menu_item->ID] = $menu_item;
             if ($menu_item->object_id == $post->ID) {
-                $thisPageMenuId = $menu_item->ID;
-    //var_dump($thisPageMenuId);
-                $thisPageMenuParent = $menu_item->menu_item_parent;
+                $pageMenuId[] = $menu_item;
             }
         }
-        //echo '<pre>'.print_r($sideMenu, true).'</pre>';
-        //echo '<pre>'.print_r($sideMenu, true).'</pre>';
+        if (count($pageMenuId) > 1) {
+            //echo '<pre>'.print_r($pageMenuId, true).'</pre>';
+            foreach ($pageMenuId as $men) {
+                if (isset($sideMenu[$men->ID]) && !empty($sideMenu[$men->ID])) {
+                    $thisPageMenuId = $men->ID;
+                    $thisPageMenuParent = $men->menu_item_parent;
+                }
+            }
+        } else {
+            $thisPageMenuId = $pageMenuId[0]->ID;
+            $thisPageMenuParent = $pageMenuId[0]->menu_item_parent;
+        }
         // does the current page (in the menu) have sub menu items?
         if (isset($sideMenu[$thisPageMenuId]) && !empty($sideMenu[$thisPageMenuId])) {
             $pageHead  = $allMenu[$thisPageMenuId];
             $side_menu = $sideMenu[$thisPageMenuId];
-        } else {
+        } else if ($thisPageMenuParent)  {
             $pageHead  = $allMenu[$thisPageMenuParent];
             $side_menu = $sideMenu[$thisPageMenuParent];
+        } else {
+            $pageHead  = $allMenu[0];
+            $side_menu = $sideMenu[0];
         }
     }
-    echo '<h1>'.$pageHead->title.'</h1>';
+    echo '<h1><a href="'.$pageHead->url.'">'.$pageHead->title.'</a></h1>';
     echo '<ul>';
     foreach ($side_menu as $menu_item) {
         echo '<li><a href="'.$menu_item->url.'">'.$menu_item->title.'</a></li>';