function wptouch_build_wordpress_menu_tree($parent = 0, $depth = 1, &$data, $exclude_disabled = false, $parent_object = false) { global $wptouch_pro; $items = wptouch_get_wordpress_menu_items($parent); if ($depth > 1 && $parent_object) { $menu_data = wptouch_create_menu_item($parent_object->page_id, $depth, $parent_object->title, 'link', false, 0, true, $parent_object->item_link, false); $data[$parent_object->title] = $menu_data; } if ($items) { // iterate through all items foreach ($items as $item) { $menu_item_type = get_post_meta($item->ID, '_menu_item_type', TRUE); $object_id = get_post_meta($item->ID, '_menu_item_object_id', TRUE); $menu_target = get_post_meta($item->ID, '_menu_item_target', TRUE); $post_title = $item->post_title; if ($object_id) { switch ($menu_item_type) { case 'post_type': $post_info = get_post($object_id); if (!$post_title) { $post_title = $post_info->post_title; } $menu_class = $wptouch_pro->get_class_for_webapp_ignore(get_permalink($object_id)); if ($menu_target == '_blank') { $menu_class = trim($menu_class) . ' external target'; } $menu_data = wptouch_create_menu_item($item->ID, $depth, $post_title, 'link', false, 0, false, get_permalink($object_id), $menu_class, $post_info->ID); if (wptouch_wordpress_menu_has_children($item->ID)) { $sub_menu = array(); wptouch_build_wordpress_menu_tree($item->ID, $depth + 1, $sub_menu, $exclude_disabled, $menu_data); $menu_data->has_children = true; $menu_data->submenu = $sub_menu; $menu_data->item_type = 'menu'; } $data[$post_title] = $menu_data; break; case 'taxonomy': $object_type = get_post_meta($item->ID, '_menu_item_object', TRUE); $term_data = get_term_by('id', $object_id, $object_type); $link = get_term_link((int) $term_data->term_id, $object_type); if (!$post_title) { $post_title = $term_data->name; } $menu_data = wptouch_create_menu_item($item->ID + WPTOUCH_ICON_CATEGORY_BASE, $depth, $post_title, 'link', false, 0, false, $link, $wptouch_pro->get_class_for_webapp_ignore($link)); if (wptouch_wordpress_menu_has_children($item->ID)) { $sub_menu = array(); wptouch_build_wordpress_menu_tree($item->ID, $depth + 1, $sub_menu, $exclude_disabled, $menu_data); $menu_data->has_children = true; $menu_data->submenu = $sub_menu; $menu_data->item_type = 'menu'; } $data[$post_title] = $menu_data; break; case 'custom': $menu_class = $wptouch_pro->get_class_for_webapp_ignore(get_post_meta($item->ID, '_menu_item_url', TRUE)); if ($menu_target == '_blank') { $menu_class = trim($menu_class) . ' external target'; } $menu_data = wptouch_create_menu_item($item->ID + WPTOUCH_ICON_CUSTOM_BASE, $depth, $post_title, 'link', false, 0, false, get_post_meta($item->ID, '_menu_item_url', TRUE), $menu_class); if (wptouch_wordpress_menu_has_children($item->ID)) { $sub_menu = array(); wptouch_build_wordpress_menu_tree($item->ID, $depth + 1, $sub_menu, $exclude_disabled, $menu_data); $menu_data->has_children = true; $menu_data->submenu = $sub_menu; $menu_data->item_type = 'menu'; } $data[$post_title] = $menu_data; break; } } } } }
function wptouch_page_get_icon() { global $wptouch_pro; if (wptouch_page_has_icon()) { if (wptouch_is_custom_page_template()) { $page_id = wptouch_get_custom_page_template_id(); } else { $page_id = get_the_ID(); } // If we're not in the loop yet, let's grab the first post and then rewind if (!$page_id) { if (have_posts()) { the_post(); rewind_posts(); $page_id = get_the_ID(); } } $settings = wptouch_get_settings(); if ($settings->custom_menu_name != 'none') { $menu_items = array(); wptouch_build_wordpress_menu_tree(0, 1, $menu_items, true); $icon = wptouch_recursive_find_page($page_id, $menu_items); if ($icon) { return $icon; } else { return wptouch_get_site_menu_icon(-1000000); } } else { return wptouch_get_site_menu_icon($page_id); } } else { return false; } }
function wptouch_build_menu_tree($parent = 0, $depth = 1, &$data, $exclude_disabled = false) { global $wpdb; global $wptouch_pro; if (wptouch_should_cache_menu_items($parent, $depth)) { $menu_data = wptouch_get_menu_cache_data($exclude_disabled); if ($menu_data) { $data = $menu_data; return; } } $settings = $wptouch_pro->get_settings(); if ($settings->custom_menu_name != 'none') { @wptouch_build_wordpress_menu_tree($parent, $depth, $data, $exclude_disabled); } else { if ($settings->menu_sort_order == 'alpha') { $sql = "SELECT * FROM {$wpdb->posts} WHERE post_type = 'page' AND post_parent = {$parent} AND post_status = 'publish' ORDER BY post_title"; } else { $sql = "SELECT * FROM {$wpdb->posts} WHERE post_type = 'page' AND post_parent = {$parent} AND post_status = 'publish' ORDER BY menu_order"; } $pages = $wpdb->get_results($sql); if ($pages) { if ($parent) { $page = get_post($parent); $menu_options = new stdClass(); $menu_options->page_id = $parent; $menu_options->depth = $depth; $menu_options->title = $page->post_title; $menu_options->item_type = 'link'; $menu_options->has_children = false; $menu_options->post_parent = $parent; $menu_options->duplicate_link = true; $menu_options->item_link = $wptouch_pro->convert_to_internal_url(get_permalink($parent)); $menu_options->item_class = $wptouch_pro->get_class_for_webapp_ignore($menu_options->item_link); $data[$page->ID] = $menu_options; } foreach ($pages as $page) { if ($exclude_disabled) { if (isset($settings->disabled_menu_items[$page->ID])) { continue; } } $menu_options = new stdClass(); $menu_options->title = $page->post_title; $menu_options->depth = $depth; $menu_options->page_id = $page->ID; if ($parent) { $menu_options->post_parent = $parent; } if (wptouch_page_has_children($page->ID)) { $menu_options->item_type = 'menu'; $menu_options->has_children = true; $submenu = array(); wptouch_build_menu_tree($page->ID, $depth + 1, $submenu, $exclude_disabled); if (count($submenu) == 1) { $menu_options->item_type = 'link'; $menu_options->has_children = false; $menu_options->item_link = $wptouch_pro->convert_to_internal_url(get_permalink($page->ID)); $menu_options->item_class = $wptouch_pro->get_class_for_webapp_ignore($menu_options->item_link); } else { $menu_options->submenu = $submenu; } } else { $menu_options->item_type = 'link'; $menu_options->has_children = false; $menu_options->item_link = $wptouch_pro->convert_to_internal_url(get_permalink($page->ID)); $menu_options->item_class = $wptouch_pro->get_class_for_webapp_ignore($menu_options->item_link); } $data[$page->ID] = $menu_options; } } } if (wptouch_should_cache_menu_items($parent, $depth)) { wptouch_set_menu_cache($exclude_disabled, $data); } }