static function get_nav_menu_struct($id) { global $wpdb; //We've confirmed this is our special site-map menu, alert('jack-links presents: messin with sitemap'); $dat = array(); //Get all object id's associated with this "site-map" nav menu $nav_ids = $wpdb->get_col($wpdb->prepare("SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id = %d", $id )); //Get all nav_menu_item objects for the above nav_ids $mitems = get_posts(array( 'post_type' => 'nav_menu_item', 'include' => $nav_ids, 'orderby' => 'menu_order', 'order' => 'ASC' )); //Restructure by item ID and only keep the important keys foreach ($mitems as $itm) { $dat[$itm->ID] = array( 'menu_order' => $itm->menu_order, 'post_parent' => $itm->post_parent, 'description' => trim($itm->post_content) ); } //Query for extended nav item meta info which contains the target page ID and the parent menu item $meta_info = $wpdb->get_results( "SELECT post_id, meta_key, meta_value FROM $wpdb->postmeta WHERE (meta_key = '_menu_item_object_id' OR meta_key = '_menu_item_menu_item_parent' OR meta_key = '_menu_item_classes') AND post_id in (" . join(",", $nav_ids) . ")"); $post_ids = array(); //merge the resulting meta info into the original dat array foreach ($meta_info as $info) { if ($info->meta_key == "_menu_item_object_id") { $post_ids[] = $dat[$info->post_id]['post_id'] = $info->meta_value; } else if ($info->meta_key == "_menu_item_menu_item_parent") { $dat[$info->post_id]['menu_parent'] = $info->meta_value; } else if ($info->meta_key == "_menu_item_classes") { $dat[$info->post_id]['classes'] = maybe_unserialize($info->meta_value); } } //Now we get the post title for easier debugging and post menu_order to sync sorting as well as hierarchy $post_h = $wpdb->get_results("SELECT ID, post_title, menu_order FROM $wpdb->posts WHERE ID in (" . join(",",$post_ids) . ")"); $post_titles = array(); $post_orders = array(); foreach ($post_h as $p) { $post_titles[$p->ID] = $p->post_title; $post_orders[$p->ID] = $p->menu_order; } foreach ($dat as $k => $data) { $dat[$k]['post_title'] = $post_titles[$data['post_id']]; $dat[$k]['post_order'] = $post_orders[$data['post_id']]; } return $dat; }