From d357c80caf260c2458178664ebd85be52e36f3ac Mon Sep 17 00:00:00 2001 From: Ryan Boren <ryan@git.wordpress.org> Date: Wed, 24 Feb 2010 08:06:36 +0000 Subject: [PATCH] Reorg nav menu files. see #11817 git-svn-id: https://develop.svn.wordpress.org/trunk@13366 602fd350-edb4-49c9-b593-d223f7449a82 --- wp-admin/includes/nav-menu.php | 236 ++++++++ wp-admin/menu.php | 2 +- .../{custom-navigation.php => nav-menus.php} | 28 +- wp-includes/custom-navigation.php | 542 ------------------ wp-includes/general-template.php | 12 - wp-includes/nav-menu-template.php | 132 +++++ wp-includes/nav-menu.php | 178 ++++++ wp-settings.php | 2 + 8 files changed, 566 insertions(+), 566 deletions(-) create mode 100644 wp-admin/includes/nav-menu.php rename wp-admin/{custom-navigation.php => nav-menus.php} (94%) delete mode 100644 wp-includes/custom-navigation.php create mode 100644 wp-includes/nav-menu-template.php create mode 100644 wp-includes/nav-menu.php diff --git a/wp-admin/includes/nav-menu.php b/wp-admin/includes/nav-menu.php new file mode 100644 index 0000000000..f0cceaeb39 --- /dev/null +++ b/wp-admin/includes/nav-menu.php @@ -0,0 +1,236 @@ +<?php + +/*-----------------------------------------------------------------------------------*/ +/* Custom Navigation Functions */ +/* wp_custom_navigation_output() displays the menu in the back/frontend +/* wp_custom_nav_get_pages() +/* wp_custom_nav_get_categories() +/* wp_custom_navigation_default_sub_items() is a recursive sub menu item function +/*-----------------------------------------------------------------------------------*/ + +// Outputs All Pages and Sub Items +function wp_nav_menu_get_pages($counter, $type) { + + $pages_args = array( + 'child_of' => 0, + 'sort_order' => 'ASC', + 'sort_column' => 'post_title', + 'hierarchical' => 1, + 'exclude' => '', + 'include' => '', + 'meta_key' => '', + 'meta_value' => '', + 'authors' => '', + 'parent' => -1, + 'exclude_tree' => '', + 'number' => '', + 'offset' => 0 ); + + //GET all pages + $pages_array = get_pages($pages_args); + + $intCounter = $counter; + $parentli = $intCounter; + + if ( !$pages_array ) { + echo 'Not Found'; + return $intCounter; + } + + // Display Loop + foreach ( $pages_array as $post ) { + if ( $post->post_parent == 0 ) { + $post = wp_setup_nav_menu_item($post, 'page', $intCounter); + if ( $type == 'menu' ) { + ?> + + <li id="menu-<?php echo $intCounter; ?>" value="<?php echo $intCounter; ?>"> + <?php + wp_print_nav_menu_item($post, 'menu', $intCounter); + $parentli = $post->ID; + $intCounter++; + $intCounter = wp_custom_navigation_default_sub_items($post->ID, $intCounter, $parentli, 'pages', 'menu'); + ?> + </li> + + <?php + } elseif ( $type == 'default' ) { + // Sidebar Menu + ?> + <li> + <?php + wp_print_nav_menu_item($post, 'default'); + $parentli = $post->ID; + $intCounter++; + $intCounter = wp_nav_menu_sub_items($post->ID, $intCounter, $parentli, 'pages', 'default'); + ?> + </li> + + <?php + } + } + } + + return $intCounter; +} + +// Outputs All Categories and Sub Items +function wp_nav_menu_get_categories($counter, $type) { + + $category_args = array( + 'type' => 'post', + 'child_of' => 0, + 'orderby' => 'name', + 'order' => 'ASC', + 'hide_empty' => false, + 'include_last_update_time' => false, + 'hierarchical' => 1, + 'exclude' => '', + 'include' => '', + 'number' => '', + 'pad_counts' => false ); + + $intCounter = $counter; + + // Get all categories + $categories_array = get_categories($category_args); + + if ( !$categories_array ) { + _e('Not Found'); + return $intCounter; + } + + // Display Loop + foreach ( $categories_array as $cat_item ) { + if ( $cat_item->parent == 0 ) { + $cat_item = wp_setup_nav_menu_item($cat_item, 'category', $intCounter); + // Custom Menu + if ( $type == 'menu' ) { + ?> + + <li id="menu-<?php echo $intCounter; ?>" value="<?php echo $intCounter; ?>"> + <?php + wp_print_nav_menu_item($cat_item, 'menu'); + $parentli = $cat_item->cat_ID; + $intCounter++; + $intCounter = wp_nav_menu_sub_items($cat_item->cat_ID, $intCounter, $parentli, 'categories', 'menu'); + ?> + + </li> + + <?php + } elseif ( $type == 'default' ) { + // Sidebar Menu + ?> + <li> + <?php + wp_print_nav_menu_item($cat_item, 'default'); + $parentli = $cat_item->cat_ID; + $intCounter++; + $intCounter = wp_nav_menu_sub_items($cat_item->cat_ID, $intCounter, $parentli, 'categories', 'default'); + ?> + + </li> + + <?php + } + } + } + + return $intCounter; +} + +//RECURSIVE Sub Menu Items of default categories and pages +function wp_nav_menu_sub_items($childof, $intCounter, $parentli, $type, $output_type) { + + $counter = $intCounter; + + // Custom Menu + if ( $output_type == 'menu' ) { + $sub_args = array( + 'child_of' => $childof, + 'hide_empty' => false, + 'parent' => $childof); + } elseif ( $output_type == 'default' ) { + // Sidebar Menu + $sub_args = array( + 'child_of' => $childof, + 'hide_empty' => false, + 'parent' => $childof); + } + + if ( $type == 'categories' ) { + // Get Sub Category Items + $item_type = 'category'; + $sub_array = get_categories($sub_args); + } elseif ($type == 'pages') { + // Get Sub Page Items + $item_type = 'page'; + $sub_array = get_pages($sub_args); + } else { + $item_type = 'custom'; + $sub_array = array(); + } + + + if ( $sub_array ) { + ?> + <ul id="sub-custom-nav-<?php echo $type ?>"> + + <?php + // Display Loop + foreach ( $sub_array as $sub_item ) { + $sub_item = wp_setup_nav_menu_item($sub_item, $item_type, $counter); + + if ( $output_type == 'menu' ) { + ?> + <li id="menu-<?php echo $counter; ?>" value="<?php echo $counter; ?>"> + <?php + wp_print_nav_menu_item($sub_item, 'menu'); + $counter++; + $counter = wp_nav_menu_sub_items($sub_item->ID, $counter, $sub_item->ID, $type, 'menu'); + ?> + + </li> + <?php + } elseif ( $output_type == 'default' ) { + // Sidebar Menu + ?> + <li> + <?php + wp_print_nav_menu_item($sub_item, 'default'); + //$counter++; + $counter = wp_nav_menu_sub_items($sub_item->ID, $counter, $sub_item->ID, $type, 'default'); + ?> + </li> + + <?php + } + } + ?> + + </ul> + + <?php + } + + return $counter; +} + +function wp_nav_menu_setup($override = false) { + // Custom Navigation Menu Setup + + // Override for menu descriptions + update_option('wp_settings_custom_nav_advanced_options', 'yes'); + + $menus = wp_get_nav_menus(); + if ( !empty( $menus ) ) { + foreach ( $menus as $menu ) { + wp_delete_nav_menu( $menu->term_id ); + } + } + + wp_create_nav_menu( __('Main') ); +} + +?> \ No newline at end of file diff --git a/wp-admin/menu.php b/wp-admin/menu.php index bbe2f2582e..9f8bc384d1 100644 --- a/wp-admin/menu.php +++ b/wp-admin/menu.php @@ -108,7 +108,7 @@ $menu[60] = array( __('Appearance'), 'switch_themes', 'themes.php', '', 'menu-to $submenu['themes.php'][5] = array(__('Themes'), 'switch_themes', 'themes.php'); $submenu['themes.php'][10] = array(_x('Editor', 'theme editor'), 'edit_themes', 'theme-editor.php'); $submenu['themes.php'][15] = array(__('Add New Themes'), 'install_themes', 'theme-install.php'); - $submenu['themes.php'][20] = array(__('Menus'), 'switch_themes', 'custom-navigation.php'); + $submenu['themes.php'][20] = array(__('Menus'), 'switch_themes', 'nav-menus.php'); $update_plugins = get_site_transient( 'update_plugins' ); $update_count = 0; diff --git a/wp-admin/custom-navigation.php b/wp-admin/nav-menus.php similarity index 94% rename from wp-admin/custom-navigation.php rename to wp-admin/nav-menus.php index ac6164cdcd..3210160691 100644 --- a/wp-admin/custom-navigation.php +++ b/wp-admin/nav-menus.php @@ -27,7 +27,7 @@ wp_enqueue_script( 'jquery-autocomplete' ); wp_enqueue_script( 'custom-navigation-php-functions' ); require_once('admin-header.php'); -require_once (ABSPATH . WPINC . '/custom-navigation.php'); +require_once(ABSPATH . 'wp-admin/includes/nav-menu.php'); function wp_reset_nav_menu() { wp_custom_navigation_setup(true); @@ -171,8 +171,8 @@ if ( isset($_POST['reset_wp_menu']) && ! $updated ) { <div class="wrap"> <?php screen_icon(); ?> <h2 class="maintitle"><?php esc_html_e('Menus') ?></h2> - <div class="hide-if-js error"><p><?php _e('You do not have JavaScript enabled in your browser. Please enable it to access the Menus functionality.'); ?></p></div> - <div class="hide-if-no-js"> + + <div id="no-js"><h3><?php _e('You do not have JavaScript enabled in your browser. Please enable it to access the Menus functionality.'); ?></h3></div> <div id="pages-left"> <ul class="subsubsub"> <?php if ( ! empty( $custom_menus ) ) { @@ -182,7 +182,7 @@ if ( isset($_POST['reset_wp_menu']) && ! $updated ) { if ( ( $menu_id_in_edit == $menu->term_id ) || ( $menu_selected_id == $menu->term_id ) ) { ?> <li><?php echo esc_html( $menu->name ) . $sep; ?></li> <?php } else { ?> - <li><a href='custom-navigation.php?edit_menu=<?php echo esc_attr($menu->term_id); ?>'><?php echo esc_html( $menu->name ); ?></a><?php echo $sep; ?></li> + <li><a href='nav-menus.php?edit_menu=<?php echo esc_attr($menu->term_id); ?>'><?php echo esc_html( $menu->name ); ?></a><?php echo $sep; ?></li> <?php } } } else { ?> @@ -200,7 +200,7 @@ if ( isset($_POST['reset_wp_menu']) && ! $updated ) { echo '<div id="message-enabled" class="error fade below-h2"><p><strong>' . __('Menu editing has not been Enabled yet. Please enable it in order to use it -------->') . '</strong></p></div>'; ?> <?php echo $messagesdiv; ?> - <form onsubmit="updatepostdata()" action="custom-navigation.php" method="post" enctype="multipart/form-data"> + <form onsubmit="updatepostdata()" action="nav-menus.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="licount" id="licount" value="0" /> <input type="hidden" name="menu_id_in_edit" id="menu_id_in_edit" value="<?php echo esc_attr($menu_selected_id); ?>" /> @@ -223,7 +223,7 @@ if ( isset($_POST['reset_wp_menu']) && ! $updated ) { // SET output type $output_type = "backend"; // MAIN OUTPUT FUNCTION - wp_custom_navigation_output( 'type='.$output_type.'&name='.$menu_title.'&id='.$menu_selected_id ); + wp_print_nav_menu( 'type='.$output_type.'&name='.$menu_title.'&id='.$menu_selected_id ); } ?> @@ -382,7 +382,7 @@ if ( isset($_POST['reset_wp_menu']) && ! $updated ) { <?php $intCounter = 0; //Get default Pages - $intCounter = wp_custom_nav_get_pages($intCounter,'default'); + $intCounter = wp_nav_menu_get_pages($intCounter,'default'); ?> </ul> @@ -462,7 +462,7 @@ if ( isset($_POST['reset_wp_menu']) && ! $updated ) { <ul id="existing-categories" class="list"> <?php // Get default Categories - $intCounter = wp_custom_nav_get_categories($intCounter, 'default'); + $intCounter = wp_nav_menu_get_categories($intCounter, 'default'); ?> </ul> @@ -489,11 +489,17 @@ if ( isset($_POST['reset_wp_menu']) && ! $updated ) { <div class="fix"></div> </div> </div><!-- /.widgets-holder-wrap --> - </div><!-- /.hide-if-no-js --> - </div> + + </div> </div> -<div id="dialog-confirm" style="display:none;" title="<?php esc_attr_e('Edit Menu Item'); ?>"> +<script type="text/javascript"> + document.getElementById('pages-left').style.display='block'; + document.getElementById('menu-right').style.display='block'; + document.getElementById('no-js').style.display='none'; +</script> + +<div id="dialog-confirm" title="<?php esc_attr_e('Edit Menu Item'); ?>"> </label><input id="edittitle" type="text" name="edittitle" value="" /><label class="editlabel" for="edittitle"><?php _e('Menu Title'); ?></label><br /> <input id="editlink" type="text" name="editlink" value="" /><label class="editlabel" for="editlink"><?php _e('URL'); ?></label><br /> <input id="editanchortitle" type="text" name="editanchortitle" value="" /><label class="editlabel" for="editanchortitle"><?php _e('Link Title'); ?></label><br /> diff --git a/wp-includes/custom-navigation.php b/wp-includes/custom-navigation.php deleted file mode 100644 index 21cf6e047d..0000000000 --- a/wp-includes/custom-navigation.php +++ /dev/null @@ -1,542 +0,0 @@ -<?php -/** - * WordPress Administration Custom Navigation - * General Functions - * - * @author Jeffikus <pearce.jp@gmail.com> - * @version 1.1.0 - * - * @package WordPress - * @subpackage Administration - */ - -function wp_custom_navigation_setup($override = false) { - // Custom Navigation Menu Setup - - // Override for menu descriptions - update_option('wp_settings_custom_nav_advanced_options', 'yes'); - - $menus = wp_get_nav_menus(); - if ( !empty( $menus ) ) { - foreach ( $menus as $menu ) { - wp_delete_nav_menu( $menu->term_id ); - } - } - - wp_create_nav_menu( __('Main') ); -} - -function wp_delete_nav_menu( $menu_id ) { - $menu_id = (int) $menu_id; - if ( !$menu_id ) - return false; - - $menu_objects = get_objects_in_term( $menu_id, 'nav_menu' ); - if ( !empty( $menu_objects ) ) { - foreach ( $menu_objects as $item ) { - wp_delete_post( $item ); - } - } - wp_delete_term( $menu_id, 'nav_menu' ); -} - -function wp_create_nav_menu( $menu_name ) { - $menu_exists = get_term_by( 'name', $menu_name, 'nav_menu' ); - - if ( $menu_exists ) - return WP_Error('menu_exists', sprintf( __('A menu named "%s" already exists; please try another name.'), $menu_exists->name )); - - $menu = wp_insert_term( $menu_name, 'nav_menu' ); - if ( is_wp_error($menu) ) - return $menu; - - return get_term( $menu['term_id'], 'nav_menu'); -} - -function wp_get_nav_menu( $menu ) { - return get_term( (int) $menu, 'nav_menu'); -} - -function wp_get_nav_menus() { - return get_terms( 'nav_menu', array( 'hide_empty' => false ) ); -} - -function wp_get_nav_menu_items( $menu, $args = array() ) { - $items = get_objects_in_term( (int) $menu, 'nav_menu' ); - - if ( ! empty( $items ) ) { - $defaults = array( 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item', 'post_status' => 'publish', 'output' => ARRAY_A, 'output_key' => 'menu_order' ); - $args = wp_parse_args($args, $defaults); - if ( count( $items ) > 1 ) - $args['include'] = implode( ',', $items ); - else - $args['include'] = $items[0]; - - $items = get_posts( $args ); - - if ( ARRAY_A == $args['output'] ) { - $output = array(); - foreach ( $items as $item ) { - $output[$item->$args['output_key']] = $item; - } - unset($items); - ksort($output); - return $output; - } - } - return $items; -} - -function setup_menu_item($menu_item, $type = 'item', $position = 0) { - global $parent_menu_order; - - if ( 'item' == $type ) { - $menu_item->type = get_post_meta($menu_item->ID, 'menu_type', true); - $menu_item->object_id = get_post_meta($menu_item->ID, 'object_id', true); - if ( isset( $parent_menu_order[ $menu_item->post_parent ] ) ) - $menu_item->parent_item = $parent_menu_order[ $menu_item->post_parent ]; - else - $menu_item->parent_item = 0; - } elseif ( 'category' == $type ) { - $menu_item->type = $type; - $menu_item->object_id = $menu_item->term_id; - $menu_item->ID = $menu_item->term_id; - $menu_item->parent_item = $menu_item->parent; - $menu_item->menu_order = $position; - } elseif ( 'page' == $type ) { - $menu_item->type = $type; - $menu_item->object_id = $menu_item->ID; - $menu_item->parent_item = $menu_item->post_parent; - $menu_item->menu_order = $position; - } - - switch ( $menu_item->type ) { - // Page Menu Item - case 'page': - if ( $menu_item->guid == '' ) - $menu_item->link = get_permalink( $menu_item->object_id ); - else - $menu_item->link = $menu_item->guid; - - if ( $menu_item->post_title == '' ) - $menu_item->title = htmlentities( get_the_title( $menu_item->object_id ) ); - else - $menu_item->title = htmlentities( $menu_item->post_title ); - - if ( $menu_item->post_content == '' ) - $menu_item->description = htmlentities( get_post_meta( $menu_item->ID, 'page-description', true ) ); - else - $menu_item->description = htmlentities( $menu_item->post_content ); - $menu_item->target = ''; - $menu_item->append = 'Page'; - break; - // Category Menu Item - case 'category': - if ( empty($menu_item->guid) ) - $menu_item->link = get_category_link( $menu_item->object_id ); - else - $menu_item->link = $menu_item->guid; - - if ( empty($menu_item->post_title) ) { - $title_raw = get_category( $menu_item->object_id ); - $menu_item->title = htmlentities($title_raw->cat_name); - } else { - $menu_item->title = htmlentities( $menu_item->post_title ); - } - - if ( empty($menu_item->post_content) ) - $menu_item->description = htmlentities( strip_tags( category_description( $menu_item->object_id ) ) ); - else - $menu_item->description = htmlentities( $menu_item->post_content ); - $menu_item->target = ''; - $menu_item->append = 'Category'; - break; - default: - // Custom Menu Item - $menu_item->link = $menu_item->guid; - $menu_item->title = htmlentities( $menu_item->post_title ); - $menu_item->description = htmlentities( $menu_item->post_content ); - $menu_item->target = 'target="_blank"'; - $menu_item->append = 'Custom'; - break; - } - - $menu_item->li_class = ''; - global $wp_query; - if ( $menu_item->ID == $wp_query->get_queried_object_id() ) - $menu_item->li_class = 'class="current_page_item"'; - - $menu_item->anchor_title = ''; -/* @todo: update to use tax/post data - - //SET anchor title - if (isset($wp_custom_nav_menu_items->custom_anchor_title)) { - $anchor_title = htmlentities($wp_custom_nav_menu_items->custom_anchor_title); - } - else { - $anchor_title = $title; - } - - if ($queried_id == $wp_custom_nav_menu_items->post_id) { - $li_class = 'class="current_page_item"'; - } - - if (isset($wp_custom_nav_menu_items->new_window)) { - if ($wp_custom_nav_menu_items->new_window > 0) { - $target = 'target="_blank"'; - } - else { - $target = ''; - } - } -*/ - - return $menu_item; -} - -function output_menu_item($menu_item, $context, $args = array() ) { - switch( $context ) { - case 'backend': - case 'menu': -?> - <dl> - <dt> - <span class="title"><?php echo esc_html($menu_item->title); ?></span> - <span class="controls"> - <span class="type"><?php echo esc_html($menu_item->type); ?></span> - <a id="edit<?php echo $menu_item->menu_order; ?>" onclick="edititem(<?php echo $menu_item->menu_order; ?>)" value="<?php echo $menu_item->menu_order; ?>"><img class="edit" alt="<?php esc_attr_e('Edit Menu Item'); ?>" title="<?php esc_attr_e('Edit Menu Item'); ?>" src="<?php echo admin_url('images/ico-edit.png'); ?>" /></a> - <a id="remove<?php echo $menu_item->menu_order; ?>" onclick="removeitem(<?php echo $menu_item->menu_order; ?>)" value="<?php echo $menu_item->menu_order; ?>"><img class="remove" alt="<?php esc_attr_e('Remove from Custom Menu'); ?>" title="<?php esc_attr_e('Remove from Custom Menu'); ?>" src="<?php echo admin_url('images/ico-close.png'); ?>" /></a> - <a id="view<?php echo $menu_item->menu_order; ?>" target="_blank" href="<?php echo $menu_item->link; ?>"><img alt="<?php esc_attr_e('View Page'); ?>" title="<?php esc_attr_e('View Page'); ?>" src="<?php echo admin_url('images/ico-viewpage.png'); ?>" /></a> - </span> - </dt> - </dl> - <?php if ( 'backend' == $context ) { ?> - <a><span class=""></span></a> - <?php } else { ?> - <a class="hide" href="<?php echo $menu_item->link; ?>"><?php echo $menu_item->title; ?></a> - <?php } ?> - <input type="hidden" name="dbid<?php echo $menu_item->menu_order; ?>" id="dbid<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->ID; ?>" /> - <input type="hidden" name="postmenu<?php echo $menu_item->menu_order; ?>" id="postmenu<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->ID; ?>" /> - <input type="hidden" name="parent<?php echo $menu_item->menu_order; ?>" id="parent<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->parent_item; ?>" /> - <input type="hidden" name="title<?php echo $menu_item->menu_order; ?>" id="title<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->title; ?>" /> - <input type="hidden" name="linkurl<?php echo $menu_item->menu_order; ?>" id="linkurl<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->link; ?>" /> - <input type="hidden" name="description<?php echo $menu_item->menu_order; ?>" id="description<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->description; ?>" /> - <input type="hidden" name="icon<?php echo $menu_item->menu_order; ?>" id="icon<?php echo $menu_item->menu_order; ?>" value="0" /> - <input type="hidden" name="position<?php echo $menu_item->menu_order; ?>" id="position<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->menu_order; ?>" /> - <input type="hidden" name="linktype<?php echo $menu_item->menu_order; ?>" id="linktype<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->type; ?>" /> - <input type="hidden" name="anchortitle<?php echo $menu_item->menu_order; ?>" id="anchortitle<?php echo $menu_item->menu_order; ?>" value="<?php echo esc_html( $menu_item->post_excerpt ); ?>" /> - <input type="hidden" name="newwindow<?php echo $menu_item->menu_order; ?>" id="newwindow<?php echo $menu_item->menu_order; ?>" value="<?php echo ( '' == $menu_item->post_content_filtered ? '0' : '1' ); ?>" /> -<?php - break; - - case 'frontend': - // Override for menu descriptions - $advanced_option_descriptions = get_option('wp_settings_custom_nav_advanced_options'); - if ( $advanced_option_descriptions == 'no' ) - $args['desc'] = 2; -?> - <a title="<?php echo $menu_item->anchor_title; ?>" href="<?php echo $menu_item->link; ?>" <?php echo $menu_item->target; ?>><?php echo $args['before_title'] . $menu_item->title . $args['after_title']; ?><?php - - if ( $advanced_option_descriptions == 'no' ) { - // 2 widget override do NOT display descriptions - // 1 widget override display descriptions - // 0 widget override not set - if ( ($args['desc'] == 1) || ($args['desc'] == 0) ) { - ?><span class="nav-description"><?php echo $menu_item->description; ?></span><?php - } - } else { - // 2 widget override do NOT display descriptions - // 1 widget override display descriptions - // 0 widget override not set - if ( $args['desc'] == 1 ) { - ?><span class="nav-description"><?php echo $menu_item->description; ?></span><?php - } - } - ?></a> -<?php - break; - - case 'default': - $templatedir = get_bloginfo('url'); -?> - <dl> - <dt> - <span class="title"><?php echo $menu_item->title; ?></span> <a onclick="appendToList('<?php echo $templatedir; ?>','<?php echo $menu_item->append; ?>','<?php echo $menu_item->title; ?>','<?php echo $menu_item->link; ?>','<?php echo $menu_item->ID; ?>','<?php echo $menu_item->parent_item ?>','<?php echo $menu_item->description; ?>')" name="<?php echo $menu_item->title; ?>" value="<?php echo $menu_item->link; ?>"><img alt="<?php esc_attr_e('Add to Custom Menu'); ?>" title="<?php esc_attr_e('Add to Custom Menu'); ?>" src="<?php echo admin_url('images/ico-add.png'); ?>" /></a> </dt> - </dl> -<?php - break; - } -} - -/*-----------------------------------------------------------------------------------*/ -/* Custom Navigation Functions */ -/* wp_custom_navigation_output() displays the menu in the back/frontend -/* wp_custom_nav_get_pages() -/* wp_custom_nav_get_categories() -/* wp_custom_navigation_default_sub_items() is a recursive sub menu item function -/*-----------------------------------------------------------------------------------*/ - -/*-----------------------------------------------------------------------------------*/ -/* Main Output Function -/* args list -/* type - frontend or backend -/* name - name of your menu -/* id - id of menu in db -/* desc - 1 = show descriptions, 2 = dont show descriptions -/* before_title - html before title is outputted in <a> tag -/* after_title - html after title is outputted in <a> tag -/*-----------------------------------------------------------------------------------*/ -function wp_custom_navigation_output( $args = array() ) { - // Defaults - $defaults = array( 'type' => 'frontend', 'name' => 'Menu 1', 'id' => 0, 'desc' => 2, 'before_title' => '', 'after_title' => ''); - - $args = wp_parse_args($args, $defaults); - extract($args, EXTR_SKIP); - - $menu_items = wp_get_nav_menu_items( $id ); - - $parent_stack = array(); - $current_parent = 0; - $parent_menu_order = array(); - // Setup parentage - foreach ( $menu_items as $menu_item ) { - $parent_menu_order[ $menu_item->ID ] = $menu_item->menu_order; - } - - // Display Loop - foreach ( $menu_items as $key => $menu_item ) { - $menu_item = setup_menu_item($menu_item); - // List Items - ?><li id="menu-<?php echo $menu_item->ID; ?>" value="<?php echo $menu_item->ID; ?>" <?php echo $menu_item->li_class; ?>><?php - output_menu_item($menu_item, $type, $args); - // Indent children - $last_item = ( count( $menu_items ) == $menu_item->menu_order ); - if ( $last_item || $current_parent != $menu_items[ $key + 1 ]->post_parent ) { - if ( $last_item || in_array( $menu_items[ $key + 1 ]->post_parent, $parent_stack ) ) { ?> - </li> -<?php while ( !empty( $parent_stack ) && ($last_item || $menu_items[ $key + 1 ]->post_parent != $current_parent ) ) { ?> - </ul> - </li> -<?php $current_parent = array_pop( $parent_stack ); - } ?> -<?php } else { - array_push( $parent_stack, $current_parent ); - $current_parent = $menu_item->ID; ?> - <ul> -<?php } - } else { ?> - </li> -<?php } - } -} - -// Outputs All Pages and Sub Items -function wp_custom_nav_get_pages($counter, $type) { - - $pages_args = array( - 'child_of' => 0, - 'sort_order' => 'ASC', - 'sort_column' => 'post_title', - 'hierarchical' => 1, - 'exclude' => '', - 'include' => '', - 'meta_key' => '', - 'meta_value' => '', - 'authors' => '', - 'parent' => -1, - 'exclude_tree' => '', - 'number' => '', - 'offset' => 0 ); - - //GET all pages - $pages_array = get_pages($pages_args); - - $intCounter = $counter; - $parentli = $intCounter; - - if ( !$pages_array ) { - echo 'Not Found'; - return $intCounter; - } - - // Display Loop - foreach ( $pages_array as $post ) { - if ( $post->post_parent == 0 ) { - $post = setup_menu_item($post, 'page', $intCounter); - if ( $type == 'menu' ) { - ?> - - <li id="menu-<?php echo $intCounter; ?>" value="<?php echo $intCounter; ?>"> - <?php - output_menu_item($post, 'menu', $intCounter); - $parentli = $post->ID; - $intCounter++; - $intCounter = wp_custom_navigation_default_sub_items($post->ID, $intCounter, $parentli, 'pages', 'menu'); - ?> - </li> - - <?php - } elseif ( $type == 'default' ) { - // Sidebar Menu - ?> - <li> - <?php - output_menu_item($post, 'default'); - $parentli = $post->ID; - $intCounter++; - $intCounter = wp_custom_navigation_default_sub_items($post->ID, $intCounter, $parentli, 'pages', 'default'); - ?> - </li> - - <?php - } - } - } - - return $intCounter; -} - -// Outputs All Categories and Sub Items -function wp_custom_nav_get_categories($counter, $type) { - - $category_args = array( - 'type' => 'post', - 'child_of' => 0, - 'orderby' => 'name', - 'order' => 'ASC', - 'hide_empty' => false, - 'include_last_update_time' => false, - 'hierarchical' => 1, - 'exclude' => '', - 'include' => '', - 'number' => '', - 'pad_counts' => false ); - - $intCounter = $counter; - - // Get all categories - $categories_array = get_categories($category_args); - - if ( !$categories_array ) { - _e('Not Found'); - return $intCounter; - } - - // Display Loop - foreach ( $categories_array as $cat_item ) { - if ( $cat_item->parent == 0 ) { - $cat_item = setup_menu_item($cat_item, 'category', $intCounter); - // Custom Menu - if ( $type == 'menu' ) { - ?> - - <li id="menu-<?php echo $intCounter; ?>" value="<?php echo $intCounter; ?>"> - <?php - output_menu_item($cat_item, 'menu'); - $parentli = $cat_item->cat_ID; - $intCounter++; - $intCounter = wp_custom_navigation_default_sub_items($cat_item->cat_ID, $intCounter, $parentli, 'categories', 'menu'); - ?> - - </li> - - <?php - } elseif ( $type == 'default' ) { - // Sidebar Menu - ?> - <li> - <?php - output_menu_item($cat_item, 'default'); - $parentli = $cat_item->cat_ID; - $intCounter++; - $intCounter = wp_custom_navigation_default_sub_items($cat_item->cat_ID, $intCounter, $parentli, 'categories', 'default'); - ?> - - </li> - - <?php - } - } - } - - return $intCounter; -} - -//RECURSIVE Sub Menu Items of default categories and pages -function wp_custom_navigation_default_sub_items($childof, $intCounter, $parentli, $type, $output_type) { - - $counter = $intCounter; - - // Custom Menu - if ( $output_type == 'menu' ) { - $sub_args = array( - 'child_of' => $childof, - 'hide_empty' => false, - 'parent' => $childof); - } elseif ( $output_type == 'default' ) { - // Sidebar Menu - $sub_args = array( - 'child_of' => $childof, - 'hide_empty' => false, - 'parent' => $childof); - } - - if ( $type == 'categories' ) { - // Get Sub Category Items - $item_type = 'category'; - $sub_array = get_categories($sub_args); - } elseif ($type == 'pages') { - // Get Sub Page Items - $item_type = 'page'; - $sub_array = get_pages($sub_args); - } else { - $item_type = 'custom'; - $sub_array = array(); - } - - - if ( $sub_array ) { - ?> - <ul id="sub-custom-nav-<?php echo $type ?>"> - - <?php - // Display Loop - foreach ( $sub_array as $sub_item ) { - $sub_item = setup_menu_item($sub_item, $item_type, $counter); - - if ( $output_type == 'menu' ) { - ?> - <li id="menu-<?php echo $counter; ?>" value="<?php echo $counter; ?>"> - <?php - output_menu_item($sub_item, 'menu'); - $counter++; - $counter = wp_custom_navigation_default_sub_items($sub_item->ID, $counter, $sub_item->ID, $type, 'menu'); - ?> - - </li> - <?php - } elseif ( $output_type == 'default' ) { - // Sidebar Menu - ?> - <li> - <?php - output_menu_item($sub_item, 'default'); - //$counter++; - $counter = wp_custom_navigation_default_sub_items($sub_item->ID, $counter, $sub_item->ID, $type, 'default'); - ?> - </li> - - <?php - } - } - ?> - - </ul> - - <?php - } - - return $counter; -} - -?> diff --git a/wp-includes/general-template.php b/wp-includes/general-template.php index 84045b3b3b..0b2db652f0 100644 --- a/wp-includes/general-template.php +++ b/wp-includes/general-template.php @@ -2215,16 +2215,4 @@ function get_the_generator( $type = '' ) { return apply_filters( "get_the_generator_{$type}", $gen, $type ); } -/** - * Outputs a navigation menu. - * - * @since 3.0.0 - * - * @param array $args Arguments - */ -function wp_nav_menu( $args = array() ) { - require_once (ABSPATH . WPINC . '/custom-navigation.php'); - wp_custom_navigation_output($args); -} - ?> diff --git a/wp-includes/nav-menu-template.php b/wp-includes/nav-menu-template.php new file mode 100644 index 0000000000..ab894abcc8 --- /dev/null +++ b/wp-includes/nav-menu-template.php @@ -0,0 +1,132 @@ +<?php + +/** + * Outputs a navigation menu. + * + * @since 3.0.0 + * + * @param array $args Arguments + */ +function wp_nav_menu( $args = array() ) { + wp_print_nav_menu($args); +} + +function wp_print_nav_menu( $args = array() ) { + // Defaults + $defaults = array( 'type' => 'frontend', 'name' => 'Menu 1', 'id' => 0, 'desc' => 2, 'before_title' => '', 'after_title' => ''); + + $args = wp_parse_args($args, $defaults); + extract($args, EXTR_SKIP); + + $menu_items = wp_get_nav_menu_items( $id ); + + $parent_stack = array(); + $current_parent = 0; + $parent_menu_order = array(); + // Setup parentage + foreach ( $menu_items as $menu_item ) { + $parent_menu_order[ $menu_item->ID ] = $menu_item->menu_order; + } + + // Display Loop + foreach ( $menu_items as $key => $menu_item ) { + $menu_item = wp_setup_nav_menu_item($menu_item); + // List Items + ?><li id="menu-<?php echo $menu_item->ID; ?>" value="<?php echo $menu_item->ID; ?>" <?php echo $menu_item->li_class; ?>><?php + wp_print_nav_menu_item($menu_item, $type, $args); + // Indent children + $last_item = ( count( $menu_items ) == $menu_item->menu_order ); + if ( $last_item || $current_parent != $menu_items[ $key + 1 ]->post_parent ) { + if ( $last_item || in_array( $menu_items[ $key + 1 ]->post_parent, $parent_stack ) ) { ?> + </li> +<?php while ( !empty( $parent_stack ) && ($last_item || $menu_items[ $key + 1 ]->post_parent != $current_parent ) ) { ?> + </ul> + </li> +<?php $current_parent = array_pop( $parent_stack ); + } ?> +<?php } else { + array_push( $parent_stack, $current_parent ); + $current_parent = $menu_item->ID; ?> + <ul> +<?php } + } else { ?> + </li> +<?php } + } +} + +function wp_print_nav_menu_item($menu_item, $context, $args = array() ) { + switch ( $context ) { + case 'backend': + case 'menu': +?> + <dl> + <dt> + <span class="title"><?php echo esc_html($menu_item->title); ?></span> + <span class="controls"> + <span class="type"><?php echo esc_html($menu_item->type); ?></span> + <a id="edit<?php echo $menu_item->menu_order; ?>" onclick="edititem(<?php echo $menu_item->menu_order; ?>)" value="<?php echo $menu_item->menu_order; ?>"><img class="edit" alt="<?php esc_attr_e('Edit Menu Item'); ?>" title="<?php esc_attr_e('Edit Menu Item'); ?>" src="<?php echo admin_url('images/ico-edit.png'); ?>" /></a> + <a id="remove<?php echo $menu_item->menu_order; ?>" onclick="removeitem(<?php echo $menu_item->menu_order; ?>)" value="<?php echo $menu_item->menu_order; ?>"><img class="remove" alt="<?php esc_attr_e('Remove from Custom Menu'); ?>" title="<?php esc_attr_e('Remove from Custom Menu'); ?>" src="<?php echo admin_url('images/ico-close.png'); ?>" /></a> + <a id="view<?php echo $menu_item->menu_order; ?>" target="_blank" href="<?php echo $menu_item->link; ?>"><img alt="<?php esc_attr_e('View Page'); ?>" title="<?php esc_attr_e('View Page'); ?>" src="<?php echo admin_url('images/ico-viewpage.png'); ?>" /></a> + </span> + </dt> + </dl> + <?php if ( 'backend' == $context ) { ?> + <a><span class=""></span></a> + <?php } else { ?> + <a class="hide" href="<?php echo $menu_item->link; ?>"><?php echo $menu_item->title; ?></a> + <?php } ?> + <input type="hidden" name="dbid<?php echo $menu_item->menu_order; ?>" id="dbid<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->ID; ?>" /> + <input type="hidden" name="postmenu<?php echo $menu_item->menu_order; ?>" id="postmenu<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->ID; ?>" /> + <input type="hidden" name="parent<?php echo $menu_item->menu_order; ?>" id="parent<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->parent_item; ?>" /> + <input type="hidden" name="title<?php echo $menu_item->menu_order; ?>" id="title<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->title; ?>" /> + <input type="hidden" name="linkurl<?php echo $menu_item->menu_order; ?>" id="linkurl<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->link; ?>" /> + <input type="hidden" name="description<?php echo $menu_item->menu_order; ?>" id="description<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->description; ?>" /> + <input type="hidden" name="icon<?php echo $menu_item->menu_order; ?>" id="icon<?php echo $menu_item->menu_order; ?>" value="0" /> + <input type="hidden" name="position<?php echo $menu_item->menu_order; ?>" id="position<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->menu_order; ?>" /> + <input type="hidden" name="linktype<?php echo $menu_item->menu_order; ?>" id="linktype<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->type; ?>" /> + <input type="hidden" name="anchortitle<?php echo $menu_item->menu_order; ?>" id="anchortitle<?php echo $menu_item->menu_order; ?>" value="<?php echo esc_html( $menu_item->post_excerpt ); ?>" /> + <input type="hidden" name="newwindow<?php echo $menu_item->menu_order; ?>" id="newwindow<?php echo $menu_item->menu_order; ?>" value="<?php echo ( '' == $menu_item->post_content_filtered ? '0' : '1' ); ?>" /> +<?php + break; + + case 'frontend': + // Override for menu descriptions + $advanced_option_descriptions = get_option('wp_settings_custom_nav_advanced_options'); + if ( $advanced_option_descriptions == 'no' ) + $args['desc'] = 2; +?> + <a title="<?php echo $menu_item->anchor_title; ?>" href="<?php echo $menu_item->link; ?>" <?php echo $menu_item->target; ?>><?php echo $args['before_title'] . $menu_item->title . $args['after_title']; ?><?php + + if ( $advanced_option_descriptions == 'no' ) { + // 2 widget override do NOT display descriptions + // 1 widget override display descriptions + // 0 widget override not set + if ( ($args['desc'] == 1) || ($args['desc'] == 0) ) { + ?><span class="nav-description"><?php echo $menu_item->description; ?></span><?php + } + } else { + // 2 widget override do NOT display descriptions + // 1 widget override display descriptions + // 0 widget override not set + if ( $args['desc'] == 1 ) { + ?><span class="nav-description"><?php echo $menu_item->description; ?></span><?php + } + } + ?></a> +<?php + break; + + case 'default': + $templatedir = get_bloginfo('url'); +?> + <dl> + <dt> + <span class="title"><?php echo $menu_item->title; ?></span> <a onclick="appendToList('<?php echo $templatedir; ?>','<?php echo $menu_item->append; ?>','<?php echo $menu_item->title; ?>','<?php echo $menu_item->link; ?>','<?php echo $menu_item->ID; ?>','<?php echo $menu_item->parent_item ?>','<?php echo $menu_item->description; ?>')" name="<?php echo $menu_item->title; ?>" value="<?php echo $menu_item->link; ?>"><img alt="<?php esc_attr_e('Add to Custom Menu'); ?>" title="<?php esc_attr_e('Add to Custom Menu'); ?>" src="<?php echo admin_url('images/ico-add.png'); ?>" /></a> </dt> + </dl> +<?php + break; + } +} + +?> \ No newline at end of file diff --git a/wp-includes/nav-menu.php b/wp-includes/nav-menu.php new file mode 100644 index 0000000000..085ef4f030 --- /dev/null +++ b/wp-includes/nav-menu.php @@ -0,0 +1,178 @@ +<?php +/** + * Navigation Menu functions + * + * @package WordPress + * @subpackage Navigation Menus + * @since 3.0.0 + */ + +function wp_delete_nav_menu( $menu_id ) { + $menu_id = (int) $menu_id; + if ( !$menu_id ) + return false; + + $menu_objects = get_objects_in_term( $menu_id, 'nav_menu' ); + if ( !empty( $menu_objects ) ) { + foreach ( $menu_objects as $item ) { + wp_delete_post( $item ); + } + } + wp_delete_term( $menu_id, 'nav_menu' ); +} + +function wp_create_nav_menu( $menu_name ) { + $menu_exists = get_term_by( 'name', $menu_name, 'nav_menu' ); + + if ( $menu_exists ) + return WP_Error('menu_exists', sprintf( __('A menu named "%s" already exists; please try another name.'), $menu_exists->name )); + + $menu = wp_insert_term( $menu_name, 'nav_menu' ); + if ( is_wp_error($menu) ) + return $menu; + + return get_term( $menu['term_id'], 'nav_menu'); +} + +function wp_get_nav_menu( $menu ) { + return get_term( (int) $menu, 'nav_menu'); +} + +function wp_get_nav_menus() { + return get_terms( 'nav_menu', array( 'hide_empty' => false ) ); +} + +function wp_get_nav_menu_items( $menu, $args = array() ) { + $items = get_objects_in_term( (int) $menu, 'nav_menu' ); + + if ( ! empty( $items ) ) { + $defaults = array( 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item', 'post_status' => 'publish', 'output' => ARRAY_A, 'output_key' => 'menu_order' ); + $args = wp_parse_args($args, $defaults); + if ( count( $items ) > 1 ) + $args['include'] = implode( ',', $items ); + else + $args['include'] = $items[0]; + + $items = get_posts( $args ); + + if ( ARRAY_A == $args['output'] ) { + $output = array(); + foreach ( $items as $item ) { + $output[$item->$args['output_key']] = $item; + } + unset($items); + ksort($output); + return $output; + } + } + return $items; +} + +function wp_setup_nav_menu_item($menu_item, $type = 'item', $position = 0) { + global $parent_menu_order; + + if ( 'item' == $type ) { + $menu_item->type = get_post_meta($menu_item->ID, 'menu_type', true); + $menu_item->object_id = get_post_meta($menu_item->ID, 'object_id', true); + if ( isset( $parent_menu_order[ $menu_item->post_parent ] ) ) + $menu_item->parent_item = $parent_menu_order[ $menu_item->post_parent ]; + else + $menu_item->parent_item = 0; + } elseif ( 'category' == $type ) { + $menu_item->type = $type; + $menu_item->object_id = $menu_item->term_id; + $menu_item->ID = $menu_item->term_id; + $menu_item->parent_item = $menu_item->parent; + $menu_item->menu_order = $position; + } elseif ( 'page' == $type ) { + $menu_item->type = $type; + $menu_item->object_id = $menu_item->ID; + $menu_item->parent_item = $menu_item->post_parent; + $menu_item->menu_order = $position; + } + + switch ( $menu_item->type ) { + // Page Menu Item + case 'page': + if ( $menu_item->guid == '' ) + $menu_item->link = get_permalink( $menu_item->object_id ); + else + $menu_item->link = $menu_item->guid; + + if ( $menu_item->post_title == '' ) + $menu_item->title = htmlentities( get_the_title( $menu_item->object_id ) ); + else + $menu_item->title = htmlentities( $menu_item->post_title ); + + if ( $menu_item->post_content == '' ) + $menu_item->description = htmlentities( get_post_meta( $menu_item->ID, 'page-description', true ) ); + else + $menu_item->description = htmlentities( $menu_item->post_content ); + $menu_item->target = ''; + $menu_item->append = 'Page'; + break; + // Category Menu Item + case 'category': + if ( empty($menu_item->guid) ) + $menu_item->link = get_category_link( $menu_item->object_id ); + else + $menu_item->link = $menu_item->guid; + + if ( empty($menu_item->post_title) ) { + $title_raw = get_category( $menu_item->object_id ); + $menu_item->title = htmlentities($title_raw->cat_name); + } else { + $menu_item->title = htmlentities( $menu_item->post_title ); + } + + if ( empty($menu_item->post_content) ) + $menu_item->description = htmlentities( strip_tags( category_description( $menu_item->object_id ) ) ); + else + $menu_item->description = htmlentities( $menu_item->post_content ); + $menu_item->target = ''; + $menu_item->append = 'Category'; + break; + default: + // Custom Menu Item + $menu_item->link = $menu_item->guid; + $menu_item->title = htmlentities( $menu_item->post_title ); + $menu_item->description = htmlentities( $menu_item->post_content ); + $menu_item->target = 'target="_blank"'; + $menu_item->append = 'Custom'; + break; + } + + $menu_item->li_class = ''; + global $wp_query; + if ( $menu_item->ID == $wp_query->get_queried_object_id() ) + $menu_item->li_class = 'class="current_page_item"'; + + $menu_item->anchor_title = ''; +/* @todo: update to use tax/post data + + //SET anchor title + if (isset($wp_custom_nav_menu_items->custom_anchor_title)) { + $anchor_title = htmlentities($wp_custom_nav_menu_items->custom_anchor_title); + } + else { + $anchor_title = $title; + } + + if ($queried_id == $wp_custom_nav_menu_items->post_id) { + $li_class = 'class="current_page_item"'; + } + + if (isset($wp_custom_nav_menu_items->new_window)) { + if ($wp_custom_nav_menu_items->new_window > 0) { + $target = 'target="_blank"'; + } + else { + $target = ''; + } + } +*/ + + return $menu_item; +} + +?> \ No newline at end of file diff --git a/wp-settings.php b/wp-settings.php index 25f7a1b475..b82673c8dd 100644 --- a/wp-settings.php +++ b/wp-settings.php @@ -128,6 +128,8 @@ require( ABSPATH . WPINC . '/shortcodes.php' ); require( ABSPATH . WPINC . '/media.php' ); require( ABSPATH . WPINC . '/http.php' ); require( ABSPATH . WPINC . '/widgets.php' ); +require( ABSPATH . WPINC . '/nav-menu.php' ); +require( ABSPATH . WPINC . '/nav-menu-template.php' ); // Load multisite-specific files. if ( is_multisite() ) {