]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-includes/nav-menu-template.php
Wordpress 3.0.3-scripts
[autoinstalls/wordpress.git] / wp-includes / nav-menu-template.php
index d2fb493b8fca7ac50f317b22c44dad08b0f5cdde..b9c058708d4a47e512bca2ce90545b58715f073e 100644 (file)
@@ -71,11 +71,15 @@ class Walker_Nav_Menu extends Walker {
                $class_names = $value = '';
 
                $classes = empty( $item->classes ) ? array() : (array) $item->classes;
+               $classes[] = 'menu-item-' . $item->ID;
 
                $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
                $class_names = ' class="' . esc_attr( $class_names ) . '"';
 
-               $output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $class_names .'>';
+               $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
+               $id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : '';
+
+               $output .= $indent . '<li' . $id . $value . $class_names .'>';
 
                $attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) .'"' : '';
                $attributes .= ! empty( $item->target )     ? ' target="' . esc_attr( $item->target     ) .'"' : '';
@@ -351,7 +355,9 @@ function _wp_menu_item_classes_by_context( &$menu_items ) {
                } elseif ( 'custom' == $menu_item->object ) {
                        $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
                        $item_url = strpos( $menu_item->url, '#' ) ? substr( $menu_item->url, 0, strpos( $menu_item->url, '#' ) ) : $menu_item->url;
-                       if ( $item_url == $current_url ) {
+                       $_indexless_current = preg_replace( '/index.php$/', '', $current_url );
+                       
+                       if ( in_array( $item_url, array( $current_url, $_indexless_current ) ) ) {
                                $classes[] = 'current-menu-item';
                                $_anc_id = (int) $menu_item->db_id;
 
@@ -362,8 +368,7 @@ function _wp_menu_item_classes_by_context( &$menu_items ) {
                                        $active_ancestor_item_ids[] = $_anc_id;
                                }
 
-                               if ( untrailingslashit($current_url) == home_url() ) {
-                                       $classes[] = 'menu-item-home';
+                               if ( in_array( home_url(), array( untrailingslashit( $current_url ), untrailingslashit( $_indexless_current ) ) ) ) {
                                        // Back compat for home limk to match wp_page_menu()
                                        $classes[] = 'current_page_item';
                                }
@@ -371,6 +376,9 @@ function _wp_menu_item_classes_by_context( &$menu_items ) {
                                $active_parent_object_ids[] = (int) $menu_item->post_parent;
                                $active_object = $menu_item->object;
                        }
+                       
+                       if ( untrailingslashit($item_url) == home_url() )
+                               $classes[] = 'menu-item-home';
                }
 
                // back-compat with wp_page_menu: add "current_page_parent" to static home page link for any non-page query
@@ -433,7 +441,7 @@ function _wp_menu_item_classes_by_context( &$menu_items ) {
  * Retrieve the HTML list content for nav menu items.
  *
  * @uses Walker_Nav_Menu to create HTML list content.
- * @since 2.1.0
+ * @since 3.0.0
  * @see Walker::walk() for parameters and return description.
  */
 function walk_nav_menu_tree( $items, $depth, $r ) {
@@ -443,4 +451,19 @@ function walk_nav_menu_tree( $items, $depth, $r ) {
        return call_user_func_array( array(&$walker, 'walk'), $args );
 }
 
+/**
+ * Prevents a menu item ID from being used more than once.
+ *
+ * @since 3.0.1
+ * @access private
+ */
+function _nav_menu_item_id_use_once( $id, $item ) {
+       static $_used_ids = array();
+       if ( in_array( $item->ID, $_used_ids ) )
+               return '';
+       $_used_ids[] = $item->ID;
+       return $id;
+}
+add_filter( 'nav_menu_item_id', '_nav_menu_item_id_use_once', 10, 2 );
+
 ?>