WordPress.org

Make WordPress Core

Ticket #11817: menus_super_nova.diff

File menus_super_nova.diff, 142.6 KB (added by ptahdunbar, 3 years ago)
  • wp-includes/nav-menu-template.php

     
    2323 * @param array $args Arguments 
    2424 */ 
    2525function wp_nav_menu( $args = array() ) { 
    26         $defaults = array( 'menu' => '', 'menu_class' => 'menu', 'format' => 'div', 'echo' => true, 
    27         'fallback_cb' => 'wp_page_menu', 'link_before' => '', 'link_after' => '', 'before_link' => '', 'after_link' => '', ); 
     26        $defaults = array( 'menu' => '', 'container' => 'div', 'container_class' => '', 'menu_class' => 'menu', 'echo' => true, 
     27        'fallback_cb' => 'wp_page_menu', 'before_link' => '', 'after_link' => '', 'before_title' => '', 'after_title' => '', ); 
    2828         
    2929        $args = wp_parse_args( $args, $defaults ); 
    3030        $args = apply_filters( 'wp_nav_menu_args', $args ); 
     
    4545                } 
    4646        } 
    4747 
    48         if ( $menu ) 
     48        if ( !is_wp_error($menu) ) 
    4949                $args->menu = $menu->term_id; 
    5050        $nav_menu = ''; 
    5151 
    52         if ( 'div' == $args->format ) { 
    53                 if ( $menu ) 
    54                         $nav_menu .= '<div id="menu-' . $menu->slug . '" class="' . esc_attr($args->menu_class) . '">'; 
    55                 else 
    56                         $nav_menu .= '<div id="menu-default">'; 
     52        if ( 'div' == $args->container ) { 
     53                $class = $args->container_class ? ' class="' . esc_attr($args->container_class) . '"' : ''; 
     54                 
     55                if ( is_nav_menu($menu) ) { 
     56                        $nav_menu .= '<div id="menu-' . $menu->slug . '"'. $class .'>'; 
     57                } else { 
     58                        $nav_menu .= '<div'. $class .'>'; 
     59                } 
    5760        } 
    5861 
    5962        $nav_menu .= wp_get_nav_menu( $args ); 
    6063 
    61         if ( 'div' == $args->format ) 
     64        if ( 'div' == $args->container ) 
    6265                $nav_menu .= '</div>'; 
     66         
     67        $nav_menu = apply_filters( 'wp_nav_menu', $nav_menu, $args ); 
    6368 
    64         $nav_menu = apply_filters( 'wp_nav_menu', $nav_menu ); 
    65  
    6669        if ( $args->echo ) 
    6770                echo $nav_menu; 
    6871        else 
     
    8083 * @return mixed $output False if menu doesn't exists, else, returns the menu. 
    8184 **/ 
    8285function wp_get_nav_menu( $args = array() ) { 
    83         $defaults = array( 'menu' => '', 'menu_class' => 'menu', 'ul_class' => '', 'format' => 'div', 'type' => 'frontend', 
    84         'fallback_cb' => '', 'link_before' => '', 'link_after' => '', 'before_link' => '', 'after_link' => '', ); 
     86        $defaults = array( 'menu' => '', 'menu_class' => 'menu', 'context' => 'frontend', 
     87        'fallback_cb' => '', 'before_link' => '', 'after_link' => '', 'before_title' => '', 'after_title' => '', ); 
    8588         
    8689        $args = wp_parse_args( $args, $defaults ); 
    8790        $args = apply_filters( 'wp_get_nav_menu_args', $args ); 
    8891        $args = (object) $args; 
    8992         
     93        // Variable setup 
     94        $nav_menu = ''; 
     95        $items = ''; 
     96        $current_parent = 0; 
     97        $parent_stack = array(); 
     98        $parent_menu_order = array(); 
     99         
     100        // Get the menu object 
    90101        $menu = wp_get_nav_menu_object( $args->menu ); 
    91102         
    92         // If no menu was found, call the fallback_cb 
    93         if ( !$menu || is_wp_error($menu) ) { 
     103        // If the menu exists, get it's items. 
     104        if ( $menu && !is_wp_error($menu) ) 
     105                $menu_items = wp_get_nav_menu_items( $menu->term_id, 'backend' ); 
     106         
     107        // If no menu was found or if the menu has no items, call the fallback_cb 
     108        if ( !$menu || is_wp_error($menu) || ( isset($menu_items) && empty($menu_items) ) ) { 
    94109                if ( function_exists($args->fallback_cb) ) { 
    95110                        $_args = array_merge( (array)$args, array('echo' => false) ); 
    96111                        return call_user_func( $args->fallback_cb, $_args ); 
    97112                } 
    98113        } 
    99114         
    100         $menu_items = wp_get_nav_menu_items( $menu->term_id ); 
    101         $nav_menu = ''; 
    102         $parent_stack = array(); 
    103         $current_parent = 0; 
    104         $parent_menu_order = array(); 
    105          
    106         // Setup parentage 
    107         foreach ( $menu_items as $menu_item ) 
    108                 $parent_menu_order[ $menu_item->ID ] = $menu_item->menu_order; 
    109          
    110         $ul_class = isset($args->ul_class) ? ' class="'. $args->ul_class .'"' : ''; 
    111         $nav_menu .= '<ul'. $ul_class .'>'; 
    112          
    113         // Display Loop 
    114         foreach ( $menu_items as $key => $menu_item ) : 
     115        foreach ( $menu_items as $key => $menu_item ) { 
    115116                // Setup the $menu_item variables 
    116                 $menu_item = wp_setup_nav_menu_item( $menu_item ); 
     117                $menu_item = wp_setup_nav_menu_item( $menu_item, 'frontend' ); 
    117118 
    118                 $maybe_value = 'frontend' == $args->type ? '' : ' value="'. $menu_item->ID .'"'; 
    119                 $classes = 'frontend' == $args->type ? ' class="menu-item-'. $menu_item->type . $menu_item->li_class .'"' : ''; 
    120  
    121                 $nav_menu .= '<li id="menu-item-'. $menu_item->ID .'"'. $maybe_value . $classes .'>'; 
    122                 $nav_menu .= wp_get_nav_menu_item( $menu_item, $args->type, $args ); 
     119                $type = sanitize_title_with_dashes( $menu_item->append ); 
     120                $maybe_value = 'frontend' == $args->context ? '' : ' value="'. $menu_item->ID .'"'; 
     121                $classes = 'frontend' == $args->context ? ' class="menu-item-type-'. $type . $menu_item->li_class .'"' : ''; 
    123122                 
     123                $items .= '<li id="menu-item-'. $menu_item->ID .'"'. $maybe_value . $classes .'>'; 
     124                $items .= wp_get_nav_menu_item( $menu_item, $args->context, $args ); 
     125                 
    124126                // Indent children 
    125127                $last_item = ( count( $menu_items ) == $menu_item->menu_order ); 
    126                 if ( $last_item || $current_parent != $menu_items[ $key + 1 ]->post_parent ) { 
    127                         if ( $last_item || in_array( $menu_items[ $key + 1 ]->post_parent, $parent_stack ) ) { 
    128                                 $nav_menu .= '</li>'; 
    129                                 while ( !empty( $parent_stack ) && ($last_item || $menu_items[ $key + 1 ]->post_parent != $current_parent ) ) { 
    130                                         $nav_menu .= '</ul></li>'; 
     128                if ( $last_item || $current_parent != $menu_items[$key + 1]->post_parent ) { 
     129                        if ( $last_item || in_array( $menu_items[$key + 1]->post_parent, $parent_stack ) ) { 
     130                                $items .= '</li>'; 
     131                                while ( !empty( $parent_stack ) && ($last_item || $menu_items[$key + 1]->post_parent != $current_parent ) ) { 
     132                                        $items .= '</ul></li>'; 
    131133                                        $current_parent = array_pop( $parent_stack ); 
    132134                                } 
    133135                        } else { 
    134136                                array_push( $parent_stack, $current_parent ); 
    135137                                $current_parent = $menu_item->ID; 
    136                                 $nav_menu .= '<ul>'; 
     138                                $items .= '<ul class="sub-menu">'; 
    137139                        } 
    138140                } else { 
    139                         $nav_menu .= '</li>'; 
     141                        $items .= '</li>'; 
    140142                } 
    141  
    142         endforeach; 
     143        } 
    143144         
     145        // CSS class 
     146        $ul_class = $args->menu_class ? ' class="'. $args->menu_class .'"' : ''; 
     147        $nav_menu .= '<ul'. $ul_class .'>'; 
     148         
     149        // Allow plugins to hook into the menu to add their own <li>'s 
     150        if ( 'frontend' == $args->context ) { 
     151                $items = apply_filters( 'wp_nav_menu_items', $items, $args ); 
     152                $items = apply_filters( "wp_nav_menu_{$menu->slug}_items", $items, $args ); 
     153                $nav_menu .= $items; 
     154        } else { 
     155                $nav_menu .= $items; 
     156        } 
     157         
    144158        $nav_menu .= '</ul>'; 
    145159         
    146160        return apply_filters( 'wp_get_nav_menu', $nav_menu ); 
    147161} 
    148162 
    149163/** 
    150  * Returns a menu item. 
     164 * Returns the menu item formatted based on it's context. 
    151165 * 
    152166 * @since 3.0.0 
    153167 * 
    154  * @param object $menu_item The menu item 
    155  * @param string $context frontend|backend|default 
    156  * @param array $args See wp_get_nav_menu(). 
    157  **/ 
    158 function wp_get_nav_menu_item( $menu_item, $context, $args = array() ) { 
    159         $item = ''; 
     168 * @param string $menu_item The menu item to format. 
     169 * @param string $context The context to which the menu item will be formatted to. 
     170 * @param string $args Optional. Args used for the 'template' context. 
     171 * @return string $output The menu formatted menu item. 
     172 */ 
     173function wp_get_nav_menu_item( $menu_item, $context = 'frontend', $args = array() ) { 
     174        $output = ''; 
    160175        switch ( $context ) { 
    161176                case 'frontend': 
    162                         $attr_title = ( isset($menu_item->anchor_title) && '' != $menu_item->anchor_title ) ? ' title="'. esc_attr($menu_item->anchor_title) .'"' : ''; 
    163                         $href = isset($menu_item->link) ? ' href="'. esc_url($menu_item->link) .'"' : ''; 
     177                        $attributes  = ( isset($menu_item->anchor_title) && '' != $menu_item->anchor_title ) ? ' title="'. esc_attr($menu_item->anchor_title) .'"' : ''; 
     178                        $attributes .= ( isset($menu_item->target) && '' != $menu_item->target ) ? ' target="'. esc_attr($menu_item->target) .'"' : ''; 
     179                        $attributes .= ( isset($menu_item->classes) && '' != $menu_item->classes ) ? ' class="'. esc_attr($menu_item->classes) .'"' : ''; 
     180                        $attributes .= ( isset($menu_item->xfn) && '' != $menu_item->xfn ) ? ' rel="'. esc_attr($menu_item->xfn) .'"' : ''; 
     181                        $attributes .= ( isset($menu_item->url) && '' != $menu_item->url ) ? ' href="'. esc_attr($menu_item->url) .'"' : ''; 
    164182                         
    165                         $item .= '<a'. $attr_title . $href . $menu_item->target .'>'; 
    166                         $item .= $args->before_link . esc_html( $menu_item->title ) . $args->after_link; 
    167                         $item .= '</a>'; 
     183                        $output .= esc_html( $args->before_link ); 
     184                        $output .= '<a'. $attributes .'>'; 
     185                        $output .= esc_html( $args->before_title . $menu_item->title . $args->after_title ); 
     186                        $output .= '</a>'; 
     187                        $output .= esc_html( $args->after_link ); 
    168188                         
    169189                        break; 
    170190                 
    171191                case 'backend': 
    172                         $item .= '<dl><dt>'; 
    173                         $item .= '<span class="item-title">'. esc_html($menu_item->title) .'</span>'; 
    174                         $item .= '<span class="item-controls">'; 
    175                         $item .= '<span class="item-type">'. esc_html($menu_item->type) .'</span>'; 
     192                        $output .= '<dl><dt>'; 
     193                        $output .= '<span class="item-title">'. esc_html($menu_item->title) .'</span>'; 
     194                        $output .= '<span class="item-controls">'; 
     195                        $output .= '<span class="item-type">'. esc_html($menu_item->append) .'</span>'; 
    176196                         
    177197                        // Actions 
    178                         $item .= '<a class="item-edit thickbox" id="edit'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->menu_order ) .'" title="'. __('Edit Menu Item') .'" href="#TB_inline?height=380&width=300&inlineId=menu-item-settings">'. __('Edit') .'</a> | '; 
    179                         $item .= '<a class="item-delete" id="delete'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->menu_order ) .'">'. __('Delete') .'</a>'; 
     198                        $output .= '<a class="item-edit thickbox" id="edit'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->menu_order ) .'" title="'. __('Edit Menu Item') .'" href="#TB_inline?height=540&width=300&inlineId=menu-item-settings">'. __('Edit') .'</a> | '; 
     199                        $output .= '<a class="item-delete" id="delete'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->menu_order ) .'">'. __('Delete') .'</a>'; 
    180200                         
    181                         $item .= '</dt></dl>'; 
     201                        $output .= '</dt></dl>'; 
    182202                         
    183203                        // Menu Item Settings 
    184                         $item .= '<input type="hidden" id="item-dbid'. esc_attr( $menu_item->menu_order ) .'" name="item-dbid'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->ID ) .'" />'; 
    185                         $item .= '<input type="hidden" id="item-postmenu'. esc_attr( $menu_item->menu_order ) .'" name="item-postmenu'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( get_post_meta( $menu_item->ID, 'object_id', true ) ) .'" />'; 
    186                         $item .= '<input type="hidden" id="item-parent'. esc_attr( $menu_item->menu_order ) .'" name="item-parent'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->parent_item ) .'" />'; 
    187                         $item .= '<input type="hidden" id="item-position'. esc_attr( $menu_item->menu_order ) .'" name="item-position'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->menu_order ) .'" />'; 
    188                         $item .= '<input type="hidden" id="item-type'. esc_attr( $menu_item->menu_order ) .'" name="item-type'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( get_post_meta( $menu_item->ID, 'menu_type', true ) ) .'" />'; 
    189                         $item .= '<input type="hidden" id="item-title'. esc_attr( $menu_item->menu_order ) .'" name="item-title'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->title ) .'" />'; 
    190                         $item .= '<input type="hidden" id="item-url'. esc_attr( $menu_item->menu_order ) .'" name="item-url'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->link ) .'" />'; 
    191                         $item .= '<input type="hidden" id="item-description'. esc_attr( $menu_item->menu_order ) .'" name="item-description'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->description ) .'" />'; 
    192                         $item .= '<input type="hidden" id="item-attr-title'. esc_attr( $menu_item->menu_order ) .'" name="item-attr-title'. esc_attr( $menu_item->menu_order ) .'" value="'.esc_attr( $menu_item->post_excerpt )  .'" />'; 
    193                         $item .= '<input type="hidden" id="item-target'. esc_attr( $menu_item->menu_order ) .'" name="item-target'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( get_post_meta( $menu_item->ID, 'menu_new_window', true ) ? '1' : '0' ) .'" />'; 
     204                        $output .= '<input type="hidden" name="menu-item-db-id[]" id="menu-item-db-id'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->ID ) .'" />'; 
     205                        $output .= '<input type="hidden" name="menu-item-object-id[]" id="menu-item-object-id'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->object_id ) .'" />'; 
     206                        $output .= '<input type="hidden" name="menu-item-parent-id[]" id="menu-item-parent-id'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->post_parent ) .'" />'; 
     207                        $output .= '<input type="hidden" name="menu-item-position[]" id="menu-item-position'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->menu_order ) .'" />'; 
     208                        $output .= '<input type="hidden" name="menu-item-type[]" id="menu-item-type'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->type ) .'" />'; 
     209                        $output .= '<input type="hidden" name="menu-item-append[]" id="menu-item-append'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->append ) .'" />'; 
     210                        $output .= '<input type="hidden" name="menu-item-title[]" id="menu-item-title'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->title ) .'" />'; 
     211                        $output .= '<input type="hidden" name="menu-item-url[]" id="menu-item-url'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->url ) .'" />'; 
     212                        $output .= '<input type="hidden" name="menu-item-description[]" id="menu-item-description'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->description ) .'" />'; 
     213                        $output .= '<input type="hidden" name="menu-item-classes[]" id="menu-item-classes'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->classes ) .'" />'; 
     214                        $output .= '<input type="hidden" name="menu-item-xfn[]" id="menu-item-xfn'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->xfn ) .'" />'; 
     215                        $output .= '<input type="hidden" name="menu-item-attr-title[]" id="menu-item-attr-title'. esc_attr( $menu_item->menu_order ) .'" value="'.esc_attr( $menu_item->post_excerpt )  .'" />'; 
     216                        $output .= '<input type="hidden" name="menu-item-target[]" id="menu-item-target'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->target ) .'" />'; 
    194217                        break; 
     218                 
     219                case 'custom': 
     220                        $menu_id = 'menu-item-' . $menu_item->db_id; 
     221                        $output .= '<label class="menu-item-title"><input type="checkbox" id="'. esc_attr( $menu_id ) .'" name="'. esc_attr( $menu_item->title ) .'" value="'. esc_attr( $menu_item->url ) .'" />'. $menu_item->title .'</label>'; 
    195222                         
    196                 case 'default': 
    197                         $menu_id = 'menu-item-' . $menu_item->ID; 
    198                         $item .= '<label class="item-title"><input type="checkbox" id="'. esc_attr($menu_id) .'" name="'. esc_attr( $menu_item->title ) .'" value="'. esc_attr( $menu_item->link ) .'" />'. $menu_item->title .'</label>'; 
     223                        // Menu item hidden fields 
     224                        $output .= '<input type="hidden" class="menu-item-db-id" value="'. esc_attr( $menu_item->db_id ) .'" />'; 
     225                        $output .= '<input type="hidden" class="menu-item-object-id" value="'. esc_attr( $menu_item->object_id ) .'" />'; 
     226                        $output .= '<input type="hidden" class="menu-item-parent-id" value="'. esc_attr( $menu_item->parent_id ) .'" />'; 
     227                        $output .= '<input type="hidden" class="menu-item-type" value="'. esc_attr( $menu_item->type ) .'" />'; 
     228                        $output .= '<input type="hidden" class="menu-item-append" value="'. esc_attr( $menu_item->append ) .'" />'; 
     229                        $output .= '<input type="hidden" class="menu-item-title" value="'. esc_attr( $menu_item->title ) .'" />'; 
     230                        $output .= '<input type="hidden" class="menu-item-url" value="'. esc_attr( $menu_item->url ) .'" />'; 
     231                        $output .= '<input type="hidden" class="menu-item-target" value="'. esc_attr( $menu_item->target ) .'" />'; 
     232                        $output .= '<input type="hidden" class="menu-item-attr_title" value="'. esc_attr( $menu_item->attr_title ) .'" />'; 
     233                        $output .= '<input type="hidden" class="menu-item-description" value="'. esc_attr( $menu_item->description ) .'" />'; 
     234                        $output .= '<input type="hidden" class="menu-item-classes" value="'. esc_attr( $menu_item->classes ) .'" />'; 
     235                        $output .= '<input type="hidden" class="menu-item-xfn" value="'. esc_attr( $menu_item->xfn ) .'" />'; 
     236                        break; 
     237                 
     238                case 'taxonomy': 
     239                case 'post_type': 
     240                        $menu_id = 'menu-item-' . $menu_item->db_id; 
     241                        $output .= '<label class="menu-item-title"><input type="checkbox" id="'. esc_attr( $menu_id ) .'" name="'. esc_attr( $menu_item->title ) .'" value="'. esc_attr( $menu_item->url ) .'" />'. $menu_item->title .'</label>'; 
    199242                         
    200                         // Menu Item Settings 
    201                         $item .= '<input type="hidden" class="item-type" value="'. esc_attr( $menu_item->type ) .'" />'; 
    202                         $item .= '<input type="hidden" class="item-title" value="'. esc_attr( $menu_item->title ) .'" />'; 
    203                         $item .= '<input type="hidden" class="item-url" value="'. esc_attr( $menu_item->link ) .'" />'; 
    204                         $item .= '<input type="hidden" class="item-dbid" value="'. esc_attr( $menu_item->ID ) .'" />'; 
    205                         $item .= '<input type="hidden" class="item-parent" value="'. esc_attr( $menu_item->parent_item ) .'" />'; 
    206                         $item .= '<input type="hidden" class="item-description" value="'. esc_attr( $menu_item->description ) .'" />'; 
     243                        // Menu item hidden fields 
     244                        $output .= '<input type="hidden" class="menu-item-db-id" value="0" />'; 
     245                        $output .= '<input type="hidden" class="menu-item-object-id" value="'. esc_attr( $menu_item->object_id ) .'" />'; 
     246                        $output .= '<input type="hidden" class="menu-item-parent-id" value="'. esc_attr( $menu_item->parent_id ) .'" />'; 
     247                        $output .= '<input type="hidden" class="menu-item-type" value="'. esc_attr( $menu_item->type ) .'" />'; 
     248                        $output .= '<input type="hidden" class="menu-item-append" value="'. esc_attr( $menu_item->append ) .'" />'; 
     249                        $output .= '<input type="hidden" class="menu-item-title" value="'. esc_attr( $menu_item->title ) .'" />'; 
     250                        $output .= '<input type="hidden" class="menu-item-url" value="'. esc_attr( $menu_item->url ) .'" />'; 
     251                        $output .= '<input type="hidden" class="menu-item-append" value="'. esc_attr( $menu_item->append ) .'" />'; 
    207252                        break; 
    208253        } 
    209         return apply_filters( 'wp_get_nav_menu_item', $item ); 
     254         
     255        return $output; 
    210256} 
    211257?> 
     258 No newline at end of file 
  • wp-includes/taxonomy.php

     
    160160 */ 
    161161function is_taxonomy( $taxonomy ) { 
    162162        global $wp_taxonomies; 
    163  
     163                 
    164164        return isset($wp_taxonomies[$taxonomy]); 
    165165} 
    166166 
  • wp-includes/script-loader.php

     
    397397                ) ); 
    398398 
    399399                // Custom Navigation 
    400                 $scripts->add( 'nav-menu-default-items', "/wp-admin/js/nav-menu-default-items$suffix.js", false, '20100223' ); 
    401                 $scripts->add( 'nav-menu-dynamic-functions', "/wp-admin/js/nav-menu-dynamic-functions$suffix.js", false, '20100225b' ); 
     400                $scripts->add( 'nav-menu-default-items', "/wp-admin/js/nav-menu-default-items$suffix.js", false, '20100315' ); 
     401                $scripts->add( 'nav-menu-dynamic-functions', "/wp-admin/js/nav-menu-dynamic-functions$suffix.js", false, '20100315' ); 
    402402                $scripts->localize( 'nav-menu-dynamic-functions', 'navMenuL10n', array( 
    403403                        'custom' => _x('Custom', 'menu nav item type'), 
    404404                        'page' => _x('Page', 'menu nav item type'), 
    405405                        'category' => _x('Category', 'menu nav item type'), 
    406406                        'thickbox' => _x('Edit Menu Item', 'Thickbox Title'), 
    407407                        'edit' => _x('Edit', 'menu item edit text'), 
     408                        'warnDelete' => __( "You are about to permanently delete this menu. \n 'Cancel' to stop, 'OK' to delete." ), 
    408409                ) ); 
    409410                 
    410411                $scripts->add( 'nav-menu-php-functions', "/wp-admin/js/nav-menu-php-functions$suffix.js", false, '20100220' ); 
  • wp-includes/nav-menu.php

     
    4949} 
    5050 
    5151/** 
    52  * Returns all Navigation Menu objects. 
    53  * 
    54  * @since 3.0.0 
    55  * 
    56  * @return array menu objects 
    57  */ 
    58 function wp_get_nav_menus() { 
    59         return get_terms( 'nav_menu', array( 'hide_empty' => false, 'orderby' => 'id' ) ); 
    60 } 
    61  
    62 /** 
    6352 * Creates a navigation menu. 
    6453 * 
    6554 * Optional args: 
     
    113102} 
    114103 
    115104/** 
    116  * Creates a nav menu named 'Menu 1'. 
     105 * Returns all Navigation Menu objects. 
    117106 * 
    118  * This function is called if the user doesn't have any nav menus. 
    119  * It grabs the first 14 pages, and creates a new default menu. 
    120  * 
    121107 * @since 3.0.0 
     108 * 
     109 * @return array menu objects 
    122110 */ 
    123 function wp_create_default_nav_menu() { 
    124         $menu = wp_create_nav_menu( __('Menu 1'), array('slug' => 'menu-1') ); 
    125  
    126         if ( is_wp_error($menu) ) 
    127                 return; 
    128  
    129         $pages = get_pages( array('parent' => 0, 'number' => 15) ); 
    130         $counter = 1; 
    131         foreach ( $pages as $page ) { 
    132                 $item = array( 'post_status' => 'publish', 'post_type' => 'nav_menu_item', 'menu_order' => $counter, 'tax_input' => array( 'nav_menu' => $menu->name), 'post_title' => addslashes($page->post_title) ); 
    133                 $item_id = wp_insert_post($item, true); 
    134                 update_post_meta( $item_id, 'menu_type', 'page' ); 
    135                 update_post_meta( $item_id, 'object_id', $page->ID ); 
    136                 update_post_meta( $item_id, 'menu_new_window', 0 ); 
    137                 $counter++; 
    138         } 
     111function wp_get_nav_menus() { 
     112        return get_terms( 'nav_menu', array( 'hide_empty' => false, 'orderby' => 'id' ) ); 
    139113} 
    140114 
    141115/** 
    142  * Returns the menu items of a navigation menu. 
     116 * Returns all menu items of a navigation menu. 
    143117 * 
    144118 * @since 3.0.0 
    145119 * 
     
    179153} 
    180154 
    181155/** 
    182  * Returns a menu item with all it's nessecary data populated. 
     156 * Adds all the nav menu properties to the $menu_item. 
    183157 * 
    184158 * @since 3.0.0 
    185159 * 
    186  * @param string $menu_item Menu item. 
    187  * @param string $type item|category|page. 
    188  * @param string $position position of the menu item. 
    189  * @return $menu_item 
     160 * @param string $menu_item The menu item to modify 
     161 * @param string $menu_item_type The menu item type (template, custom, post_type, taxonomy). 
     162 * @param string $menu_item_object Optional. The menu item object type (post type or taxonomy). 
     163 * @return object $menu_item The modtified menu item. 
    190164 */ 
    191 function wp_setup_nav_menu_item( $menu_item, $type = 'item', $position = 0 ) { 
    192         global $parent_menu_order; 
     165function wp_setup_nav_menu_item( $menu_item, $menu_item_type = null, $menu_item_object = '' ) { 
     166        global $wp_query; 
     167         
     168        switch ( $menu_item_type ) { 
     169                case 'frontend': 
     170                        $menu_item->db_id = (int) $menu_item->ID; 
     171                        $menu_item->object_id = get_post_meta( $menu_item->ID, 'menu_item_object_id', true ); 
     172                        $menu_item->parent_id = (int) $menu_item->post_parent; 
     173                        $menu_item->type = get_post_meta( $menu_item->ID, 'menu_item_type', true ); 
     174                        $menu_item->append = _x( get_post_meta( $menu_item->ID, 'menu_item_append', true ), 'nav menu item type' ); 
     175                         
     176                        $menu_item->title = $menu_item->post_title; 
     177                        $menu_item->url = get_post_meta( $menu_item->ID, 'menu_item_url', true ); 
     178                        $menu_item->target = get_post_meta( $menu_item->ID, 'menu_item_target', true ); 
     179                         
     180                        $menu_item->attr_title = strip_tags( $menu_item->post_excerpt ); 
     181                        $menu_item->description = strip_tags( $menu_item->post_content ); 
     182                         
     183                        $menu_item->classes = get_post_meta( $menu_item->ID, 'menu_item_classes', true );; 
     184                        $menu_item->xfn = get_post_meta( $menu_item->ID, 'menu_item_xfn', true ); 
     185                        $menu_item->li_class = ( $menu_item->object_id == $wp_query->get_queried_object_id() ) ? ' current_page_item' : ''; 
     186                        break; 
     187                         
     188                case 'custom': 
     189                        $menu_item->db_id = (int) $menu_item->ID; 
     190                        $menu_item->object_id = (int) $menu_item->ID; 
     191                        $menu_item->parent_id = (int) $menu_item->post_parent; 
     192                        $menu_item->type = 'custom'; //$menu_item_type 
     193                        $menu_item->append = _x( 'Custom', 'nav menu item type' ); 
     194                         
     195                        $menu_item->attr_title = strip_tags( $menu_item->post_excerpt ); 
     196                        $menu_item->description = strip_tags( $menu_item->post_content ); 
    193197 
    194         if ( 'item' == $type ) { 
    195                 $menu_item->type = get_post_meta( $menu_item->ID, 'menu_type', true ); 
    196                 $menu_item->object_id = get_post_meta( $menu_item->ID, 'object_id', true ); 
    197                 $menu_item->target = ( get_post_meta( $menu_item->ID, 'menu_new_window', true ) ) ? 'target="_blank"' : ''; 
    198                 if ( isset( $parent_menu_order[ $menu_item->post_parent ] ) ) 
    199                         $menu_item->parent_item = $parent_menu_order[ $menu_item->post_parent ]; 
    200                 else 
    201                         $menu_item->parent_item = 0; 
    202         } elseif ( 'category' == $type ) { 
    203                 $menu_item->type = $type; 
    204                 $menu_item->object_id = $menu_item->term_id; 
    205                 $menu_item->ID = $menu_item->term_id; 
    206                 $menu_item->parent_item = $menu_item->parent; 
    207                 $menu_item->menu_order = $position; 
    208         } elseif ( 'page' == $type ) { 
    209                 $menu_item->type = $type; 
    210                 $menu_item->object_id = $menu_item->ID; 
    211                 $menu_item->parent_item = $menu_item->post_parent; 
    212                 $menu_item->menu_order = $position; 
    213         } 
     198                        $menu_item->title = $menu_item->post_title; 
     199                        $menu_item->url = get_post_meta( $menu_item->ID, 'menu_item_url', true ); 
     200                        $menu_item->target = get_post_meta( $menu_item->ID, 'menu_item_target', true ); 
     201                        break; 
     202                         
     203                case 'post_type': 
     204                        $menu_item->db_id = 0; 
     205                        $menu_item->object_id = (int) $menu_item->ID; 
     206                        $menu_item->parent_id = (int) $menu_item->post_parent; 
     207                        $menu_item->type = $menu_item_type; 
     208                         
     209                        $object = get_post_type_object( $menu_item_object ); 
     210                        $menu_item->append = _x( $object->singular_label, 'nav menu item type' ); 
    214211 
    215         switch ( $menu_item->type ) { 
    216                 case 'page' : 
    217                         $menu_item->link = get_page_link( $menu_item->object_id ); 
    218  
    219                         if ( $menu_item->post_title == '' ) 
    220                                 $menu_item->title = get_the_title( $menu_item->object_id ); 
    221                         else 
    222                                 $menu_item->title = $menu_item->post_title; 
    223  
    224                         if ( $menu_item->post_content == '' ) 
    225                                 $menu_item->description = get_post_meta( $menu_item->ID, 'page-description', true ); 
    226                         else 
    227                                 $menu_item->description = $menu_item->post_content; 
    228                         $menu_item->append = _x('Page', 'menu nav item type'); 
     212                        $menu_item->title = $menu_item->post_title; 
     213                        $menu_item->url = get_post_permalink( $menu_item->ID ); 
     214                        $menu_item->target = '_none'; 
     215                         
     216                        $menu_item->attr_title = ''; 
     217                        $menu_item->description = strip_tags( $menu_item->post_content ); 
    229218                        break; 
    230                 case 'category' : 
    231                         $menu_item->link = get_category_link( $menu_item->object_id ); 
     219                         
     220                case 'taxonomy': 
     221                        $menu_item->ID = $menu_item->term_id; 
     222                        $menu_item->db_id = 0; 
     223                        $menu_item->object_id = (int) $menu_item->term_id; 
     224                        $menu_item->parent_id = (int) $menu_item->parent; 
     225                        $menu_item->type = $menu_item_type; 
     226                         
     227                        $object = get_taxonomy( $menu_item_object ); 
     228                        $menu_item->append = _x( $object->singular_label, 'nav menu item type' ); 
    232229 
    233                         if ( empty($menu_item->post_title) ) { 
    234                                 $title_raw = get_category( $menu_item->object_id ); 
    235                                 $menu_item->title =  $title_raw->cat_name; 
    236                         } else { 
    237                                 $menu_item->title = $menu_item->post_title; 
    238                         } 
    239  
    240                         if ( empty($menu_item->post_content) ) 
    241                                 $menu_item->description = strip_tags( category_description( $menu_item->object_id ) ); 
    242                         else 
    243                                 $menu_item->description = $menu_item->post_content; 
    244                         $menu_item->append = _x('Category', 'menu nav item type'); 
     230                        $menu_item->title = $menu_item->name; 
     231                        $menu_item->url = get_term_link( $menu_item, $menu_item_object ); 
     232                        $menu_item->target = '_none'; 
     233                        $menu_item->attr_title = ''; 
     234                        $menu_item->description = strip_tags( $menu_item->description ); 
    245235                        break; 
    246                 case 'custom' : 
    247                 default : 
    248                         $menu_item->link = esc_url_raw( get_post_meta( $menu_item->ID, 'menu_link', true ) ); 
    249                         $menu_item->title =  $menu_item->post_title; 
    250                         $menu_item->description = $menu_item->post_content; 
    251                         $menu_item->append = _x('Custom', 'menu nav item type'); 
    252                         break; 
    253236        } 
    254  
    255         $menu_item->li_class = ''; 
    256         global $wp_query; 
    257237         
    258         if ( $menu_item->object_id == $wp_query->get_queried_object_id() ) 
    259                 $menu_item->li_class = ' current_page_item'; 
    260  
    261         $menu_item->anchor_title = ''; 
    262 /* @todo: update to use tax/post data 
    263  
    264                         //SET anchor title 
    265                         if (isset($wp_custom_nav_menu_items->custom_anchor_title)) { 
    266                                 $anchor_title = $wp_custom_nav_menu_items->custom_anchor_title; 
    267                         } 
    268                         else { 
    269                                 $anchor_title = $title; 
    270                         } 
    271  
    272                         if ($queried_id == $wp_custom_nav_menu_items->post_id) { 
    273                                 $li_class = 'class="current_page_item"'; 
    274                         } 
    275  
    276                         if (isset($wp_custom_nav_menu_items->new_window)) { 
    277                                 if ($wp_custom_nav_menu_items->new_window > 0) { 
    278                                         $target = 'target="_blank"'; 
    279                                 } 
    280                                 else { 
    281                                         $target = ''; 
    282                                 } 
    283                         } 
    284 */ 
    285  
     238        $menu_item->classes = get_post_meta( $menu_item->ID, 'menu_item_classes', true ); 
     239        $menu_item->xfn = get_post_meta( $menu_item->ID, 'menu_item_xfn', true ); 
     240         
    286241        return $menu_item; 
    287242} 
    288 ?> 
     243?> 
     244 No newline at end of file 
  • wp-content/themes/twentyten/style.css

     
    152152-------------------------------------------------------------- */ 
    153153 
    154154/* The main theme structure */ 
    155 #access .menu, 
     155#access .menu-header, 
    156156#colophon, 
    157157#branding, 
    158158#main, 
     
    360360        display:block; 
    361361        float:left; 
    362362} 
    363 #access .menu { 
     363#access .menu-header { 
    364364        font-size: 13px; 
    365365        margin-left: 12px; 
    366366} 
    367 #access .menu ul { 
     367#access .menu-header ul { 
    368368        list-style: none; 
    369369        margin: 0; 
    370370} 
    371 #access .menu li { 
     371#access .menu-header li { 
    372372        float:left; 
    373373        position: relative; 
    374374} 
  • wp-content/themes/twentyten/header.php

     
    4343 
    4444                        <div id="access"> 
    4545                                <div class="skip-link screen-reader-text"><a href="#content" title="<?php esc_attr_e( 'Skip to content', 'twentyten' ); ?>"><?php _e( 'Skip to content', 'twentyten' ); ?></a></div> 
    46                                 <?php wp_nav_menu( 'sort_column=menu_order' ); ?> 
     46                                <?php wp_nav_menu( 'sort_column=menu_order&container_class=menu-header' ); ?> 
    4747                        </div><!-- #access --> 
    4848                </div><!-- #masthead --> 
    4949        </div><!-- #header --> 
  • wp-admin/includes/nav-menu.php

     
    11<?php 
    22 
     3/* Register Metaboxes */ 
     4add_meta_box( 'create-menu', __('Create Menu'), 'wp_nav_menu_create_metabox', 'menus', 'side', 'core' ); 
     5add_meta_box( 'add-custom-links', __('Add Custom Links'), 'wp_nav_menu_item_link_metabox', 'menus', 'side', 'default' ); 
     6wp_nav_menu_post_type_metaboxes(); 
     7wp_nav_menu_taxonomy_metaboxes(); 
     8 
    39/** 
    4  * Displays a list of links and thier sub items. 
     10 * Creates metaboxes for any post type menu item. 
    511 * 
    612 * @since 3.0.0 
    7  * 
    8  * @param string $counter  
    9  * @param string $context  
    1013 */ 
    11 function wp_nav_menu_get_custom_links( $counter, $context ) { 
    12         $available_links = new WP_Query( ); 
     14function wp_nav_menu_post_type_metaboxes() { 
     15        $post_types = get_post_types( array( 'public' => true ), 'object' ); 
    1316         
    14         $args = array( 'post_status' => 'any', 'post_type' => 'nav_menu_item', 'meta_value' => 'custom' ); 
    15         $link_objects = new WP_Query( $args ); 
     17        if ( !$post_types ) 
     18                return false; 
    1619         
    17         $items_counter = $counter; 
     20        foreach ( $post_types as $post_type ) {          
     21                $id = sanitize_title_with_dashes( $post_type->label ); 
     22                 
     23                // delete_transient( "nav_menu_items_{$post_type->name}" ); 
     24                // delete_transient( "nav_menu_sub_items_{$post_type->name}" ); 
     25                 
     26                add_meta_box( "add-{$id}", sprintf( __('Add an Existing %s'), $post_type->singular_label ), 'wp_nav_menu_item_post_type_metabox', 'menus', 'side', 'default', $post_type ); 
     27        } 
     28} 
    1829 
    19         if ( !$link_objects->posts ) { 
    20                 _e('Not Found'); 
    21                 return $items_counter; 
    22         } 
     30/** 
     31 * Creates metaboxes for any taxonomy menu item. 
     32 * 
     33 * @since 3.0.0 
     34 */ 
     35function wp_nav_menu_taxonomy_metaboxes() { 
     36        $taxonomies = get_taxonomies( array( 'show_ui' => true ), 'object' ); 
    2337         
    24         // Display Loop 
    25         foreach ( $link_objects->posts as $item ) { 
    26                 if ( 0 == $item->parent ) { 
    27                         $item = wp_setup_nav_menu_item( $item, 'item', $items_counter ); 
    28                          
    29                         switch ( $context ) { 
    30                                 case 'menu': 
    31                                         ?> 
    32                                         <li id="menu-<?php echo $items_counter; ?>" value="<?php echo $items_counter; ?>"> 
    33                                                 <?php 
    34                                                         echo wp_get_nav_menu_item( $item, 'menu' ); 
    35                                                         $parentli = $item->ID; 
    36                                                         $items_counter++; 
    37                                                         $items_counter = wp_nav_menu_sub_items( $item->ID, $items_counter, $parentli, 'categories', 'menu' ); 
    38                                                 ?> 
    39                                         </li> 
    40                                         <?php 
    41                                         break; 
    42                                  
    43                                 case 'default': 
    44                                         ?> 
    45                                         <li> 
    46                                                 <?php 
    47                                                         echo wp_get_nav_menu_item( $item, 'default' ); 
    48                                                         $parentli = $item->ID; 
    49                                                         $items_counter++; 
    50                                                         $items_counter = wp_nav_menu_sub_items( $item->ID, $items_counter, $parentli, 'categories', 'default' ); 
    51                                                 ?> 
    52                                         </li> 
    53                                         <?php 
    54                                         break; 
    55                         } 
    56                 } 
     38        if ( !$taxonomies ) 
     39                return false; 
     40         
     41        foreach ( $taxonomies as $tax ) { 
     42                $id = sanitize_title_with_dashes( $tax->label ); 
     43                 
     44                // delete_transient( "nav_menu_items_{$tax->name}" ); 
     45                // delete_transient( "nav_menu_sub_items_{$tax->name}" ); 
     46                 
     47                add_meta_box( "add-{$id}", sprintf( __('Add an Existing %s'), $tax->singular_label ), 'wp_nav_menu_item_taxonomy_metabox', 'menus', 'side', 'default', $tax ); 
    5748        } 
    58         return $items_counter; 
    5949} 
    6050 
    6151/** 
    62  * Displays a list of pages and thier sub items. 
     52 * Displays a metabox for managing the active menu being edited. 
    6353 * 
    6454 * @since 3.0.0 
    65  * 
    66  * @param string $counter  
    67  * @param string $context  
    6855 */ 
    69 function wp_nav_menu_get_pages( $counter, $context ) { 
    70         $pages_args = array( 
    71                     'child_of' => 0, 
    72                         'sort_order' => 'ASC', 
    73                         'sort_column' => 'post_title', 
    74                         'hierarchical' => 1, 
    75                         'exclude' => '', 
    76                         'include' => '', 
    77                         'meta_key' => '', 
    78                         'meta_value' => '', 
    79                         'authors' => '', 
    80                         'parent' => -1, 
    81                         'exclude_tree' => '', 
    82                         'number' => '', 
    83                         'offset' => 0 ); 
     56function wp_nav_menu_manage_menu_metabox( $object, $menu ) { ?> 
     57        <div id="submitpost" class="submitbox"> 
     58                <div id="minor-publishing"> 
     59                        <div class="misc-pub-section misc-pub-section-last"> 
     60                                <label class="howto" for="menu-name"> 
     61                                        <span><?php _e('Name'); ?></span> 
     62                                        <input id="menu-name" name="menu-name" type="text" class="regular-text menu-item-textbox" value="<?php esc_attr_e( $menu['args'][1] ); ?>" /> 
     63                                        <br class="clear" /> 
     64                                </label> 
     65                        </div><!--END .misc-pub-section misc-pub-section-last--> 
     66                        <br class="clear" /> 
     67                </div><!--END #misc-publishing-actions--> 
     68                <div id="major-publishing-actions"> 
     69                        <div id="delete-action"> 
     70                                <a class="submitdelete deletion" href="<?php echo wp_nonce_url( admin_url('nav-menus.php?action=delete&amp;menu=' . $menu['args'][0]), 'delete-nav_menu-' . $menu['args'][0] ); ?>"><?php _e('Delete Menu'); ?></a> 
     71                        </div><!--END #delete-action--> 
    8472 
    85         // Get all pages 
    86         $pages_array = get_pages( $pages_args ); 
     73                        <div id="publishing-action"> 
     74                                <input class="button-primary" name="save_menu" type="submit" value="<?php esc_attr_e('Save Menu'); ?>" /> 
     75                        </div><!--END #publishing-action--> 
     76                        <br class="clear" /> 
     77                </div><!--END #major-publishing-actions--> 
     78        </div><!--END #submitpost .submitbox--> 
     79        <?php 
     80} 
    8781 
    88         $items_counter = $counter; 
    89         $parentli = $items_counter; 
     82/** 
     83 * Displays a metabox for creating a new menu. 
     84 * 
     85 * @since 3.0.0 
     86 */ 
     87function wp_nav_menu_create_metabox() { ?> 
     88        <p> 
     89                <input type="text" name="create-menu-name" id="create-menu-name" class="regular-text" value=""  /> 
     90                <input type="submit" name="create-menu" id="create-menu" class="button" value="<?php esc_attr_e('Create Menu'); ?>" /> 
     91        </p> 
     92        <?php 
     93} 
    9094 
    91         if ( !$pages_array ) { 
    92                 echo __('Not Found'); 
    93                 return $items_counter; 
     95/** 
     96 * Displays a metabox for the custom links menu item. 
     97 * 
     98 * @since 3.0.0 
     99 */ 
     100function wp_nav_menu_item_link_metabox() { 
     101        $args = array( 'post_status' => 'any', 'post_type' => 'nav_menu_item', 'meta_value' => 'custom' );       
     102         
     103        // Cache the query for a day. @todo: Make sure to flush transient when links are updated. 
     104        $query = get_transient( 'menu_item_query_custom_links' ); 
     105        if ( false == $query ) { 
     106                $query = new WP_Query( $args ); 
     107                set_transient( 'menu_item_query_custom_links', $query, 86400 ); 
    94108        } 
     109         
     110        ?> 
     111        <p id="menu-item-url-wrap"> 
     112                <label class="howto" for="menu-item-url"> 
     113                        <span><?php _e('URL'); ?></span> 
     114                        <input id="custom-menu-item-url" name="custom-menu-item-url" type="text" class="code menu-item-textbox" value="http://" /> 
     115                </label> 
     116        </p> 
     117        <br class="clear" /> 
     118        <p id="menu-item-name-wrap"> 
     119                <label class="howto" for="custom-menu-item-name"> 
     120                        <span><?php _e('Text'); ?></span> 
     121                        <input id="custom-menu-item-name" name="custom-menu-item-name" type="text" class="regular-text menu-item-textbox" value="<?php echo esc_attr( __('Menu Item') ); ?>" /> 
     122                </label> 
     123        </p> 
     124         
     125        <p class="button-controls"> 
     126                <a class="show-all"><?php _e('View All'); ?></a> 
     127                <a class="hide-all"><?php _e('Hide All'); ?></a> 
     128        </p> 
     129        <div id="available-links" class="list-wrap"> 
     130                <div class="list-container"> 
     131                        <ul class="list"> 
     132                                <?php echo wp_nav_menu_get_items( $query->posts, 'custom' ); ?> 
     133                        </ul> 
     134                </div><!-- /.list-container--> 
     135        </div><!-- /#available-links--> 
     136        <p class="add-to-menu"> 
     137                <a class="button"><?php _e('Add to Menu'); ?></a> 
     138        </p> 
     139        <div class="clear"></div> 
     140        <?php 
     141} 
    95142 
    96         // Display Loop 
    97         foreach ( $pages_array as $post ) { 
    98                 if ( $post->post_parent == 0 ) { 
    99                         $post = wp_setup_nav_menu_item( $post, 'page', $items_counter ); 
    100                         if ( $context == 'menu' ) { 
    101                                 ?> 
    102                                 <li id="menu-<?php echo $items_counter; ?>" value="<?php echo $items_counter; ?>"> 
    103                                         <?php 
    104                                                 echo wp_get_nav_menu_item( $post, 'menu', $items_counter ); 
    105                                                 $parentli = $post->ID; 
    106                                                 $items_counter++; 
    107                                                 $items_counter = wp_nav_menu_sub_items( $post->ID, $items_counter, $parentli, 'pages', 'menu' ); 
    108                                         ?> 
    109                                 </li> 
    110                                 <?php 
    111                         } elseif ( $context == 'default' ) { 
    112                                 // Sidebar Menu 
    113                                 ?> 
    114                                  <li> 
    115                                         <?php 
    116                                                 echo wp_get_nav_menu_item( $post, 'default' ); 
    117                                                 $parentli = $post->ID; 
    118                                                 $items_counter++; 
    119                                                 $items_counter = wp_nav_menu_sub_items( $post->ID, $items_counter, $parentli, 'pages', 'default' ); 
    120                                          ?> 
    121                                 </li> 
    122                                 <?php 
     143/** 
     144 * Displays a metabox for a post type menu item. 
     145 * 
     146 * @since 3.0.0 
     147 * 
     148 * @param string $object Not used. 
     149 * @param string $post_type The post type object. 
     150 */ 
     151function wp_nav_menu_item_post_type_metabox( $object, $post_type ) { 
     152        $args = array( 'post_type' => $post_type['args']->name, ); 
     153         
     154        if ( 'attachment' == $post_type['args']->name ) 
     155                $args['post_status'] = 'any'; 
     156         
     157        // Cache the query for a day. @todo: Make sure to flush transient when objects are updated. 
     158        $query = get_transient( "nav_menu_items_{$post_type['args']->name}" ); 
     159        if ( false == $query ) { 
     160                $query = new WP_Query( $args ); 
     161                set_transient( "nav_menu_items_{$post_type['args']->name}", $query, 86400 ); 
     162        } 
     163         
     164        if ( !$query->posts ) 
     165                $error = '<li id="error">'. sprintf( __( 'No %s exists' ), $post_type['args']->label ) .'</li>'; 
     166         
     167        $pt_names = ''; 
     168        if ( is_array($query->posts) ) { 
     169                foreach ( $query->posts as $post ) { 
     170                        if ( $post->post_title ) { 
     171                                $pt_names .= htmlentities( $post->post_title ) .'|'; 
     172                        } else { 
     173                                $pt_names = sprintf( __('No %s exists'), $post_type['args']->label ); 
    123174                        } 
    124175                } 
    125176        } 
    126         return $items_counter; 
     177         
     178        $id = sanitize_title_with_dashes( $post_type['args']->label ); 
     179        ?> 
     180        <p class="quick-search-wrap"> 
     181                <input type="text" class="quick-search regular-text" value="" /> 
     182                <a class="quick-search-submit button-secondary"><?php _e('Search'); ?></a> 
     183        </p> 
     184         
     185        <p class="button-controls"> 
     186                <a class="show-all"><?php _e('View All'); ?></a> 
     187                <a class="hide-all"><?php _e('Hide All'); ?></a> 
     188        </p> 
     189         
     190        <div id="existing-<?php echo esc_attr( $id ); ?>" class="list-wrap"> 
     191                <div class="list-container"> 
     192                        <ul class="list"> 
     193                                <?php echo isset( $error ) ? $error : wp_nav_menu_get_items( $query->posts, 'post_type', $post_type['args']->name ); ?> 
     194                        </ul> 
     195                </div><!-- /.list-container--> 
     196        </div><!-- /#existing-categories--> 
     197        <p class="add-to-menu"> 
     198                <a class="button-secondary"><?php _e('Add to Menu'); ?></a> 
     199        </p> 
     200        <input type="hidden" class="autocomplete" name="autocomplete-<?php echo esc_attr( $post_type['args']->name ); ?>-names" value="<?php echo esc_js( $pt_names ); ?>" /> 
     201        <br class="clear" /> 
     202        <script type="text/javascript" charset="utf-8"> 
     203                // <![CDATA[ 
     204                jQuery(document).ready(function(){ 
     205                        wp_nav_menu_autocomplete('<?php echo esc_attr($id); ?>'); 
     206                }); 
     207                // ]]> 
     208        </script> 
     209        <?php 
    127210} 
    128211 
    129212/** 
    130  * Displays a list of categories and thier sub items. 
     213 * Displays a metabox for a taxonomy menu item. 
    131214 * 
    132215 * @since 3.0.0 
    133216 * 
    134  * @param string $counter  
    135  * @param string $context  
     217 * @param string $object Not used. 
     218 * @param string $taxonomy The taxonomy object. 
    136219 */ 
    137 function wp_nav_menu_get_categories( $counter, $context ) { 
    138         $category_args = array( 
    139                         'type'                     => 'post', 
    140                         'child_of'                 => 0, 
    141                         'orderby'                  => 'name', 
    142                         'order'                    => 'ASC', 
    143                         'hide_empty'               => false, 
    144                         'include_last_update_time' => false, 
    145                         'hierarchical'             => 1, 
    146                         'exclude'                  => '', 
    147                         'include'                  => '', 
    148                         'number'                   => '', 
    149                         'pad_counts'               => false ); 
    150  
    151         $items_counter = $counter; 
    152  
    153         // Get all categories 
    154         $categories_array = get_categories( $category_args ); 
    155  
    156         if ( !$categories_array ) { 
    157                 _e('Not Found'); 
    158                 return $items_counter; 
     220function wp_nav_menu_item_taxonomy_metabox( $object, $taxonomy ) { 
     221        $args = array( 
     222                'child_of' => 0, 'orderby' => 'name', 'order' => 'ASC', 
     223                'hide_empty' => false, 'include_last_update_time' => false, 'hierarchical' => 1, 'exclude' => '', 
     224                'include' => '', 'number' => '', 'pad_counts' => false 
     225        ); 
     226         
     227        // Cache the query for a day. @todo: Make sure to flush transient when terms are updated. 
     228        $terms = get_transient( "nav_menu_items_{$taxonomy['args']->name}" ); 
     229        if ( false == $terms ) { 
     230                $terms = get_terms( $taxonomy['args']->name, $args ); 
     231                set_transient( "nav_menu_items_{$taxonomy['args']->name}", $terms, 86400 ); 
    159232        } 
    160  
    161         // Display Loop 
    162         foreach ( $categories_array as $cat_item ) { 
    163                 if ( $cat_item->parent == 0 ) { 
    164                         $cat_item = wp_setup_nav_menu_item( $cat_item, 'category', $items_counter ); 
    165                         // Custom Menu 
    166                         if ( $context == 'menu' ) { 
    167                                 ?> 
    168                                 <li id="menu-<?php echo $items_counter; ?>" value="<?php echo $items_counter; ?>"> 
    169                                         <?php 
    170                                                 echo wp_get_nav_menu_item($cat_item, 'menu'); 
    171                                                 $parentli = $cat_item->cat_ID; 
    172                                                 $items_counter++; 
    173                                                 $items_counter = wp_nav_menu_sub_items( $cat_item->cat_ID, $items_counter, $parentli, 'categories', 'menu' ); 
    174                                         ?> 
    175                                 </li> 
    176                                 <?php 
    177                         } elseif ( $context == 'default' ) { 
    178                                 // Sidebar Menu 
    179                                 ?> 
    180                                 <li> 
    181                                         <?php 
    182                                                 echo wp_get_nav_menu_item( $cat_item, 'default' ); 
    183                                                 $parentli = $cat_item->cat_ID; 
    184                                                 $items_counter++; 
    185                                                 $items_counter = wp_nav_menu_sub_items( $cat_item->cat_ID, $items_counter, $parentli, 'categories', 'default' ); 
    186                                         ?> 
    187                                 </li> 
    188                                 <?php 
     233         
     234        if ( !$terms ) 
     235                $error = '<li id="error">'. sprintf( __( 'No %s exists' ), $taxonomy['args']->label ) .'</li>'; 
     236         
     237        $term_names = ''; 
     238        if ( is_array($terms) ) { 
     239                foreach ( $terms as $term ) { 
     240                        if ( $term->name ) { 
     241                                $term_names .= htmlentities( $term->name ) .'|'; 
     242                        } else { 
     243                                $term_names = sprintf( __('No %s exists'), $taxonomy['args']->label ); 
    189244                        } 
    190245                } 
    191246        } 
    192         return $items_counter; 
     247         
     248        $id = sanitize_title_with_dashes( $taxonomy['args']->label ); 
     249        ?> 
     250        <p class="quick-search-wrap"> 
     251                <input type="text" class="quick-search regular-text" value="" /> 
     252                <a class="quick-search-submit button-secondary"><?php _e('Search'); ?></a> 
     253        </p> 
     254         
     255        <p class="button-controls"> 
     256                <a class="show-all"><?php _e('View All'); ?></a> 
     257                <a class="hide-all"><?php _e('Hide All'); ?></a> 
     258        </p> 
     259         
     260        <div id="existing-<?php echo esc_attr( $id ); ?>" class="list-wrap"> 
     261                <div class="list-container"> 
     262                        <ul class="list"> 
     263                                <?php echo isset( $error ) ? $error : wp_nav_menu_get_items( $terms, 'taxonomy', $taxonomy['args']->name ); ?> 
     264                        </ul> 
     265                </div><!-- /.list-container--> 
     266        </div><!-- /#existing-categories--> 
     267        <p class="add-to-menu"> 
     268                <a class="button-secondary"><?php _e('Add to Menu'); ?></a> 
     269        </p> 
     270        <input type="hidden" class="autocomplete" name="autocomplete-<?php echo esc_attr($taxonomy['args']->name); ?>-names" value="<?php echo esc_js( $term_names ); ?>" /> 
     271        <br class="clear" /> 
     272        <script type="text/javascript" charset="utf-8"> 
     273                // <![CDATA[ 
     274                jQuery(document).ready(function(){ 
     275                        wp_nav_menu_autocomplete('<?php echo esc_attr($id); ?>'); 
     276                }); 
     277                // ]]> 
     278        </script> 
     279        <?php 
    193280} 
    194281 
    195282/** 
    196  * Recursive function that gets sub menu items. 
     283 * Abstract function for returning all menu items of a menu item type. 
    197284 * 
    198285 * @since 3.0.0 
    199286 * 
    200  * @param string $childof  
    201  * @param string $items_counter  
    202  * @param string $parentli  
    203  * @param string $context  
    204  * @param string $output_type  
     287 * @param string $menu_items Array of objects containing all menu items to be displayed. 
     288 * @param string $object_type Menu item type. 
     289 * @param string $object Optional. Menu item type name. 
     290 * @param string $context Optional. The context for how the menu items should be formatted. 
     291 * @return string $ouput Menu items. 
    205292 */ 
    206 function wp_nav_menu_sub_items( $childof, $items_counter, $parentli, $context, $output_type ) { 
    207         $counter = $items_counter; 
     293function wp_nav_menu_get_items( $menu_items, $object_type, $object = null, $context = 'frontend' ) { 
     294        if ( !$menu_items ) 
     295                return __( 'Not Found' ); 
     296                 
     297        $output = ''; 
     298        $i = 1; 
     299        foreach ( $menu_items as $menu_item ) { 
     300                // convert the 'parent' taxonomy property to 'post_parent' 
     301                // so we don't have to duplicate this entire function. 
     302                if ( !isset($menu_item->post_parent) ) 
     303                        $menu_item->post_parent = $menu_item->parent; 
     304                 
     305                // Cleanest way to get all attachements 
     306                if ( 'attachment' == $object ) 
     307                        $menu_item->post_parent = 0; 
     308                 
     309                if ( 0 == $menu_item->post_parent ) { 
     310                        // Setup the menu item 
     311                        $menu_item = wp_setup_nav_menu_item( $menu_item, $object_type, $object );                        
     312                        $attributes = ( 'backend' == $context ) ? ' id="menu-item-'. $i .'" value="'. $i .'"' : ''; 
     313                         
     314                        $output .= '<li'. $attributes .'>'; 
     315                        $output .= wp_get_nav_menu_item( $menu_item, $object_type, $object ); 
     316                        $output .= wp_get_nav_menu_sub_items( $menu_item->ID, $object_type, $object, $context ); 
     317                        $output .= '</li>'; 
    208318 
    209         // Custom Menu 
    210         if ( $output_type == 'menu' ) { 
    211                 $sub_args = array( 
    212                 'child_of' => $childof, 
    213                 'hide_empty' => false, 
    214                 'parent' => $childof); 
    215         } elseif ( $output_type == 'default' ) { 
    216                 // Sidebar Menu 
    217                 $sub_args = array( 
    218                 'child_of' => $childof, 
    219                 'hide_empty' => false, 
    220                 'parent' => $childof); 
     319                        ++$i; 
     320                } 
    221321        } 
     322         
     323        return $output; 
     324} 
    222325 
    223         if ( $context == 'categories' ) { 
    224                 // Get Sub Category Items 
    225                 $item_type = 'category'; 
    226                 $sub_array = get_categories($sub_args); 
    227         } elseif ($context == 'pages') { 
    228                 // Get Sub Page Items 
    229                 $item_type = 'page'; 
    230                 $sub_array = get_pages($sub_args); 
    231         } else { 
    232                 $item_type = 'custom'; 
    233                 $sub_array = array(); 
     326/** 
     327 * Recursive function to retrieve sub menu items. 
     328 * 
     329 * @since 3.0.0 
     330 * 
     331 * @param string $childof The Parent ID. 
     332 * @param string $object_type The object type. 
     333 * @param string $object The object name. 
     334 * @return string $output sub menu items. 
     335 */ 
     336function wp_get_nav_menu_sub_items( $childof, $object_type, $object = null, $context = 'frontend' ) { 
     337        $args = array( 'child_of' => $childof, 'parent' => $childof, 'hide_empty' => false, ); 
     338         
     339        switch ( $object_type ) { 
     340                case 'post_type': 
     341                        $hierarchical_post_types = get_post_types( array( 'hierarchical' => true ) ); 
     342                        if ( in_array( $object, $hierarchical_post_types ) ) { 
     343                                $args['post_type'] = $object; 
     344                                $sub_menu_items = get_pages( $args ); 
     345                        } else { 
     346                                $sub_menu_items = array(); 
     347                        } 
     348                        break; 
     349                         
     350                case 'taxonomy': 
     351                        if ( is_taxonomy_hierarchical( $object ) ) { 
     352                                $sub_menu_items = get_terms( $object, $args ); 
     353                        } else { 
     354                                $sub_menu_items = array(); 
     355                        } 
     356                        break; 
     357                 
     358                default: 
     359                        $sub_menu_items = array(); 
     360                        break; 
    234361        } 
     362         
     363        $output = ''; 
     364        $i = 1; 
     365        if ( !empty($sub_menu_items) && !is_wp_error($sub_menu_items) ) { 
     366                $output .= '<ul class="sub-menu menu-item-type-'. $object_type .'">'; 
     367                foreach ( $sub_menu_items as $menu_item ) { 
     368                        // Setup the menu item 
     369                        $menu_item = wp_setup_nav_menu_item( $menu_item, $object_type, $object ); 
     370                        $attributes = ( 'backend' == $context ) ? ' id="menu-item-'. $i .'" value="'. $i .'"' : ''; 
    235371 
    236         if ( $sub_array ) { 
    237                 ?> 
    238                 <ul id="sub-menu-<?php echo $context ?>"> 
    239                 <?php 
    240                 // Display Loop 
    241                 foreach ( $sub_array as $sub_item ) { 
    242                         $sub_item = wp_setup_nav_menu_item( $sub_item, $item_type, $counter ); 
    243                         if ( $output_type == 'menu' ) { 
    244                                 ?> 
    245                                 <li id="menu-<?php echo $counter; ?>" value="<?php echo $counter; ?>"> 
    246                                         <?php 
    247                                                 echo wp_get_nav_menu_item( $sub_item, 'menu' ); 
    248                                                 $counter++; 
    249                                                 $counter = wp_nav_menu_sub_items( $sub_item->ID, $counter, $sub_item->ID, $context, 'menu' ); 
    250                                         ?> 
    251                                 </li> 
    252                                 <?php 
    253                         } elseif ( $output_type == 'default' ) { 
    254                                 // Sidebar Menu 
    255                                 ?> 
    256                                 <li> 
    257                                         <?php 
    258                                                 echo wp_get_nav_menu_item( $sub_item, 'default' ); 
    259                                                 //$counter++; 
    260                                                 $counter = wp_nav_menu_sub_items( $sub_item->ID, $counter, $sub_item->ID, $context, 'default' ); 
    261                                         ?> 
    262                                 </li> 
     372                        $output .= '<li'. $attributes .'>'; 
     373                        $output .= wp_get_nav_menu_item( $menu_item, $object_type, $object ); 
     374                        $output .= wp_get_nav_menu_sub_items( $menu_item->ID, $object_type, $object ); 
     375                        $output .= '</li>'; 
    263376 
    264                                 <?php 
    265                         } 
     377                        ++$i; 
    266378                } 
    267                 ?> 
    268                 </ul> 
    269         <?php 
     379                $output .= '</ul>'; 
    270380        } 
    271         return $counter; 
     381        return $output; 
    272382} 
    273383?> 
     384 No newline at end of file 
  • wp-admin/js/nav-menu-default-items.dev.js

     
    1515         
    1616        wp_drag_and_drop(); 
    1717         
    18         wp_update_post_data(); 
     18        // Delete AYS 
     19        $('#update-nav-menu .deletion').click(function(){ 
     20                if ( confirm( navMenuL10n.warnDelete ) ) { 
     21                        return true; 
     22                } else { 
     23                        return false; 
     24                }; 
     25        }); 
    1926         
    2027        // Handle Save Button Clicks 
    2128        $('#save_menu').click(function(){ 
    2229                return wp_update_post_data(); 
    2330        }); 
    24                  
     31         
     32        // close postboxes that should be closed 
     33        $('.if-js-closed').removeClass('if-js-closed').addClass('closed'); 
     34         
     35        // postboxes setup 
     36        postboxes.add_postbox_toggles('menus'); 
     37         
    2538        // Clear the quick search textbox 
    2639        $('.quick-search').click(function(){ 
    2740                $(this).attr( 'value', '' ); 
     
    3851        }); 
    3952         
    4053        // Delete menu item 
    41         $('#menu-container .item-delete').live( 'click', function(){ 
     54        $('#menu-container .item-delete').live( 'click', function(e){ 
    4255                return wp_remove_menu_item( $(this).attr('value') ); 
    4356        }); 
    4457         
    4558        // Update menu item settings (thickbox) 
    4659        $('#update-menu-item').click(function(){ 
    4760                wp_update_menu_item(); 
    48                 tb_remove(); 
    49                  
    50                 // Give feedback to the user 
    51                 var id = $('#edit-item-id').val(); 
    52                 $('#menu-' + id + ' dt:first').animate( { backgroundColor: '#FFFF33' }, { duration: 'normal', complete: function() { jQuery(this).css( 'backgroundColor', '' ); }}); 
     61                return tb_remove(); 
    5362        }); 
    5463         
    5564        // Close thickbox 
     
    5867        }); 
    5968         
    6069        // Show All Button 
    61         $('.show-all').click(function(){ 
    62                 $(this).offsetParent().find('#add-buttons-actions').attr( 'style','margin-bottom: 10px;' ); 
    63                 $(this).offsetParent().find('.list-wrap').css( 'display','block' ); 
    64                 $(this).siblings('.quick-search').attr( 'value', '' );           
    65                 $(this).offsetParent().find('.list-wrap li').css( 'display', 'block' ); 
    66                 $(this).hide(); 
    67                 $(this).siblings('.hide-all').show(); 
     70        $('.show-all').click(function(e){ 
     71                jQuery(e.currentTarget).parent().siblings('.list-wrap').css( 'display', 'block' ); 
     72                jQuery(e.currentTarget).parent().siblings('.list-wrap').find('li').css( 'display', 'block' ); 
     73                jQuery(e.currentTarget).hide(); 
     74                jQuery(e.currentTarget).siblings('.hide-all').show(); 
    6875        }); 
    6976         
    7077        // Hide All Button 
    71         $('.hide-all').click(function(){ 
    72                 $(this).offsetParent().find('#add-buttons-actions').attr( 'style','margin-bottom: 0px;' ); 
    73                 $(this).offsetParent().find('.list-wrap').css( 'display','none' ); 
    74                 $(this).siblings('.quick-search').attr( 'value', 'Search' ); 
    75                 $(this).offsetParent().find('.list-wrap li').css( 'display', 'none' ); 
    76                 $(this).hide(); 
    77                 $(this).siblings('.show-all').show(); 
     78        $('.hide-all').click(function(e){ 
     79                jQuery(e.currentTarget).parent().siblings('.list-wrap').css( 'display', 'none' ); 
     80                jQuery(e.currentTarget).parent().siblings('.list-wrap').find('li').css( 'display', 'none' ); 
     81                jQuery(e.currentTarget).hide(); 
     82                jQuery(e.currentTarget).siblings('.show-all').show(); 
    7883        }); 
    7984 
    80         // Add menu item to queue 
    81         $('.list input').click(function(){ 
    82  
    83                 var item_type = jQuery(this).parent().siblings('.item-type').val(); 
    84                 var item_title = jQuery(this).parent().siblings('.item-title').val(); 
    85                 var item_url = jQuery(this).parent().siblings('.item-url').val(); 
    86                 var item_id = jQuery(this).parent().siblings('.item-dbid').val(); 
    87                 var item_parent_id = jQuery(this).parent().siblings('.item-parent').val(); 
    88                 var item_description = jQuery(this).parent().siblings('.item-description').val(); 
    89                  
    90                 return wp_update_queue( $(this), item_type, item_title, item_url, item_id, item_parent_id, item_description ); 
     85        // Add menu items into the menu 
     86        $('.add-to-menu').click(function(e){ 
     87                return wp_add_checked_items_to_menu(e.currentTarget); 
    9188        }); 
    9289 
    93         // Add queued menu items into the menu 
    94         $('.enqueue a').click(function(){ 
    95                 return wp_add_queued_items_to_menu(this); 
    96         }); 
    97  
    98         // Create the link, add it to the menu + available links section 
    99         $('#add-custom-link .add-to-menu a').click(function(){ 
    100                 var link_url = $(this).offsetParent().find('#menu-item-url').val(); 
    101                 var link_name = $(this).offsetParent().find('#menu-item-name').val(); 
     90        // Create a new link then add it to the menu 
     91        $('#add-custom-links .add-to-menu a').click(function(e){ 
     92                var link_url = jQuery(e.currentTarget).parent().parent().find('#custom-menu-item-url').val(); 
     93                var link_name = jQuery(e.currentTarget).parent().parent().find('#custom-menu-item-name').val(); 
    10294                 
    103                 wp_add_queued_items_to_menu( this ); 
    104                                  
    105                 // Don't save the link if it was left with it's default settings 
    106                 if ( 'http://' == link_url || 'Menu Item' == link_name ) 
    107                         return; 
    108  
    109                 // and update the Menu with the new link 
    110                 wp_add_item_to_menu( 'custom', link_name, link_url, 0, 0, '' ); 
     95                // Add link to menu 
     96                wp_add_item_to_menu( 0, '', 'custom', navMenuL10n.custom, 0, link_name, link_url, '', '', '_none', '', '' ); 
    11197        }); 
    11298}); 
     99 No newline at end of file 
  • wp-admin/js/nav-menu-dynamic-functions.js

     
    1 function wp_update_links_list(e){var link='<li><dl><dt><label class="item-title"><input type="checkbox" id="link-'+e.link_id+'" name="'+e.link_name+'" value="'+e.link_url+'" />'+e.link_name+"</label></dt></dl></li>";jQuery("#available-links .list").prepend(link);jQuery("#available-links .list #link-"+e.link_id).parent().animate({backgroundColor:"#FFFF33"},{duration:"normal",complete:function(){jQuery(this).css("backgroundColor","")}})}function wp_edit_menu_item(id){var itemType=jQuery("#item-type"+id).val();var itemTitle=jQuery("#item-title"+id).val();var itemURL=jQuery("#item-url"+id).val();var itemAttrTitle=jQuery("#item-attr-title"+id).val();var itemTarget=jQuery("#item-target"+id).val();var itemDesc=jQuery("#item-description"+id).val();if("page"==itemType||"category"==itemType){jQuery("#edit-item-url").attr("disabled","disabled")}jQuery("#edit-item-id").val(id);jQuery("#edit-item-title").val(itemTitle);jQuery("#edit-item-url").val(itemURL);jQuery("#edit-item-attr-title").val(itemAttrTitle);jQuery("#edit-item-target").val(itemTarget);jQuery("#edit-item-target option[value='"+itemTarget+"']").attr("selected","selected");jQuery("#edit-item-description").val(itemDesc)}function wp_update_menu_item(){var id=jQuery("#edit-item-id").val();var itemTitle=jQuery("#edit-item-title").val();var itemURL=jQuery("#edit-item-url").val();var itemAttrTitle=jQuery("#edit-item-attr-title").val();var itemTarget=jQuery("#edit-item-target").val();var itemDesc=jQuery("#edit-item-description").val();jQuery("#menu-"+id).find(".item-title:first").html(itemTitle);jQuery("#item-title"+id).val(itemTitle);jQuery("#item-url"+id).val(itemURL);jQuery("#item-attr-title"+id).val(itemAttrTitle);jQuery("#item-target"+id).val(itemTarget);jQuery("#item-description"+id).val(itemDesc)}function wp_remove_menu_item(o){var todelete=document.getElementById("menu-"+o);if(todelete){jQuery(todelete).find("dt").each(function(){jQuery(this).animate({backgroundColor:"#FF3333"},{duration:"normal",complete:function(){jQuery(this).parent().parent().remove()}})});wp_update_post_data()}}function wp_update_post_data(){var i=0;jQuery(".menu li").each(function(i){i=i+1;var j=jQuery(this).attr("value");jQuery(this).find("#item-position"+j).attr("value",i);jQuery(this).attr("id","menu-"+i);jQuery(this).attr("value",i);jQuery(this).find("#item-dbid"+j).attr("name","item-dbid"+i);jQuery(this).find("#item-dbid"+j).attr("id","item-dbid"+i);jQuery(this).find("#item-postmenu"+j).attr("name","item-postmenu"+i);jQuery(this).find("#item-postmenu"+j).attr("id","item-postmenu"+i);var p=jQuery(this).find("#item-parent"+j).parent().parent().parent().attr("value");jQuery(this).find("#item-parent"+j).attr("name","item-parent"+i);jQuery(this).find("#item-parent"+j).attr("id","item-parent"+i);if(p){}else{p=0}jQuery(this).find("#item-parent"+j).attr("value",p);jQuery(this).find("#item-title"+j).attr("name","item-title"+i);jQuery(this).find("#item-title"+j).attr("id","item-title"+i);jQuery(this).find("#item-url"+j).attr("name","item-url"+i);jQuery(this).find("#item-url"+j).attr("id","item-url"+i);jQuery(this).find("#item-description"+j).attr("name","item-description"+i);jQuery(this).find("#item-description"+j).attr("id","item-description"+i);jQuery(this).find("#item-attr-title"+j).attr("name","item-attr-title"+i);jQuery(this).find("#item-attr-title"+j).attr("id","item-attr-title"+i);jQuery(this).find("#item-target"+j).attr("name","item-target"+i);jQuery(this).find("#item-target"+j).attr("id","item-target"+i);jQuery(this).find("#item-position"+j).attr("name","item-position"+i);jQuery(this).find("#item-position"+j).attr("id","item-position"+i);jQuery(this).find("#item-type"+j).attr("name","item-type"+i);jQuery(this).find("#item-type"+j).attr("id","item-type"+i);jQuery("#li-count").attr("value",i)})}function wp_add_item_to_menu(item_type,item_title,item_url,item_id,item_parent_id,item_description){var randomnumber=wp_get_unique_menu_id();jQuery(".menu").append('<li id="menu-'+randomnumber+'" value="'+randomnumber+'"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">'+item_title+'</span><span class="item-controls"><span class="item-type">'+item_type+'</span><a class="item-edit thickbox" id="edit'+randomnumber+'" value="'+randomnumber+'" onClick="wp_edit_menu_item('+randomnumber+')" title="'+navMenuL10n.thickbox+'" href="#TB_inline?height=380&width=300&inlineId=menu-item-settings">'+navMenuL10n.edit+'</a> | <a class="item-delete" id="delete'+randomnumber+'" value="'+randomnumber+'">Delete</a></span></dt></dl><input type="hidden" name="item-postmenu'+randomnumber+'" id="item-postmenu'+randomnumber+'" value="'+item_id+'" /><input type="hidden" name="item-parent'+randomnumber+'" id="item-parent'+randomnumber+'" value="'+item_parent_id+'" /><input type="hidden" name="item-title'+randomnumber+'" id="item-title'+randomnumber+'" value="'+item_title+'" /><input type="hidden" name="item-url'+randomnumber+'" id="item-url'+randomnumber+'" value="'+item_url+'" /><input type="hidden" name="item-description'+randomnumber+'" id="item-description'+randomnumber+'" value="'+item_description+'" /><input type="hidden" name="item-position'+randomnumber+'" id="item-position'+randomnumber+'" value="'+randomnumber+'" /><input type="hidden" name="item-type'+randomnumber+'" id="item-type'+randomnumber+'" value="'+item_type+'" /><input type="hidden" name="item-attr-title'+randomnumber+'" id="item-attr-title'+randomnumber+'" value="'+item_title+'" /><input type="hidden" name="item-target'+randomnumber+'" id="item-target'+randomnumber+'" value="0" /></li>');jQuery(".menu #menu-"+randomnumber+" dt:first").animate({backgroundColor:"#FFFF33"},{duration:"normal",complete:function(){jQuery(this).css("backgroundColor","")}});wp_drag_and_drop();wp_update_post_data();tb_init("a.thickbox, area.thickbox, input.thickbox")}function wp_update_queue(e,item_type,item_title,item_url,item_id,item_parent_id,item_description){var randomnumber=wp_get_unique_menu_id();var menu_item_id=jQuery(e).attr("id");if(jQuery(e).attr("checked")){jQuery("#queue").append('<li id="menu-'+randomnumber+'" value="'+randomnumber+'"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">'+item_title+'</span><span class="item-controls"><span class="item-type">'+item_type+'</span><a class="item-edit thickbox" id="edit'+randomnumber+'" value="'+randomnumber+'" onClick="wp_edit_menu_item('+randomnumber+')" title="'+navMenuL10n.thickbox+'" href="#TB_inline?height=380&width=300&inlineId=menu-item-settings">'+navMenuL10n.edit+'</a> | <a class="item-delete" id="delete'+randomnumber+'" value="'+randomnumber+'">Delete</a></span></dt></dl><input type="hidden" name="item-postmenu'+randomnumber+'" id="item-postmenu'+randomnumber+'" value="'+item_id+'" /><input type="hidden" name="item-parent'+randomnumber+'" id="item-parent'+randomnumber+'" value="'+item_parent_id+'" /><input type="hidden" name="item-title'+randomnumber+'" id="item-title'+randomnumber+'" value="'+item_title+'" /><input type="hidden" name="item-url'+randomnumber+'" id="item-url'+randomnumber+'" value="'+item_url+'" /><input type="hidden" name="item-description'+randomnumber+'" id="item-description'+randomnumber+'" value="'+item_description+'" /><input type="hidden" name="item-position'+randomnumber+'" id="item-position'+randomnumber+'" value="'+randomnumber+'" /><input type="hidden" name="item-type'+randomnumber+'" id="item-type'+randomnumber+'" value="'+item_type+'" /><input type="hidden" name="item-attr-title'+randomnumber+'" id="item-attr-title'+randomnumber+'" value="'+item_title+'" /><input type="hidden" name="item-target'+randomnumber+'" id="item-target'+randomnumber+'" value="0" /><input type="hidden" name="item-id'+randomnumber+'" id="item-id'+randomnumber+'" value="'+menu_item_id+'" /></li>')}else{if(menu_item_id==jQuery('#queue li input[name^="item-id"]').val()){jQuery('#queue li input[name^="item-id"]').parent().remove()}}}function wp_add_queued_items_to_menu(button){var items=jQuery("#queue").children();jQuery("#queue").empty();jQuery(".menu").append(items);jQuery(items).each(function(){jQuery(this).find("dt").animate({backgroundColor:"#FFFF33"},{duration:"normal",complete:function(){jQuery(this).css("backgroundColor","")}})});jQuery(button).offsetParent().find(".list-container input").attr("checked",false);wp_update_post_data();wp_drag_and_drop();tb_init("a.thickbox, area.thickbox, input.thickbox")}function wp_drag_and_drop(){jQuery(".menu li").each(function(){if(!jQuery(this).children(".dropzone").attr("class")){jQuery(this).prepend('<div class="dropzone"></div>')}});jQuery(".menu li").draggable({handle:" > dl",opacity:0.8,addClasses:false,helper:"clone",zIndex:100,});jQuery(".menu li dl, .menu li .dropzone").droppable({accept:".menu li",tolerance:"pointer",drop:function(e,ui){var li=jQuery(this).parent();var child=!jQuery(this).hasClass("dropzone");if(child&&li.children("ul").length==0){li.append('<ul class="sub-menu" />')}if(child){li.children("ul").append(ui.draggable)}else{li.before(ui.draggable)}li.find("dl,.dropzone").css({backgroundColor:"",borderColor:""});var draggablevalue=ui.draggable.attr("value");var droppablevalue=li.attr("value");li.find("#menu-"+draggablevalue).find("#parent"+draggablevalue).val(droppablevalue);jQuery(this).parent().find("dt").removeAttr("style");jQuery(this).parent().find("div:first").removeAttr("style")},over:function(){if(jQuery(this).attr("class")=="dropzone ui-droppable"){jQuery(this).parent().find("div:first").css("background","none").css("height","50px")}else{if(jQuery(this).attr("class")=="ui-droppable"){jQuery(this).parent().find("dt:first").css("background","#d8d8d8")}else{}}var parentid=jQuery(this).parent().attr("id")},out:function(){jQuery(this).parent().find("dt").removeAttr("style");jQuery(this).parent().find("div:first").removeAttr("style");jQuery(this).filter(".dropzone").css({borderColor:""})}})}function wp_get_unique_menu_id(){var count=jQuery(".menu li").length+1;var randomnumber=count;var validatetest=0;try{var test=document.getElementById("menu-"+randomnumber.toString()).value}catch(err){validatetest=1}while(validatetest==0){randomnumber=randomnumber+1;try{var test2=document.getElementById("menu-"+randomnumber.toString()).value}catch(err){validatetest=1}}return randomnumber}; 
    2  No newline at end of file 
     1function wp_nav_menu_autocomplete(id){jQuery("#add-"+id+" .quick-search").autocomplete(jQuery("#add-"+id+" .autocomplete").val().split("|"));jQuery("#add-"+id+" .quick-search").result(function(event,data,formatted){jQuery("#add-"+id+" .list-wrap").css("display","block");jQuery("#add-"+id+" .list-wrap li:contains('"+data+"')").css("display","block");jQuery("#add-"+id+" .show-all").hide();jQuery("#add-"+id+" .hide-all").show()})}function wp_edit_menu_item(id){var item_type=jQuery("#menu-item-type"+id).val();var item_title=jQuery("#menu-item-title"+id).val();var item_link=jQuery("#menu-item-url"+id).val();var item_attr_title=jQuery("#menu-item-attr-title"+id).val();var item_target=jQuery("#menu-item-target"+id).val();var item_description=jQuery("#menu-item-description"+id).val();var item_classes=jQuery("#menu-item-classes"+id).val();var item_xfn=jQuery("#menu-item-xfn"+id).val();if("custom"!=item_type){jQuery("#edit-menu-item-url").attr("disabled","disabled")}jQuery("#edit-menu-item-id").val(id);jQuery("#edit-menu-item-title").val(item_title);jQuery("#edit-menu-item-url").val(item_link);jQuery("#edit-menu-item-attr-title").val(item_attr_title);jQuery("#edit-menu-item-target").val(item_target);jQuery("#edit-menu-item-target option[value='"+item_target+"']").attr("selected","selected");jQuery("#edit-menu-item-description").val(item_description);jQuery("#edit-menu-item-classes").val(item_classes);jQuery("#edit-menu-item-xfn").val(item_xfn);jQuery("#edit-menu-item-title").focus()}function wp_update_menu_item(){var id=jQuery("#edit-menu-item-id").val();var item_title=jQuery("#edit-menu-item-title").val();var item_link=jQuery("#edit-menu-item-url").val();var item_attr_title=jQuery("#edit-menu-item-attr-title").val();var item_target=jQuery("#edit-menu-item-target").val();var item_description=jQuery("#edit-menu-item-description").val();var item_classes=jQuery("#edit-menu-item-classes").val();var item_xfn=jQuery("#edit-menu-item-xfn").val();jQuery(".menu #menu-item"+id).find("span.item-title").html(item_title);jQuery(".menu #menu-item-title"+id).val(item_title);jQuery(".menu #menu-item-url"+id).val(item_link);jQuery(".menu #menu-item-attr-title"+id).val(item_attr_title);jQuery(".menu #menu-item-target"+id).val(item_target);jQuery(".menu #menu-item-description"+id).val(item_description);jQuery(".menu #menu-item-classes"+id).val(item_classes);jQuery(".menu #menu-item-xfn"+id).val(item_xfn);jQuery(".menu #menu-item"+id+" dt:first").animate({backgroundColor:"#FFFF33"},{duration:"normal",complete:function(){jQuery(this).css("backgroundColor","")}})}function wp_remove_menu_item(o){var todelete=document.getElementById("menu-item"+o);if(todelete){jQuery(todelete).find("dt").each(function(){jQuery(this).animate({backgroundColor:"#FF3333"},{duration:"normal",complete:function(){jQuery(this).parent().parent().remove()}})})}}function wp_add_item_to_menu(item_db_id,item_object_id,item_type,item_append,item_parent_id,item_title,item_url,item_description,item_attr_title,item_target,item_classes,item_xfn){var randomnumber=wp_get_unique_menu_id();var hidden=wp_get_hidden_inputs(randomnumber,item_db_id,item_object_id,item_type,item_append,item_parent_id,item_title,item_url,item_description,item_attr_title,item_target,item_classes,item_xfn);jQuery(".menu").append('<li id="menu-item'+randomnumber+'" value="'+randomnumber+'"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">'+item_title+'</span><span class="item-controls"><span class="item-type">'+item_append+'</span><a class="item-edit thickbox" id="edit'+randomnumber+'" value="'+randomnumber+'" onClick="wp_edit_menu_item('+randomnumber+')" title="'+navMenuL10n.thickbox+'" href="#TB_inline?height=540&width=300&inlineId=menu-item-settings">'+navMenuL10n.edit+'</a> | <a class="item-delete" id="delete'+randomnumber+'" value="'+randomnumber+'">Delete</a></span></dt></dl>'+hidden+"</li>");jQuery(".menu #menu-item"+randomnumber+" dt:first").animate({backgroundColor:"#FFFF33"},{duration:"normal",complete:function(){jQuery(this).css("backgroundColor","")}});wp_drag_and_drop();tb_init("a.thickbox, area.thickbox, input.thickbox")}function wp_add_checked_items_to_menu(button){var items=jQuery(button).siblings(".list-wrap").find(":checked");if(0==items.length){return false}jQuery(items).each(function(){var item_type=jQuery(this).parent().siblings(".menu-item-type").val();if("custom"==item_type){var item_attr_title=jQuery(this).parent().siblings(".menu-item-attr-title").val();var item_target=jQuery(this).parent().siblings(".menu-item-target").val();var item_classes=jQuery(this).parent().siblings(".menu-item-classes").val();var item_xfn=jQuery(this).parent().siblings(".menu-item-xfn").val()}else{var item_attr_title="";var item_target="_none";var item_classes="";var item_xfn=""}var item_db_id=jQuery(this).parent().siblings(".menu-item-db-id").val();var item_object_id=jQuery(this).parent().siblings(".menu-item-object-id").val();var item_append=jQuery(this).parent().siblings(".menu-item-append").val();var item_parent_id=jQuery(this).parent().siblings(".menu-item-parent-id").val();var item_title=jQuery(this).parent().siblings(".menu-item-title").val();var item_url=jQuery(this).parent().siblings(".menu-item-url").val();var item_description=jQuery(this).parent().siblings(".menu-item-description").val();if(undefined==item_description){item_description=""}wp_add_item_to_menu(item_db_id,item_object_id,item_type,item_append,item_parent_id,item_title,item_url,item_description,item_attr_title,item_target,item_classes,item_xfn);jQuery(this).attr("checked",false)})}function wp_drag_and_drop(){jQuery(".menu li").each(function(){if(!jQuery(this).children(".dropzone").attr("class")){jQuery(this).prepend('<div class="dropzone"></div>')}});jQuery(".menu li").draggable({handle:" > dl",opacity:0.8,addClasses:false,helper:"clone",zIndex:100});jQuery(".menu li dl, .menu li .dropzone").droppable({accept:".menu li",tolerance:"pointer",drop:function(e,ui){var li=jQuery(this).parent();var child=!jQuery(this).hasClass("dropzone");if(child&&li.children("ul").length==0){li.append('<ul class="sub-menu" />')}if(child){li.children("ul").append(ui.draggable)}else{li.before(ui.draggable)}li.find("dl,.dropzone").css({backgroundColor:"",borderColor:""});var draggablevalue=ui.draggable.attr("value");var droppablevalue=li.attr("value");li.find("#menu-"+draggablevalue).find("#parent"+draggablevalue).val(droppablevalue);jQuery(this).parent().find("dt").removeAttr("style");jQuery(this).parent().find("div:first").removeAttr("style")},over:function(){if(jQuery(this).attr("class")=="dropzone ui-droppable"){jQuery(this).parent().find("div:first").css("background","none").css("height","50px")}else{if(jQuery(this).attr("class")=="ui-droppable"){jQuery(this).parent().find("dt:first").css("background","#d8d8d8")}else{}}var parentid=jQuery(this).parent().attr("id")},out:function(){jQuery(this).parent().find("dt").removeAttr("style");jQuery(this).parent().find("div:first").removeAttr("style");jQuery(this).filter(".dropzone").css({borderColor:""})}})}function wp_update_post_data(){var i=0;jQuery(".menu li").each(function(i){i=i+1;var j=jQuery(this).attr("value");jQuery(this).find("#menu-item-position"+j).attr("value",i);jQuery(this).attr("id","menu-item"+i);jQuery(this).attr("value",i);jQuery(this).find("#menu-item-db-id"+j).attr("id","menu-item-db-id"+i);jQuery(this).find("#menu-item-object-id"+j).attr("id","menu-item-object-id"+i);jQuery(this).find("#menu-item-append"+j).attr("id","menu-item-append"+i);jQuery(this).find("#menu-item-type"+j).attr("id","menu-item-type"+i);jQuery(this).find("#menu-item-position"+j).attr("id","menu-item-position"+i);var p=jQuery(this).find("#menu-item-parent-id"+j).parent().parent().parent().attr("value");jQuery(this).find("#menu-item-parent-id"+j).attr("id","menu-item-parent-id"+i);if(p){}else{p=0}jQuery(this).find("#menu-item-parent-id"+j).attr("value",p);jQuery(this).find("#menu-item-title"+j).attr("id","menu-item-title"+i);jQuery(this).find("#menu-item-url"+j).attr("id","menu-item-url"+i);jQuery(this).find("#menu-item-description"+j).attr("id","menu-item-description"+i);jQuery(this).find("#menu-item-classes"+j).attr("id","menu-item-classes"+i);jQuery(this).find("#menu-item-xfn"+j).attr("id","menu-item-xfn"+i);jQuery(this).find("#menu-item-description"+j).attr("id","menu-item-description"+i);jQuery(this).find("#menu-item-attr-title"+j).attr("id","menu-item-attr-title"+i);jQuery(this).find("#menu-item-target"+j).attr("id","menu-item-target"+i);jQuery("#li-count").attr("value",i)})}function wp_get_unique_menu_id(){var count=jQuery(".menu li").length+1;var randomnumber=count;var validatetest=0;try{var test=document.getElementById("menu-"+randomnumber.toString()).value}catch(err){validatetest=1}while(validatetest==0){randomnumber=randomnumber+1;try{var test2=document.getElementById("menu-"+randomnumber.toString()).value}catch(err){validatetest=1}}return randomnumber}function wp_get_hidden_inputs(randomnumber,item_db_id,item_object_id,item_type,item_append,item_parent_id,item_title,item_url,item_description,item_attr_title,item_target,item_classes,item_xfn){var hidden="";hidden+='<input type="hidden" name="menu-item-db-id[]" id="menu-item-db-id'+randomnumber+'" value="'+item_db_id+'" />';hidden+='<input type="hidden" name="menu-item-object-id[]" id="menu-item-object-id'+randomnumber+'" value="'+item_object_id+'" />';hidden+='<input type="hidden" name="menu-item-type[]" id="menu-item-type'+randomnumber+'" value="'+item_type+'" />';hidden+='<input type="hidden" name="menu-item-append[]" id="menu-item-append'+randomnumber+'" value="'+item_append+'" />';hidden+='<input type="hidden" name="menu-item-parent-id[]" id="menu-item-parent-id'+randomnumber+'" value="'+item_parent_id+'" />';hidden+='<input type="hidden" name="menu-item-position[]" id="menu-item-position'+randomnumber+'" value="'+randomnumber+'" />';hidden+='<input type="hidden" name="menu-item-title[]" id="menu-item-title'+randomnumber+'" value="'+item_title+'" />';hidden+='<input type="hidden" name="menu-item-attr-title[]" id="menu-item-attr-title'+randomnumber+'" value="'+item_attr_title+'" />';hidden+='<input type="hidden" name="menu-item-url[]" id="menu-item-url'+randomnumber+'" value="'+item_url+'" />';hidden+='<input type="hidden" name="menu-item-target[]" id="menu-item-target'+randomnumber+'" value="'+item_target+'" />';hidden+='<input type="hidden" name="menu-item-description[]" id="menu-item-description'+randomnumber+'" value="'+item_description+'" />';hidden+='<input type="hidden" name="menu-item-classes[]" id="menu-item-classes'+randomnumber+'" value="'+item_classes+'" />';hidden+='<input type="hidden" name="menu-item-xfn[]" id="menu-item-xfn'+randomnumber+'" value="'+item_xfn+'" />';return hidden}; 
     2 No newline at end of file 
  • wp-admin/js/nav-menu-dynamic-functions.dev.js

     
    88 * @subpackage Administration 
    99 */ 
    1010 
    11 /** 
    12  * Adds a link to the available links section 
    13  * 
    14  * @param object e - An object recieved via ajax 
    15  */ 
    16 function wp_update_links_list(e) { 
    17         var link = '<li><dl><dt><label class="item-title"><input type="checkbox" id="link-'+ e.link_id +'" name="'+ e.link_name +'" value="'+ e.link_url +'" />'+ e.link_name +'</label></dt></dl></li>'; 
    18                  
    19         // Prepend the link to the available links section 
    20         jQuery('#available-links .list').prepend( link ); 
    21          
    22         // Give feedback to the user 
    23         jQuery('#available-links .list #link-' + e.link_id).parent().animate( { backgroundColor: '#FFFF33' }, { duration: 'normal', complete: function() { jQuery(this).css( 'backgroundColor', '' ); }}); 
     11function wp_nav_menu_autocomplete( id ) { 
     12        jQuery('#add-'+ id +' .quick-search').autocomplete(jQuery( '#add-'+ id +' .autocomplete' ).val().split('|')); 
     13 
     14        jQuery('#add-'+ id +' .quick-search').result(function(event, data, formatted) { 
     15                jQuery('#add-'+ id +' .list-wrap').css( 'display', 'block' ); 
     16                jQuery("#add-"+ id +" .list-wrap li:contains('" + data + "')").css( 'display', 'block' ); 
     17                jQuery('#add-'+ id +' .show-all').hide(); 
     18                jQuery('#add-'+ id +' .hide-all').show(); 
     19        }); 
    2420} 
    2521 
    2622/** 
    2723 * Populate the thickbox window with the selected menu items 
    2824 * 
    29  * @param int o - the id of the menu li to edit. 
     25 * @param int id - the id of the menu li to edit. 
    3026 */ 
    3127function wp_edit_menu_item( id ) { 
    32         var itemType = jQuery('#item-type' + id).val(); 
    33         var itemTitle = jQuery('#item-title' + id).val(); 
    34         var itemURL = jQuery('#item-url' + id).val(); 
    35         var itemAttrTitle = jQuery('#item-attr-title' + id).val(); 
    36         var itemTarget = jQuery('#item-target' + id).val(); 
    37         var itemDesc = jQuery('#item-description' + id).val(); 
     28        var item_type = jQuery('#menu-item-type' + id).val(); 
     29        var item_title = jQuery('#menu-item-title' + id).val(); 
     30        var item_link = jQuery('#menu-item-url' + id).val(); 
     31        var item_attr_title = jQuery('#menu-item-attr-title' + id).val(); 
     32        var item_target = jQuery('#menu-item-target' + id).val(); 
     33        var item_description = jQuery('#menu-item-description' + id).val(); 
     34        var item_classes = jQuery('#menu-item-classes' + id).val(); 
     35        var item_xfn = jQuery('#menu-item-xfn' + id).val(); 
    3836         
    39         // Disable the ability to edit the url for page and category items 
    40         if ( 'page' == itemType || 'category' == itemType ) 
    41                 jQuery( '#edit-item-url' ).attr('disabled', 'disabled' ); 
     37        // Only allow custom links to be editable. 
     38        if ( 'custom' != item_type ) 
     39                jQuery( '#edit-menu-item-url' ).attr('disabled', 'disabled' ); 
    4240         
    4341        // Populate the fields for thickbox 
    44         jQuery( '#edit-item-id' ).val(id); 
    45         jQuery( '#edit-item-title' ).val(itemTitle); 
    46         jQuery( '#edit-item-url' ).val(itemURL); 
    47         jQuery( '#edit-item-attr-title' ).val(itemAttrTitle); 
    48         jQuery( '#edit-item-target' ).val(itemTarget); 
    49         jQuery( "#edit-item-target option[value='" + itemTarget  + "']" ).attr('selected', 'selected'); 
    50         jQuery( '#edit-item-description' ).val(itemDesc); 
     42        jQuery( '#edit-menu-item-id' ).val(id); 
     43        jQuery( '#edit-menu-item-title' ).val(item_title); 
     44        jQuery( '#edit-menu-item-url' ).val(item_link); 
     45        jQuery( '#edit-menu-item-attr-title' ).val(item_attr_title); 
     46        jQuery( '#edit-menu-item-target' ).val(item_target); 
     47        jQuery( "#edit-menu-item-target option[value='" + item_target  + "']" ).attr('selected', 'selected'); 
     48        jQuery( '#edit-menu-item-description' ).val(item_description); 
     49        jQuery( '#edit-menu-item-classes' ).val(item_classes); 
     50        jQuery( '#edit-menu-item-xfn' ).val(item_xfn); 
     51         
     52        // focus 
     53        jQuery( '#edit-menu-item-title' ).focus(); 
    5154}; 
    5255 
    5356/** 
    5457 * Update the values for the menu item being editing 
    5558 */ 
    5659function wp_update_menu_item() { 
    57         var id = jQuery('#edit-item-id').val(); 
    58         var itemTitle = jQuery('#edit-item-title').val(); 
    59         var itemURL = jQuery('#edit-item-url').val(); 
    60         var itemAttrTitle = jQuery('#edit-item-attr-title').val(); 
    61         var itemTarget = jQuery('#edit-item-target').val(); 
    62         var itemDesc = jQuery('#edit-item-description').val(); 
     60        var id = jQuery('#edit-menu-item-id').val(); 
     61        var item_title = jQuery('#edit-menu-item-title').val(); 
     62        var item_link = jQuery('#edit-menu-item-url').val(); 
     63        var item_attr_title = jQuery('#edit-menu-item-attr-title').val(); 
     64        var item_target = jQuery('#edit-menu-item-target').val(); 
     65        var item_description = jQuery('#edit-menu-item-description').val(); 
     66        var item_classes = jQuery('#edit-menu-item-classes').val(); 
     67        var item_xfn = jQuery('#edit-menu-item-xfn').val(); 
    6368         
    64         // update menu item settings     
    65         jQuery('#menu-' + id).find('.item-title:first').html(itemTitle); 
    66         jQuery('#item-title' + id).val(itemTitle); 
    67         jQuery('#item-url' + id).val(itemURL); 
    68         jQuery('#item-attr-title' + id).val(itemAttrTitle); 
    69         jQuery('#item-target' + id).val(itemTarget); 
    70         jQuery('#item-description' + id).val(itemDesc); 
     69        // update menu item settings 
     70        jQuery('.menu #menu-item' + id).find('span.item-title').html(item_title); 
     71        jQuery('.menu #menu-item-title' + id).val(item_title); 
     72        jQuery('.menu #menu-item-url' + id).val(item_link); 
     73        jQuery('.menu #menu-item-attr-title' + id).val(item_attr_title); 
     74        jQuery('.menu #menu-item-target' + id).val(item_target); 
     75        jQuery('.menu #menu-item-description' + id).val(item_description); 
     76        jQuery('.menu #menu-item-classes' + id).val(item_classes); 
     77        jQuery('.menu #menu-item-xfn' + id).val(item_xfn); 
     78         
     79        jQuery('.menu #menu-item' + id + ' dt:first').animate( { backgroundColor: '#FFFF33' }, { duration: 'normal', complete: function() { jQuery(this).css( 'backgroundColor', '' ); }}); 
    7180} 
    7281 
    7382/** 
     
    7685 * @param int o - the id of the menu li to remove. 
    7786 */ 
    7887function wp_remove_menu_item( o ) { 
    79         var todelete = document.getElementById('menu-' + o); 
     88        var todelete = document.getElementById('menu-item' + o); 
    8089         
    8190        if ( todelete ) { 
    8291                // Give some feedback to the user 
    8392                jQuery( todelete ).find('dt').each(function(){ 
    8493                        jQuery(this).animate( { backgroundColor: '#FF3333' }, { duration: 'normal', complete: function() { jQuery(this).parent().parent().remove() } } ); 
    8594                }); 
    86                  
    87                 wp_update_post_data(); 
    8895        } 
    8996}; 
    9097 
    9198/** 
    92  * Prepares menu items for POST 
    93  */ 
    94 function wp_update_post_data() { 
    95         var i = 0; 
    96          
    97          jQuery('.menu li').each(function(i) { 
    98                 i = i + 1; 
    99         var j = jQuery(this).attr('value'); 
    100  
    101         jQuery(this).find('#item-position' + j).attr('value', i); 
    102         jQuery(this).attr('id','menu-' + i); 
    103         jQuery(this).attr('value', i); 
    104  
    105         jQuery(this).find('#item-dbid' + j).attr('name','item-dbid' + i); 
    106         jQuery(this).find('#item-dbid' + j).attr('id','item-dbid' + i); 
    107  
    108                 jQuery(this).find('#item-postmenu' + j).attr('name','item-postmenu' + i); 
    109         jQuery(this).find('#item-postmenu' + j).attr('id','item-postmenu' + i); 
    110  
    111         var p = jQuery(this).find('#item-parent' + j).parent().parent().parent().attr('value'); 
    112  
    113                 jQuery(this).find('#item-parent' + j).attr('name','item-parent' + i); 
    114                 jQuery(this).find('#item-parent' + j).attr('id','item-parent' + i); 
    115                  
    116                 if (p) { 
    117                         // Do nothing 
    118                 } else { 
    119                         // reset p to be top level 
    120                         p = 0; 
    121                 } 
    122  
    123                 jQuery(this).find('#item-parent' + j).attr('value', p); 
    124  
    125                 jQuery(this).find('#item-title' + j).attr('name','item-title' + i); 
    126                 jQuery(this).find('#item-title' + j).attr('id','item-title' + i); 
    127  
    128                 jQuery(this).find('#item-url' + j).attr('name','item-url' + i); 
    129                 jQuery(this).find('#item-url' + j).attr('id','item-url' + i); 
    130  
    131                 jQuery(this).find('#item-description' + j).attr('name','item-description' + i); 
    132                 jQuery(this).find('#item-description' + j).attr('id','item-description' + i); 
    133  
    134                 jQuery(this).find('#item-attr-title' + j).attr('name','item-attr-title' + i); 
    135                 jQuery(this).find('#item-attr-title' + j).attr('id','item-attr-title' + i); 
    136  
    137                 jQuery(this).find('#item-target' + j).attr('name','item-target' + i); 
    138                 jQuery(this).find('#item-target' + j).attr('id','item-target' + i); 
    139  
    140                 jQuery(this).find('#item-position' + j).attr('name', 'item-position' + i); 
    141                 jQuery(this).find('#item-position' + j).attr('id', 'item-position' + i); 
    142  
    143                 jQuery(this).find('#item-type' + j).attr('name', 'item-type' + i); 
    144                 jQuery(this).find('#item-type' + j).attr('id', 'item-type' + i); 
    145  
    146                 jQuery('#li-count').attr( 'value', i ); 
    147    }); 
    148 }; 
    149  
    150 /** 
    15199 * Adds the item to the menu 
    152100 * 
    153  * @param string id - The menu item's id 
    154  * @param string additemtype - Page, Category, or Custom. 
    155  * @param string itemtext - menu text. 
    156  * @param string itemurl - url of the menu. 
    157  * @param int itemid - menu id. 
    158  * @param int itemparentid - default 0. 
    159  * @param string itemdescription - the description of the menu item. 
     101 * @param string item_db_id - The menu item's db id. 
     102 * @param string item_object_id - The menu item's object id. 
     103 * @param string item_type - The menu item's object type. 
     104 * @param string item_append - The menu item's nice name. 
     105 * @param string item_parent_id - The menu item's parent id. 
     106 * @param string item_title - The menu item title. 
     107 * @param string item_url - The menu item url 
     108 * @param string item_description - The menu item description. 
     109 * @param string item_attr_title - The title attribute. 
     110 * @param string item_target - The target attribute. 
     111 * @param string item_classes - Optional. Additional CSS classes for the menu item 
     112 * @param string item_xfn - Optional. The rel attribute. 
    160113 */ 
    161 function wp_add_item_to_menu( item_type, item_title, item_url, item_id, item_parent_id, item_description ) { 
     114function wp_add_item_to_menu( item_db_id, item_object_id, item_type, item_append, item_parent_id, item_title, item_url, item_description, item_attr_title, item_target, item_classes, item_xfn ) { 
    162115        var randomnumber = wp_get_unique_menu_id(); 
     116        var hidden = wp_get_hidden_inputs( randomnumber, item_db_id, item_object_id, item_type, item_append, item_parent_id, item_title, item_url, item_description, item_attr_title, item_target, item_classes, item_xfn ); 
    163117         
    164118        // Adds the item in the queue 
    165         jQuery('.menu').append('<li id="menu-' + randomnumber + '" value="' + randomnumber + '"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">' + item_title + '</span><span class="item-controls"><span class="item-type">' + item_type + '</span><a class="item-edit thickbox" id="edit' + randomnumber + '" value="' + randomnumber +'" onClick="wp_edit_menu_item('+ randomnumber +')" title="' + navMenuL10n.thickbox + '" href="#TB_inline?height=380&width=300&inlineId=menu-item-settings">' + navMenuL10n.edit + '</a> | <a class="item-delete" id="delete' + randomnumber + '" value="' + randomnumber +'">Delete</a></span></dt></dl><input type="hidden" name="item-postmenu' + randomnumber + '" id="item-postmenu' + randomnumber + '" value="' + item_id + '" /><input type="hidden" name="item-parent' + randomnumber + '" id="item-parent' + randomnumber + '" value="' + item_parent_id + '" /><input type="hidden" name="item-title' + randomnumber + '" id="item-title' + randomnumber + '" value="' + item_title + '" /><input type="hidden" name="item-url' + randomnumber + '" id="item-url' + randomnumber + '" value="' + item_url + '" /><input type="hidden" name="item-description' + randomnumber + '" id="item-description' + randomnumber + '" value="' + item_description + '" /><input type="hidden" name="item-position' + randomnumber + '" id="item-position' + randomnumber + '" value="' + randomnumber + '" /><input type="hidden" name="item-type' + randomnumber + '" id="item-type' + randomnumber + '" value="' + item_type + '" /><input type="hidden" name="item-attr-title' + randomnumber + '" id="item-attr-title' + randomnumber + '" value="' + item_title + '" /><input type="hidden" name="item-target' + randomnumber + '" id="item-target' + randomnumber + '" value="0" /></li>'); 
     119        jQuery('.menu').append('<li id="menu-item' + randomnumber + '" value="' + randomnumber + '"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">' + item_title + '</span><span class="item-controls"><span class="item-type">' + item_append + '</span><a class="item-edit thickbox" id="edit' + randomnumber + '" value="' + randomnumber +'" onClick="wp_edit_menu_item('+ randomnumber +')" title="' + navMenuL10n.thickbox + '" href="#TB_inline?height=540&width=300&inlineId=menu-item-settings">' + navMenuL10n.edit + '</a> | <a class="item-delete" id="delete' + randomnumber + '" value="' + randomnumber +'">Delete</a></span></dt></dl>' + hidden + '</li>'); 
    166120         
    167121        // Give some feedback to the user 
    168         jQuery( '.menu #menu-' + randomnumber + ' dt:first' ).animate( { backgroundColor: '#FFFF33' }, { duration: 'normal', complete: function() { jQuery(this).css( 'backgroundColor', '' ); }}); 
     122        jQuery( '.menu #menu-item' + randomnumber + ' dt:first' ).animate( { backgroundColor: '#FFFF33' }, { duration: 'normal', complete: function() { jQuery(this).css( 'backgroundColor', '' ); }}); 
    169123         
    170124        // Enable drag-n-drop 
    171125        wp_drag_and_drop(); 
    172126         
    173         wp_update_post_data(); 
    174          
    175127        // Reload thickbox 
    176128        tb_init('a.thickbox, area.thickbox, input.thickbox'); 
    177129}; 
    178130 
    179 /* 
    180  * Queues items in perperation for appendToList 
    181  * 
    182  * @param string type - Page, Category, or Custom. 
    183  * @param string link - menu text. 
    184  * @param string url - url of the menu. 
    185  * @param int id - menu id. 
    186  * @param int parent_id - default 0. 
    187  * @param string description - the description of the menu item. 
    188 */ 
    189 function wp_update_queue( e, item_type, item_title, item_url, item_id, item_parent_id, item_description ) { 
    190         var randomnumber = wp_get_unique_menu_id(); 
    191         var menu_item_id = jQuery(e).attr('id'); 
    192          
    193         if ( jQuery(e).attr('checked') ) { 
    194                 // Add menu item to the queue 
    195                 jQuery('#queue').append('<li id="menu-' + randomnumber + '" value="' + randomnumber + '"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">' + item_title + '</span><span class="item-controls"><span class="item-type">' + item_type + '</span><a class="item-edit thickbox" id="edit' + randomnumber + '" value="' + randomnumber +'" onClick="wp_edit_menu_item('+ randomnumber +')" title="' + navMenuL10n.thickbox + '" href="#TB_inline?height=380&width=300&inlineId=menu-item-settings">' + navMenuL10n.edit + '</a> | <a class="item-delete" id="delete' + randomnumber + '" value="' + randomnumber +'">Delete</a></span></dt></dl><input type="hidden" name="item-postmenu' + randomnumber + '" id="item-postmenu' + randomnumber + '" value="' + item_id + '" /><input type="hidden" name="item-parent' + randomnumber + '" id="item-parent' + randomnumber + '" value="' + item_parent_id + '" /><input type="hidden" name="item-title' + randomnumber + '" id="item-title' + randomnumber + '" value="' + item_title + '" /><input type="hidden" name="item-url' + randomnumber + '" id="item-url' + randomnumber + '" value="' + item_url + '" /><input type="hidden" name="item-description' + randomnumber + '" id="item-description' + randomnumber + '" value="' + item_description + '" /><input type="hidden" name="item-position' + randomnumber + '" id="item-position' + randomnumber + '" value="' + randomnumber + '" /><input type="hidden" name="item-type' + randomnumber + '" id="item-type' + randomnumber + '" value="' + item_type + '" /><input type="hidden" name="item-attr-title' + randomnumber + '" id="item-attr-title' + randomnumber + '" value="' + item_title + '" /><input type="hidden" name="item-target' + randomnumber + '" id="item-target' + randomnumber + '" value="0" /><input type="hidden" name="item-id' + randomnumber + '" id="item-id' + randomnumber + '" value="'+ menu_item_id +'" /></li>'); 
    196                  
    197         } else { 
    198                 // Remove the item from the queue 
    199                 if ( menu_item_id == jQuery('#queue li input[name^="item-id"]' ).val() ) { 
    200                         jQuery('#queue li input[name^="item-id"]' ).parent().remove() 
    201                 }; 
    202         }; 
    203 }; 
    204  
    205131/** 
    206132 * Grabs items from the queue and adds them to the menu. 
    207133 * 
    208  * @param string button - a reference of the button that was clicked 
     134 * @param string button - a reference to the button that was clicked 
    209135 */ 
    210 function wp_add_queued_items_to_menu( button ) {         
    211         // Grab items in queue 
    212         var items = jQuery('#queue').children(); 
     136function wp_add_checked_items_to_menu( button ) { 
     137        // Grab checked items 
     138        var items = jQuery(button).siblings('.list-wrap').find(':checked'); 
    213139         
    214         // Empty Queue 
    215         jQuery('#queue').empty(); 
     140        // If nothing was checked, cancel 
     141        if ( 0 == items.length ) 
     142                return false; 
     143         
     144        // Loop through each item, grab it's hidden data and add it to the menu. 
     145        jQuery(items).each(function(){ 
     146                var item_type = jQuery(this).parent().siblings('.menu-item-type').val(); 
    216147                 
    217         // Appends HTML to the menu 
    218         jQuery('.menu').append( items ); 
    219  
    220         // Give some feedback to the user 
    221         jQuery(items).each(function(){ 
    222                 jQuery(this).find('dt').animate( { backgroundColor: '#FFFF33' }, { duration: 'normal', complete: function() { jQuery(this).css( 'backgroundColor', '' ); }}); 
     148                if ( 'custom' == item_type ) { 
     149                        var item_attr_title = jQuery(this).parent().siblings('.menu-item-attr-title').val(); 
     150                        var item_target = jQuery(this).parent().siblings('.menu-item-target').val(); 
     151                        var item_classes = jQuery(this).parent().siblings('.menu-item-classes').val(); 
     152                        var item_xfn = jQuery(this).parent().siblings('.menu-item-xfn').val(); 
     153                } else { 
     154                        var item_attr_title = ''; 
     155                        var item_target = '_none'; 
     156                        var item_classes = ''; 
     157                        var item_xfn = ''; 
     158                }; 
     159                 
     160                var item_db_id = jQuery(this).parent().siblings('.menu-item-db-id').val(); 
     161                var item_object_id = jQuery(this).parent().siblings('.menu-item-object-id').val(); 
     162                var item_append = jQuery(this).parent().siblings('.menu-item-append').val(); 
     163                var item_parent_id = jQuery(this).parent().siblings('.menu-item-parent-id').val(); 
     164                var item_title = jQuery(this).parent().siblings('.menu-item-title').val(); 
     165                var item_url = jQuery(this).parent().siblings('.menu-item-url').val(); 
     166                var item_description = jQuery(this).parent().siblings('.menu-item-description').val(); 
     167                 
     168                if ( undefined == item_description ) { 
     169                        item_description = ''; 
     170                }; 
     171                 
     172                // Add the menu item to the menu 
     173                wp_add_item_to_menu( item_db_id, item_object_id, item_type, item_append, item_parent_id, item_title, item_url, item_description, item_attr_title, item_target, item_classes, item_xfn ); 
     174                 
     175                // uncheck the menu item in the list 
     176                jQuery(this).attr( 'checked', false ); 
    223177        }); 
    224          
    225         // Uncheck the checkboxes in the list 
    226         jQuery(button).offsetParent().find('.list-container input').attr('checked', false); 
    227          
    228         wp_update_post_data(); 
    229          
    230         // Enable drag-n-drop 
    231         wp_drag_and_drop(); 
    232          
    233         // Reload thickbox 
    234         tb_init('a.thickbox, area.thickbox, input.thickbox'); 
    235178}; 
    236179 
    237180/** 
    238  * Allow the items in the Menu to be dragged and dropped. 
     181 * Makes the menu items drag and droppable. 
    239182 */ 
    240183function wp_drag_and_drop() { 
    241184        // Make sure all li's have dropzones 
     
    251194                opacity: .8, 
    252195                addClasses: false, 
    253196                helper: 'clone', 
    254                 zIndex: 100, 
     197                zIndex: 100 
    255198        }); 
    256199 
    257200        // make menu item droppable 
     
    307250} 
    308251 
    309252/** 
     253 * Prepares menu items for POST. 
     254 */ 
     255function wp_update_post_data() { 
     256        var i = 0; 
     257         
     258         jQuery('.menu li').each(function(i) { 
     259                i = i + 1; 
     260        var j = jQuery(this).attr('value'); 
     261 
     262        jQuery(this).find('#menu-item-position' + j).attr('value', i); 
     263        jQuery(this).attr('id','menu-item' + i); 
     264        jQuery(this).attr('value', i); 
     265                 
     266        jQuery(this).find('#menu-item-db-id' + j).attr('id','menu-item-db-id' + i); 
     267        jQuery(this).find('#menu-item-object-id' + j).attr('id','menu-item-object-id' + i); 
     268                jQuery(this).find('#menu-item-append' + j).attr('id', 'menu-item-append' + i); 
     269                jQuery(this).find('#menu-item-type' + j).attr('id', 'menu-item-type' + i); 
     270                jQuery(this).find('#menu-item-position' + j).attr('id', 'menu-item-position' + i); 
     271 
     272        var p = jQuery(this).find('#menu-item-parent-id' + j).parent().parent().parent().attr('value'); 
     273                jQuery(this).find('#menu-item-parent-id' + j).attr('id','menu-item-parent-id' + i); 
     274                if (p) { 
     275                        // Do nothing 
     276                } else { 
     277                        // reset p to be top level 
     278                        p = 0; 
     279                } 
     280                jQuery(this).find('#menu-item-parent-id' + j).attr('value', p); 
     281                 
     282                jQuery(this).find('#menu-item-title' + j).attr('id','menu-item-title' + i); 
     283                jQuery(this).find('#menu-item-url' + j).attr('id','menu-item-url' + i); 
     284                jQuery(this).find('#menu-item-description' + j).attr('id','menu-item-description' + i); 
     285                jQuery(this).find('#menu-item-classes' + j).attr('id','menu-item-classes' + i); 
     286                jQuery(this).find('#menu-item-xfn' + j).attr('id','menu-item-xfn' + i); 
     287                jQuery(this).find('#menu-item-description' + j).attr('id','menu-item-description' + i); 
     288                jQuery(this).find('#menu-item-attr-title' + j).attr('id','menu-item-attr-title' + i); 
     289                jQuery(this).find('#menu-item-target' + j).attr('id','menu-item-target' + i); 
     290                 
     291                jQuery('#li-count').attr( 'value', i ); 
     292   }); 
     293}; 
     294 
     295/** 
    310296 * Gets a unique number based on how many items are in the menu 
    311297 */ 
    312298function wp_get_unique_menu_id() { 
     
    331317                } 
    332318        } 
    333319        return randomnumber; 
     320} 
     321 
     322/** 
     323 * Returns all the nessecary hidden inputs for each menu item. 
     324 *  
     325 * @param string item_db_id - The menu item's db id. 
     326 * @param string item_object_id - The menu item's object id. 
     327 * @param string item_type - The menu item's object type. 
     328 * @param string item_append - The menu item's nice name. 
     329 * @param string item_parent_id - The menu item's parent id. 
     330 * @param string item_title - The menu item title. 
     331 * @param string item_url - The menu item url 
     332 * @param string item_description - The menu item description. 
     333 * @param string item_attr_title - The title attribute. 
     334 * @param string item_target - The target attribute. 
     335 * @param string item_classes - Optional. Additional CSS classes for the menu item 
     336 * @param string item_xfn - Optional. The rel attribute. 
     337 */ 
     338function wp_get_hidden_inputs( randomnumber, item_db_id, item_object_id, item_type, item_append, item_parent_id, item_title, item_url, item_description, item_attr_title, item_target, item_classes, item_xfn ) { 
     339        var hidden = ''; 
     340         
     341        hidden += '<input type="hidden" name="menu-item-db-id[]" id="menu-item-db-id' + randomnumber + '" value="' + item_db_id + '" />'; 
     342        hidden += '<input type="hidden" name="menu-item-object-id[]" id="menu-item-object-id' + randomnumber + '" value="' + item_object_id + '" />'; 
     343        hidden += '<input type="hidden" name="menu-item-type[]" id="menu-item-type' + randomnumber + '" value="' + item_type + '" />'; 
     344        hidden += '<input type="hidden" name="menu-item-append[]" id="menu-item-append' + randomnumber + '" value="' + item_append + '" />'; 
     345        hidden += '<input type="hidden" name="menu-item-parent-id[]" id="menu-item-parent-id' + randomnumber + '" value="' + item_parent_id + '" />'; 
     346        hidden += '<input type="hidden" name="menu-item-position[]" id="menu-item-position' + randomnumber + '" value="' + randomnumber + '" />'; 
     347        hidden += '<input type="hidden" name="menu-item-title[]" id="menu-item-title' + randomnumber + '" value="' + item_title + '" />'; 
     348        hidden += '<input type="hidden" name="menu-item-attr-title[]" id="menu-item-attr-title' + randomnumber + '" value="' + item_attr_title + '" />'; 
     349        hidden += '<input type="hidden" name="menu-item-url[]" id="menu-item-url' + randomnumber + '" value="' + item_url + '" />'; 
     350        hidden += '<input type="hidden" name="menu-item-target[]" id="menu-item-target' + randomnumber + '" value="' + item_target + '" />'; 
     351        hidden += '<input type="hidden" name="menu-item-description[]" id="menu-item-description' + randomnumber + '" value="' + item_description + '" />'; 
     352        hidden += '<input type="hidden" name="menu-item-classes[]" id="menu-item-classes' + randomnumber + '" value="' + item_classes + '" />'; 
     353        hidden += '<input type="hidden" name="menu-item-xfn[]" id="menu-item-xfn' + randomnumber + '" value="' + item_xfn + '" />'; 
     354         
     355        return hidden; 
    334356} 
     357 No newline at end of file 
  • wp-admin/js/nav-menu-default-items.js

     
    1 jQuery(document).ready(function(a){wp_drag_and_drop();wp_update_post_data();a("#save_menu").click(function(){return wp_update_post_data()});a(".quick-search").click(function(){a(this).attr("value","")});a(".quick-search-submit").click(function(){a(this).siblings(".quick-search").search()});a("#menu-container .item-edit").click(function(){return wp_edit_menu_item(a(this).attr("value"))});a("#menu-container .item-delete").live("click",function(){return wp_remove_menu_item(a(this).attr("value"))});a("#update-menu-item").click(function(){wp_update_menu_item();tb_remove();var b=a("#edit-item-id").val();a("#menu-"+b+" dt:first").animate({backgroundColor:"#FFFF33"},{duration:"normal",complete:function(){jQuery(this).css("backgroundColor","")}})});a("#cancel-save").click(function(){return tb_remove()});a(".show-all").click(function(){a(this).offsetParent().find("#add-buttons-actions").attr("style","margin-bottom: 10px;");a(this).offsetParent().find(".list-wrap").css("display","block");a(this).siblings(".quick-search").attr("value","");a(this).offsetParent().find(".list-wrap li").css("display","block");a(this).hide();a(this).siblings(".hide-all").show()});a(".hide-all").click(function(){a(this).offsetParent().find("#add-buttons-actions").attr("style","margin-bottom: 0px;");a(this).offsetParent().find(".list-wrap").css("display","none");a(this).siblings(".quick-search").attr("value","Search");a(this).offsetParent().find(".list-wrap li").css("display","none");a(this).hide();a(this).siblings(".show-all").show()});a(".list input").click(function(){var d=jQuery(this).parent().siblings(".item-type").val();var g=jQuery(this).parent().siblings(".item-title").val();var c=jQuery(this).parent().siblings(".item-url").val();var e=jQuery(this).parent().siblings(".item-dbid").val();var b=jQuery(this).parent().siblings(".item-parent").val();var f=jQuery(this).parent().siblings(".item-description").val();return wp_update_queue(a(this),d,g,c,e,b,f)});a(".enqueue a").click(function(){return wp_add_queued_items_to_menu(this)});a("#add-custom-link .add-to-menu a").click(function(){var b=a(this).offsetParent().find("#menu-item-url").val();var c=a(this).offsetParent().find("#menu-item-name").val();wp_add_queued_items_to_menu(this);if("http://"==b||"Menu Item"==c){return}wp_add_item_to_menu("custom",c,b,0,0,"")})}); 
    2  No newline at end of file 
     1jQuery(document).ready(function($){wp_drag_and_drop();$("#update-nav-menu .deletion").click(function(){if(confirm(navMenuL10n.warnDelete)){return true}else{return false}});$("#save_menu").click(function(){return wp_update_post_data()});$(".if-js-closed").removeClass("if-js-closed").addClass("closed");postboxes.add_postbox_toggles("menus");$(".quick-search").click(function(){$(this).attr("value","")});$(".quick-search-submit").click(function(){$(this).siblings(".quick-search").search()});$("#menu-container .item-edit").click(function(){return wp_edit_menu_item($(this).attr("value"))});$("#menu-container .item-delete").live("click",function(e){return wp_remove_menu_item($(this).attr("value"))});$("#update-menu-item").click(function(){wp_update_menu_item();return tb_remove()});$("#cancel-save").click(function(){return tb_remove()});$(".show-all").click(function(e){jQuery(e.currentTarget).parent().siblings(".list-wrap").css("display","block");jQuery(e.currentTarget).parent().siblings(".list-wrap").find("li").css("display","block");jQuery(e.currentTarget).hide();jQuery(e.currentTarget).siblings(".hide-all").show()});$(".hide-all").click(function(e){jQuery(e.currentTarget).parent().siblings(".list-wrap").css("display","none");jQuery(e.currentTarget).parent().siblings(".list-wrap").find("li").css("display","none");jQuery(e.currentTarget).hide();jQuery(e.currentTarget).siblings(".show-all").show()});$(".add-to-menu").click(function(e){return wp_add_checked_items_to_menu(e.currentTarget)});$("#add-custom-links .add-to-menu a").click(function(e){var link_url=jQuery(e.currentTarget).parent().parent().find("#custom-menu-item-url").val();var link_name=jQuery(e.currentTarget).parent().parent().find("#custom-menu-item-name").val();wp_add_item_to_menu(0,"","custom",navMenuL10n.custom,0,link_name,link_url,"","","_none","","")})}); 
     2 No newline at end of file 
  • wp-admin/nav-menus.php

     
    99 * @subpackage Administration 
    1010 */ 
    1111 
    12 require_once('admin.php'); 
     12/** Load WordPress Administration Bootstrap */ 
     13require_once( 'admin.php' ); 
    1314 
    14 /* 
    15 TODO 
    16         Add caps: edit_menus, delete_menus 
    17 */ 
     15// Permissions Check 
    1816if ( ! current_user_can('switch_themes') ) 
    1917        wp_die( __( 'Cheatin&#8217; uh?' )); 
    2018 
     19// Nav Menu CSS 
    2120wp_admin_css( 'nav-menu' ); 
     21 
     22// jQuery 
    2223wp_enqueue_script( 'jquery' ); 
    2324wp_enqueue_script( 'jquery-ui-draggable' ); 
    2425wp_enqueue_script( 'jquery-ui-droppable' ); 
    2526wp_enqueue_script( 'jquery-ui-sortable' ); 
    26 wp_enqueue_script( 'jquery-ui-dialog' ); 
     27wp_enqueue_script( 'jquery-autocomplete' ); 
     28 
     29// Nav Menu functions 
    2730wp_enqueue_script( 'nav-menu-dynamic-functions' ); 
    2831wp_enqueue_script( 'nav-menu-default-items' ); 
    29 wp_enqueue_script( 'jquery-autocomplete' ); 
    3032wp_enqueue_script( 'nav-menu-php-functions' ); 
     33 
     34// Metaboxes 
     35wp_enqueue_script( 'common' ); 
     36wp_enqueue_script( 'wp-lists' ); 
     37wp_enqueue_script( 'postbox' ); 
     38 
     39// Thickbox 
    3140add_thickbox(); 
    3241 
    33 require_once( 'admin-header.php' ); 
     42// Load all the nav menu interface functions 
    3443require_once( ABSPATH . 'wp-admin/includes/nav-menu.php' ); 
    3544 
    36 function wp_reset_nav_menu() { 
    37         wp_nav_menu_setup( true ); 
    38         return true; 
    39 } 
    40  
     45// Container for any messages displayed to the user 
    4146$messages_div = ''; 
    42 $menu_id_in_edit = 0; 
    43 $updated = false; 
    44 $advanced_option_descriptions = 'no'; 
    4547 
    46 // Check which menu is selected and if menu is in edit already 
    47 if ( isset( $_GET['edit-menu'] ) ) { 
    48         $menu_selected_id = (int) $_GET['edit-menu']; 
    49         $updated = true; 
    50 } elseif ( isset( $_POST[ 'menu-id-in-edit' ] ) ) { 
    51         $menu_selected_id = (int) $_POST[ 'menu-id-in-edit' ]; 
    52 } else { 
    53         $menu_selected_id = 0; 
    54 } 
     48// Container that stores the name of the active menu 
     49$nav_menu_selected_title = ''; 
    5550 
    56 // Delete a menu 
    57 if ( isset($_GET['delete-menu']) && $_GET['delete-menu'] > 0 ) { 
    58         // if ( ! current_user_can('delete_menus') ) 
    59         //      wp_die( __( 'Cheatin&#8217; uh?' )); 
     51// The menu id of the current menu being edited 
     52$nav_menu_selected_id = isset( $_REQUEST['menu'] ) ? (int) $_REQUEST['menu'] : 0; 
    6053 
    61         $menu_id = (int) $_GET['delete-menu']; 
    62         check_admin_referer( 'delete_menu-' . $menu_id ); 
     54// Allowed actions: add, update, delete 
     55$action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : 'edit'; 
    6356 
    64         wp_delete_nav_menu( $menu_id ); 
    65         $messages_div = '<div id="message" class="updated fade below-h2"><p>' . __('Menu successfully deleted.') . '</p></div>'; 
    66         $menu_selected_id = 0; 
    67         $updated = true; 
    68 } 
     57switch ( $action ) { 
     58        case 'delete': 
     59                check_admin_referer( 'delete-nav_menu-' . $nav_menu_selected_id ); 
    6960 
    70 // Default Menu to show 
    71 $menus = wp_get_nav_menus(); 
     61                if ( is_nav_menu($nav_menu_selected_id) ) { 
     62                        wp_delete_nav_menu( $nav_menu_selected_id ); 
     63                        $messages_div = '<div id="message" class="updated fade below-h2"><p>' . __('Menu successfully deleted.') . '</p></div>'; 
     64                        $nav_menu_selected_id = 0; 
     65                } 
     66                break; 
     67         
     68        case 'update': 
     69                check_admin_referer( 'update-nav_menu' ); 
     70                 
     71                // Add Menu 
     72                if ( isset($_POST['create-menu']) ) { 
     73                        if ( current_theme_supports('nav-menus') ) { 
     74                                $add_nav_menu = esc_html( $_POST['create-menu-name'] ); 
    7275 
    73 if ( empty($menus) && empty($_POST) ) { 
    74         wp_create_default_nav_menu(); 
    75         $menus = wp_get_nav_menus(); 
    76 } 
     76                                if ( $add_nav_menu ) { 
     77                                        $add_nav_menu = wp_create_nav_menu( $add_nav_menu ); 
    7778 
    78 if ( ! $menu_selected_id && ! empty($menus) ) 
    79         $menu_selected_id = $menus[0]->term_id; 
    80  
    81 // Get the name of the current Menu 
    82 $menu_title = ''; 
    83 $valid_menu = false; 
    84 if ( $menu_selected_id > 0 ) { 
    85         foreach ( $menus as $menu ) { 
    86                 if ( $menu->term_id == $menu_selected_id ) { 
    87                         $menu_title = $menu->name; 
    88                         $valid_menu = true; 
    89                         break; 
     79                                        if ( is_wp_error( $add_nav_menu ) ) { 
     80                                                $messages_div = '<div id="message" class="error fade below-h2"><p>' . $add_nav_menu->get_error_message() . '</p></div>'; 
     81                                        } else { 
     82                                                $nav_menu_selected_id = $add_nav_menu->term_id; 
     83                                                $nav_menu_selected_title = $add_nav_menu->name; 
     84                                                $messages_div = '<div id="message" class="updated fade below-h2"><p>' . sprintf( __('The <strong>%s</strong> menu has been successfully created.'), esc_html( $add_nav_menu->name ) ) . '</p></div>'; 
     85                                        } 
     86                                } else { 
     87                                        $messages_div = '<div id="message" class="error fade below-h2"><p>' . __('Please enter a valid menu name.') . '</p></div>'; 
     88                                } 
     89                                unset($add_nav_menu); 
     90                        } 
    9091                } 
    91         } 
    92 } 
     92                 
     93                // Update menu name 
     94                if ( isset($_POST['menu-name']) ) { 
     95                        $old_nav_menu = get_term( $nav_menu_selected_id, 'nav_menu', ARRAY_A ); 
     96                        $args = array( 'name' => $_POST['menu-name'], 'slug' => null, 'description' => $old_nav_menu['description'], 'parent' => $old_nav_menu['parent'], ); 
     97                        $new_nav_menu = wp_update_term( $nav_menu_selected_id, 'nav_menu', $args ); 
     98                } 
     99                 
     100                // Update menu items 
     101                $update_nav_items = isset( $_POST['li-count'] ) ? (int) $_POST['li-count'] : 0; 
     102                $update_nav_menu = is_nav_menu( $nav_menu_selected_id ); 
     103                 
     104                if ( !is_wp_error($update_nav_menu) ) { 
     105                        $menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array('orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID') ); 
     106                        $parent_menu_ids = array(); 
     107                         
     108                        // Loop through all POST variables 
     109                        for ( $k = 0; $k < $update_nav_items; $k++ ) { 
     110                                 
     111                                $menu_item_db_id                = isset( $_POST['menu-item-db-id'][$k] )                ? $_POST['menu-item-db-id'][$k]         : 0; 
     112                                $menu_item_object_id    = isset( $_POST['menu-item-object-id'][$k] )    ? $_POST['menu-item-object-id'][$k] : 0; 
     113                                $menu_item_parent_id    = isset( $_POST['menu-item-parent-id'][$k] )    ? $_POST['menu-item-parent-id'][$k] : 0; 
     114                                $menu_item_position     = isset( $_POST['menu-item-position'][$k] )     ? $_POST['menu-item-position'][$k]      : 0; 
     115                                $menu_item_type                 = isset( $_POST['menu-item-type'][$k] )                 ? $_POST['menu-item-type'][$k]          : 'custom'; 
     116                                $menu_item_append               = isset( $_POST['menu-item-append'][$k] )               ? $_POST['menu-item-append'][$k]        : 'custom'; 
     117                                 
     118                                $menu_item_title                = isset( $_POST['menu-item-title'][$k] )                ? $_POST['menu-item-title'][$k]         : ''; 
     119                                $menu_item_url                  = isset( $_POST['menu-item-url'][$k] )                  ? $_POST['menu-item-url'][$k]           : ''; 
     120                                $menu_item_description  = isset( $_POST['menu-item-description'][$k] )  ? $_POST['menu-item-description'][$k]: ''; 
     121                                $menu_item_attr_title   = isset( $_POST['menu-item-attr-title'][$k] )   ? $_POST['menu-item-attr-title'][$k] : ''; 
     122                                $menu_item_target               = isset( $_POST['menu-item-target'][$k] )               ? $_POST['menu-item-target'][$k]        : 0; 
     123                                $menu_item_classes              = isset( $_POST['menu-item-classes'][$k] )              ? $_POST['menu-item-classes'][$k]       : ''; 
     124                                $menu_item_xfn                  = isset( $_POST['menu-item-xfn'][$k] )                  ? $_POST['menu-item-xfn'][$k]           : ''; 
     125                                 
     126                                // Menu item title can't be blank 
     127                                if ( '' == $menu_item_title ) 
     128                                        continue; 
     129                                 
     130                                // Populate the menu item 
     131                                $post = array( 'post_status' => 'publish', 'post_type' => 'nav_menu_item', 'post_author' => $user_ID, 
     132                                        'ping_status' => 0, 'post_parent' => $menu_item_parent_id, 'menu_order' => $menu_item_position, 
     133                                        'post_excerpt' => $menu_item_attr_title, 'tax_input' => array( 'nav_menu' => $update_nav_menu->name ), 
     134                                        'post_content' => $menu_item_description, 'post_title' => $menu_item_title ); 
    93135 
    94 if ( isset( $_POST['li-count'] ) ) 
    95         $post_counter = $_POST['li-count']; 
    96 else 
    97         $post_counter = 0; 
    98  
    99 // Create a new menu. Menus are stored as terms in the 'menu' taxonomy. 
    100 if ( isset( $_POST['create-menu'] ) && ! $updated ) { 
    101         $insert_menu_name = $_POST['create-menu-name']; 
    102  
    103         if ( $insert_menu_name ) { 
    104                 $menu = wp_create_nav_menu( $insert_menu_name ); 
    105                 if ( is_wp_error( $menu ) ) { 
    106                         $messages_div = '<div id="message" class="error fade below-h2"><p>' . $menu->get_error_message() . '</p></div>'; 
    107                 } else { 
    108                         $menus[$menu->term_id] = $menu; 
    109                         $menu_selected_id = $menu->term_id; 
    110                         $menu_id_in_edit = $menu_selected_id; 
    111                         $menu_title = $menu->name; 
    112                         $messages_div = '<div id="message" class="updated fade below-h2"><p>' . sprintf( __('&#8220;%s&#8221; menu has been created.'), esc_html( $menu->name ) ) . '</p></div>'; 
    113                         $post_counter = 0; 
     136                                // New menu item 
     137                                if ( $menu_item_db_id == 0 ) { 
     138                                        $menu_item_db_id = wp_insert_post( $post ); 
     139                                } elseif ( isset( $menu_items[$menu_item_db_id] ) ) { 
     140                                        $post['ID'] = $menu_item_db_id; 
     141                                        wp_update_post( $post ); 
     142                                        unset( $menu_items[$menu_item_db_id] ); 
     143                                } 
     144                                $parent_menu_ids[$k] = $menu_item_db_id; 
     145                                 
     146                                update_post_meta( $menu_item_db_id, 'menu_item_type', $menu_item_type ); 
     147                                update_post_meta( $menu_item_db_id, 'menu_item_append', $menu_item_append ); 
     148                                update_post_meta( $menu_item_db_id, 'menu_item_object_id', $menu_item_object_id ); 
     149                                update_post_meta( $menu_item_db_id, 'menu_item_target', esc_attr($menu_item_target) ); 
     150                                update_post_meta( $menu_item_db_id, 'menu_item_classes', esc_attr($menu_item_classes) ); 
     151                                update_post_meta( $menu_item_db_id, 'menu_item_xfn', esc_attr($menu_item_xfn) ); 
     152                                 
     153                                // @todo: only save custom link urls. 
     154                                update_post_meta( $menu_item_db_id, 'menu_item_url', esc_url_raw( $menu_item_url ) ); 
     155                        } 
     156                         
     157                        // Remove menu items from the menu that weren't in $_POST 
     158                        if ( !empty( $menu_items ) ) { 
     159                                foreach ( array_keys( $menu_items ) as $menu_item_id ) { 
     160                                        wp_delete_post( $menu_item_id ); 
     161                                } 
     162                        } 
     163                        $messages_div = '<div id="message" class="updated fade below-h2"><p>' . __('The menu has been updated.') . '</p></div>'; 
    114164                } 
    115         } else { 
    116                 $messages_div = '<div id="message" class="error fade below-h2"><p>' . __('Please enter a valid menu name.') . '</p></div>'; 
    117         } 
    118         $updated = true; 
     165                break; 
    119166} 
    120167 
    121 if ( $post_counter > 0 && $menu_selected_id > 0 && ! $updated ) { 
    122         $menu_items = wp_get_nav_menu_items( $menu_selected_id, array('orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID') ); 
    123         $parent_menu_ids = array(); 
     168// Get all nav menus 
     169$nav_menus = wp_get_nav_menus(); 
    124170 
    125         // Loop through all POST variables 
    126         for ( $k = 1; $k <= $post_counter; $k++ ) { 
    127                 $db_id = isset( $_POST['item-dbid'.$k] )? $_POST['item-dbid'.$k] : 0; 
    128                 $object_id = isset( $_POST['item-postmenu'.$k] )? $_POST['item-postmenu'.$k] : 0; 
    129                 $parent_id = isset( $_POST['item-parent'.$k] )? $_POST['item-parent'.$k] : 0; 
    130                 $custom_title = isset( $_POST['item-title'.$k] )?  $_POST['item-title'.$k] : ''; 
    131                 $custom_linkurl = ( isset( $_POST['item-url'.$k] ) && 'custom' == $_POST['item-type'.$k] ) ? $_POST['item-url'.$k] : ''; 
    132                 $custom_description = isset( $_POST['item-description'.$k] )? $_POST['item-description'.$k] : ''; 
     171// Get recently edited nav menu 
     172$recently_edited = get_user_option( 'nav_menu_recently_edited' ); 
    133173 
    134                 // doesn't seem to be used by UI 
    135                 $position = isset( $_POST['item-position'.$k] )? $_POST['item-position'.$k] : 0; 
    136                 $linktype = isset( $_POST['item-type'.$k] )? $_POST['item-type'.$k] : 'custom'; 
    137                 $custom_anchor_title  = isset( $_POST['item-attr-title'.$k] )? $_POST['item-attr-title'.$k] : $custom_title; 
    138                 $new_window = isset( $_POST['item-target'.$k] )? $_POST['item-target'.$k] : 0; 
     174// If there was no recently edited menu, and $nav_menu_selected_id is a nav menu, update recently edited menu. 
     175if ( !$recently_edited && is_nav_menu($nav_menu_selected_id) ) { 
     176        $recently_edited = $nav_menu_selected_id; 
    139177 
    140                 $post = array( 'post_status' => 'publish', 'post_type' => 'nav_menu_item', 'post_author' => $user_ID, 
    141                         'ping_status' => 0, 'post_parent' => 0, 'menu_order' => $position, 
    142                         'post_excerpt' => $custom_anchor_title, 'tax_input' => array( 'nav_menu' => $menu_title ), 
    143                         'post_content' => $custom_description, 'post_title' => $custom_title ); 
     178// Else if $nav_menu_selected_id is not a menu, but $recently_edited is, grab that one. 
     179} elseif ( 0 == $nav_menu_selected_id && is_nav_menu($recently_edited) ) { 
     180        $nav_menu_selected_id = $recently_edited; 
    144181 
    145                 if ( $parent_id > 0 && isset( $parent_menu_ids[$parent_id] ) ) 
    146                         $post['post_parent'] = $parent_menu_ids[$parent_id]; 
     182// Else try to grab the first menu from the menus list 
     183} elseif ( 0 == $nav_menu_selected_id && ! empty($nav_menus) ) { 
     184        $nav_menu_selected_id = $nav_menus[0]->term_id;  
     185} 
    147186 
    148                 // New menu item 
    149                 if ( $db_id == 0 ) { 
    150                         $db_id = wp_insert_post( $post ); 
    151                 } elseif ( isset( $menu_items[$db_id] ) ) { 
    152                         $post['ID'] = $db_id; 
    153                         wp_update_post( $post ); 
    154                         unset( $menu_items[$db_id] ); 
    155                 } 
    156                 $parent_menu_ids[ $k ] = $db_id; 
     187// Update the user's setting 
     188if ( $nav_menu_selected_id != $recently_edited && is_nav_menu($nav_menu_selected_id) ) 
     189        update_user_meta( $current_user->ID, 'nav_menu_recently_edited', $nav_menu_selected_id ); 
    157190 
    158                 update_post_meta( $db_id, 'menu_type', $linktype ); 
    159                 update_post_meta( $db_id, 'object_id', $object_id ); 
    160                 if ( $new_window ) 
    161                         update_post_meta( $db_id, 'menu_new_window', 1 ); 
    162                 else 
    163                         update_post_meta( $db_id, 'menu_new_window', 0 ); 
    164                 if ( $custom_linkurl ) 
    165                         update_post_meta( $db_id, 'menu_link', esc_url_raw( $custom_linkurl ) ); 
     191// If there's a menu, get it's name. 
     192if ( !$nav_menu_selected_title && $nav_menu_selected_title = is_nav_menu( $nav_menu_selected_id ) ) { 
     193        $nav_menu_selected_title = $nav_menu_selected_title->name; 
     194} 
    166195 
     196// The user has no menus. 
     197if ( !is_nav_menu( $nav_menu_selected_id ) ) { 
     198        if ( current_theme_supports('nav-menus') ) { 
     199                $messages_div = '<div id="message" class="updated"><p>' . __('You haven\'t setup any menus yet. Create a new menu.') . '</p></div>'; 
     200        } else { 
     201                $messages_div = '<div id="message" class="error"><p>' . __('The current theme does not support menus.') . '</p></div>'; 
    167202        } 
    168         if ( !empty( $menu_items ) ) { 
    169                 foreach ( array_keys( $menu_items ) as $menu_id ) { 
    170                         wp_delete_post( $menu_id ); 
    171                 } 
    172         } 
    173         $messages_div = '<div id="message" class="updated fade below-h2"><p>' . __('The menu has been updated.') . '</p></div>'; 
     203} else { 
     204        add_meta_box( 'manage-menu', __( 'Menu Settings' ), 'wp_nav_menu_manage_menu_metabox', 'menus', 'side', 'high', array( $nav_menu_selected_id, $nav_menu_selected_title ) ); 
    174205} 
    175206 
     207// Get the admin header 
     208require_once( 'admin-header.php' ); 
    176209?> 
    177210<div class="wrap"> 
    178211        <?php screen_icon(); ?> 
     
    180213        <?php echo $messages_div; ?> 
    181214        <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> 
    182215 
    183         <form onsubmit="wp_update_post_data();" action="<?php echo admin_url( 'nav-menus.php' ); ?>" method="post" enctype="multipart/form-data"> 
    184                 <?php if ( !empty($menus) && count($menus) > 1 ) : ?> 
    185                 <ul class="subsubsub"> 
    186                         <?php 
    187                                 foreach ( $menus as $menu ) { 
    188                                         $sep = end( $menus ) == $menu ? '' : ' | '; 
    189                                         if ( ( $menu_id_in_edit == $menu->term_id ) || ( $menu_selected_id == $menu->term_id ) ) { ?> 
    190                                                 <li><a href='nav-menus.php?edit-menu=<?php echo esc_attr($menu->term_id); ?>' class="current"><?php echo esc_html( $menu->name ); ?></a><?php echo $sep; ?></li> 
    191                         <?php   } else { ?> 
    192                                                 <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> 
    193                         <?php   } 
    194                                 } 
    195                         ?> 
    196                 </ul> 
    197                 <?php endif; ?> 
     216        <?php if ( !empty($nav_menus) && count($nav_menus) > 1 ) : ?> 
     217        <ul class="subsubsub"> 
     218                <?php 
     219                        foreach ( $nav_menus as $_nav_menu ) { 
     220                                $sep = end( $nav_menus ) == $_nav_menu ? '' : ' | '; 
     221                                 
     222                                if ( $nav_menu_selected_id == $_nav_menu->term_id ) 
     223                                        echo '<li><a href="'. admin_url( 'nav-menus.php?action=edit&amp;menu=' . esc_attr($_nav_menu->term_id) ) .'" class="current">'. esc_html( $_nav_menu->name ) .'</a>'. $sep .'</li>'; 
     224                                else 
     225                                        echo '<li><a href="'. admin_url( 'nav-menus.php?action=edit&amp;menu=' . esc_attr($_nav_menu->term_id) ) .'">'. esc_html( $_nav_menu->name ) .'</a>'. $sep .'</li>'; 
     226                        } 
     227                ?> 
     228        </ul> 
     229        <?php endif; ?> 
    198230 
    199                 <div id="menu-management" class="metabox-holder has-right-sidebar"> 
     231        <div id="menu-management" class="metabox-holder has-right-sidebar"> 
     232                <form id="update-nav-menu" onsubmit="wp_update_post_data();" action="<?php echo admin_url( 'nav-menus.php' ); ?>" method="post" enctype="multipart/form-data"> 
     233                        <?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?> 
     234                        <?php wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); ?> 
     235                        <?php wp_nonce_field( 'update-nav_menu' ); ?> 
     236                        <input type="hidden" name="action" value="update" /> 
     237                        <input type="hidden" name="li-count" id="li-count" value="0" /> 
     238                        <input type="hidden" name="menu" id="menu" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" /> 
     239                         
    200240                        <div id="post-body"> 
    201241                                <div id="post-body-content"> 
    202                                         <div id="normal-sortables" class="meta-box-sortables ui-sortable"> 
    203                                         <?php if ( $valid_menu and ! empty( $menus ) ) : ?> 
     242                                        <?php if ( is_nav_menu($nav_menu_selected_id) ) : ?> 
    204243                                                <div id="menu-container" class="postbox"> 
    205                                                         <h3 class="hndle"><?php echo esc_html( $menu_title ); ?></h3> 
     244                                                        <h3 class="hndle"><?php echo esc_html( $nav_menu_selected_title ); ?></h3> 
    206245                                                        <div class="inside"> 
    207                                                                 <input type="hidden" name="li-count" id="li-count" value="0" /> 
    208                                                                 <input type="hidden" name="menu-id-in-edit" id="menu-id-in-edit" value="<?php echo esc_attr( $menu_selected_id ); ?>" /> 
    209                                                                 <?php 
    210                                                                 if ( $menu_selected_id > 0 ) 
    211                                                                         echo wp_get_nav_menu( array( 'type' => 'backend', 'menu' => $menu_selected_id, 'ul_class' => 'menu' ) ); 
    212                                                                 ?> 
    213  
    214                                                                 <div id="queue" class="hide"> 
    215                                                                 </div><!--/#queue--> 
     246                                                                 
     247                                                                <?php echo wp_get_nav_menu( array( 'context' => 'backend', 'menu' => $nav_menu_selected_id ) ); ?> 
     248                                                                 
    216249                                                        </div><!-- /.inside --> 
    217250                                                <!-- /#nav-menu-canvas .postbox--> 
    218251                                                </div> 
    219                                                 <p> 
    220                                                         <script type="text/javascript"> 
    221                                                                 wp_update_post_data(); 
    222                                                         </script> 
    223                                                         <a class="submitdelete deletion" href="<?php echo wp_nonce_url( admin_url('nav-menus.php?delete-menu=' . $menu_selected_id), 'delete_menu-' . $menu_selected_id ); ?>"><?php _e('Delete Menu'); ?></a> 
    224                                                         <input class="button-primary save" name="save_menu" type="submit" value="<?php esc_attr_e('Save All Changes'); ?>" /> 
    225                                                         <br class="clear" /> 
    226                                                 </p> 
     252                                                <script type="text/javascript"> 
     253                                                        wp_update_post_data(); 
     254                                                </script> 
    227255                                        <?php endif; ?> 
    228                                         </div><!-- /#normal-sortables--> 
    229256                                </div><!-- /#post-body-content--> 
    230257                        </div><!--- /#post-body --> 
    231258                        <div id="menu-settings-column" class="inner-sidebar"> 
    232                                 <div id="side-sortables" class="meta-box-sortables ui-sortable"> 
    233  
    234                                         <div id="create-menu" class="postbox"> 
    235                                                 <h3 class="hndle"><?php esc_html_e('Create Menu'); ?></h3> 
    236                                                 <div class="inside"> 
    237                                                         <p> 
    238                                                                 <input type="text" name="create-menu-name" id="create-menu-name" class="regular-text" value=""  /> 
    239                                                                 <input type="submit" name="create-menu" id="create-menu" class="button" value="<?php esc_attr_e('Create Menu'); ?>" /> 
    240                                                         </p> 
    241                                                 </div><!-- /.inside--> 
    242                                         </div><!--END #create-menu--> 
    243  
    244                                         <div id="add-custom-link" class="postbox"> 
    245                                                 <h3 class="hndle"><?php esc_html_e('Add a Custom Link'); ?></h3> 
    246                                                 <div class="inside"> 
    247                                                         <p id="menu-item-url-wrap"> 
    248                                                                 <label class="howto" for="menu-item-url"> 
    249                                                                         <span><?php _e('URL'); ?></span> 
    250                                                                         <input id="menu-item-url" name="menu-item-url" type="text" class="code" value="http://" /> 
    251                                                                 </label> 
    252                                                         </p> 
    253                                                         <br class="clear" /> 
    254                                                         <p id="menu-item-name-wrap"> 
    255                                                                 <label class="howto" for="custom-menu-item-name"> 
    256                                                                         <span><?php _e('Text'); ?></span> 
    257                                                                         <input id="menu-item-name" type="text" class="regular-text" value="<?php echo esc_attr( __('Menu Item') ); ?>" /> 
    258                                                                 </label> 
    259                                                         </p> 
    260  
    261                                                         <p class="button-controls"> 
    262                                                                 <a class="show-all"><?php _e('View All'); ?></a> 
    263                                                                 <a class="hide-all"><?php _e('Hide All'); ?></a> 
    264                                                         </p> 
    265                                                         <div id="available-links" class="list-wrap"> 
    266                                                                 <div class="list-container"> 
    267                                                                         <ul class="list"> 
    268                                                                         <?php $items_counter = wp_nav_menu_get_custom_links( 0, 'default' ); ?> 
    269                                                                         </ul> 
    270                                                                 </div><!-- /.list-container--> 
    271                                                         </div><!-- /#available-links--> 
    272                                                         <p class="add-to-menu"> 
    273                                                                 <a class="button"><?php _e('Add to Menu'); ?></a> 
    274                                                         </p> 
    275                                                         <br class="clear" /> 
    276                                                 </div><!-- /.inside--> 
    277                                         </div><!-- /#add-custom-link--> 
    278  
    279                                         <div id="add-pages" class="postbox"> 
    280                                                 <h3 class="hndle"><?php esc_html_e('Add an Existing Page'); ?></h3> 
    281                                                 <div class="inside"> 
    282                                                         <?php 
    283                                                                 $pages_args = array( 
    284                                                                         'child_of' => 0, 'sort_order' => 'ASC', 'sort_column' => 'post_title', 'hierarchical' => 1, 
    285                                                                         'exclude' => '', 'include' => '', 'meta_key' => '', 'meta_value' => '', 'authors' => '', 
    286                                                                         'parent' => -1, 'exclude_tree' => '', 'number' => '', 'offset' => 0 
    287                                                                 ); 
    288                                                                 $page_name = ''; 
    289                                                                 $pages_array = get_pages( $pages_args ); 
    290                                                                 if ( $pages_array ) { 
    291                                                                         foreach ( $pages_array as $post ) { 
    292                                                                                 $page_name .= $post->post_title . '|'; 
    293                                                                         } 
    294                                                                 } else { 
    295                                                                         $page_name = __('No pages available'); 
    296                                                                 } 
    297                                                         ?> 
    298                                                         <script type="text/javascript" charset="<?php bloginfo('charset'); ?>"> 
    299                                                                 jQuery(document).ready(function(){ 
    300                                                                         var posts = "<?php echo esc_js( $page_name ); ?>".split('|'); 
    301                                                                         jQuery('#add-pages .quick-search').autocomplete(posts); 
    302  
    303  
    304                                                                         jQuery('#add-pages .quick-search').result(function(event, data, formatted) { 
    305                                                                                 jQuery('#add-pages .list-wrap').css('display','block'); 
    306                                                                                 jQuery("#add-pages .list-wrap li:contains('" + data + "')").css('display','block'); 
    307                                                                                 jQuery('#add-pages .show-all').hide(); 
    308                                                                                 jQuery('#add-pages .hide-all').show(); 
    309                                                                         }); 
    310                                                                 }); 
    311                                                         </script> 
    312                                                         <p> 
    313                                                                 <input type="text" class="quick-search regular-text" value="" /> 
    314                                                                 <a class="quick-search-submit button"><?php _e('Search'); ?></a> 
    315                                                         </p> 
    316  
    317                                                         <p class="button-controls"> 
    318                                                                 <a class="show-all"><?php _e('View All'); ?></a> 
    319                                                                 <a class="hide-all"><?php _e('Hide All'); ?></a> 
    320                                                         </p> 
    321  
    322                                                         <div id="existing-pages" class="list-wrap"> 
    323                                                                 <div class="list-container"> 
    324                                                                         <ul class="list"> 
    325                                                                         <?php $items_counter = wp_nav_menu_get_pages( $items_counter, 'default' ); ?> 
    326                                                                         </ul> 
    327                                                                 </div><!-- /.list-container--> 
    328                                                         </div><!-- /#existing-pages--> 
    329                                                         <p class="add-to-menu enqueue"> 
    330                                                                 <a class="button"><?php _e('Add to Menu'); ?></a> 
    331                                                         </p> 
    332                                                         <br class="clear" /> 
    333                                                 </div><!-- /.inside--> 
    334                                         </div><!--END #add-pages--> 
    335  
    336                                         <div id="add-categories" class="postbox"> 
    337                                                 <h3 class="hndle"><?php esc_html_e('Add an Existing Category'); ?></h3> 
    338                                                 <div class="inside"> 
    339                                                         <?php 
    340                                                                 // Custom GET categories query 
    341                                                                 // @todo Use API 
    342                                                                 $categories = $wpdb->get_results("SELECT term_id FROM $wpdb->term_taxonomy WHERE taxonomy = 'category' ORDER BY term_id ASC"); 
    343                                                                 $cat_name = ''; 
    344                                                                 if ( $categories ) { 
    345                                                                         foreach ( $categories as $category ) { 
    346                                                                                 $cat_id = $category->term_id; 
    347                                                                                 $cat_args = array( 
    348                                                                                         'orderby' => 'name', 
    349                                                                                         'include' => $cat_id, 
    350                                                                                         'hierarchical' => 1, 
    351                                                                                         'order' => 'ASC', 
    352                                                                                 ); 
    353                                                                                 $category_names = get_categories( $cat_args ); 
    354                                                                                 if ( isset( $category_names[0]->name ) ) { 
    355                                                                                         $cat_name .= htmlentities( $category_names[0]->name ).'|'; 
    356                                                                                 } 
    357                                                                         } 
    358                                                                 } else { 
    359                                                                         $cat_name = __('No categories available'); 
    360                                                                 } 
    361                                                         ?> 
    362                                                         <script type="text/javascript" charset="<?php bloginfo('charset'); ?>"> 
    363                                                                 jQuery(document).ready(function(){ 
    364                                                                         var categories = "<?php echo esc_js($cat_name); ?>".split('|'); 
    365                                                                         jQuery('#add-categories .quick-search').autocomplete(categories); 
    366                                                                         jQuery('#add-categories .quick-search').result(function(event, data, formatted) { 
    367                                                                                 jQuery('#add-categories .list-wrap').css('display','block'); 
    368                                                                                 jQuery("#add-categories .list-wrap li:contains('" + data + "')").css('display','block'); 
    369                                                                                 jQuery('#add-categories .show-all').hide(); 
    370                                                                                 jQuery('#add-categories .hide-all').show(); 
    371                                                                         }); 
    372                                                                 }); 
    373                                                         </script> 
    374                                                         <p> 
    375                                                                 <input type="text" class="quick-search regular-text" value="" /> 
    376                                                                 <a class="quick-search-submit button"><?php _e('Search'); ?></a> 
    377                                                         </p> 
    378  
    379                                                         <p class="button-controls"> 
    380                                                                 <a class="show-all"><?php _e('View All'); ?></a> 
    381                                                                 <a class="hide-all"><?php _e('Hide All'); ?></a> 
    382                                                         </p> 
    383  
    384                                                         <div id="existing-categories" class="list-wrap"> 
    385                                                                 <div class="list-container"> 
    386                                                                         <ul class="list"> 
    387                                                                                 <?php $items_counter = wp_nav_menu_get_categories( $items_counter, 'default' ); ?> 
    388                                                                         </ul> 
    389                                                                 </div><!-- /.list-container--> 
    390                                                         </div><!-- /#existing-categories--> 
    391                                                         <p class="add-to-menu enqueue"> 
    392                                                                 <a class="button"><?php _e('Add to Menu'); ?></a> 
    393                                                         </p> 
    394                                                         <br class="clear" /> 
    395                                                 </div><!-- /.inside--> 
    396                                         </div><!--END #add-categories--> 
    397                                 </div><!-- /#side-sortables--> 
     259                                 
     260                                <?php do_meta_boxes( 'menus', 'side', null ); ?> 
     261                                 
    398262                        </div><!-- /#menu-settings-column --> 
    399                         <br class="clear" /> 
    400                 </div><!-- /.metabox-holder has-right-sidebar--> 
    401         </form> 
     263                </form><!--/#update-nav-menu--> 
     264                <br class="clear" /> 
     265        </div><!-- /.metabox-holder has-right-sidebar--> 
    402266</div><!-- /.wrap--> 
    403267 
    404268<div id="menu-item-settings"> 
    405269        <p class="description"> 
    406                 <label for="edit-item-title"> 
     270                <label for="edit-menu-item-title"> 
    407271                        <?php _e( 'Menu Title' ); ?><br /> 
    408                         <input type="text" id="edit-item-title" class="widefat" name="edit-item-title" value="" tabindex="1" /> 
     272                        <input type="text" id="edit-menu-item-title" class="widefat" name="edit-menu-item-title" value="" tabindex="1" /> 
    409273                </label> 
    410274        </p> 
    411275        <p class="description"> 
    412                 <label for="edit-item-url"> 
     276                <label for="edit-menu-item-url"> 
    413277                        <?php _e( 'URL' ); ?><br /> 
    414                         <input type="text" id="edit-item-url" class="widefat code" name="edit-item-url" value="" tabindex="2" /> 
     278                        <input type="text" id="edit-menu-item-url" class="widefat code" name="edit-menu-item-url" value="" tabindex="2" /> 
    415279                </label> 
    416280        </p> 
    417281        <p class="description"> 
    418                 <label for="edit-item-attr-title"> 
    419                         <?php _e( 'Attribute Title' ); ?><br /> 
    420                         <input type="text" id="edit-item-attr-title" class="widefat" name="edit-item-attr-title" value="" tabindex="3" /> 
     282                <label for="edit-menu-item-attr-title"> 
     283                        <?php _e( 'Title Attribute' ); ?><br /> 
     284                        <input type="text" id="edit-menu-item-attr-title" class="widefat" name="edit-menu-item-attr-title" value="" tabindex="3" /> 
    421285                </label> 
    422286        </p> 
    423287        <p class="description"> 
    424                 <label for="edit-item-target"> 
    425                         <?php _e( 'Open Link in a new window' ); ?><br /> 
    426                         <select id="edit-item-target" class="widefat" name="edit-item-target"> 
    427                                 <option value="1">Yes</option> 
    428                                 <option value="0">No</option> 
     288                <label for="edit-menu-item-target"> 
     289                        <?php _e( 'Link Target' ); ?><br /> 
     290                        <select id="edit-menu-item-target" class="widefat" name="edit-menu-item-target" tabindex="4"> 
     291                                <option value="_self">Same window or tab</option> 
     292                                <option value="_blank">New window or tab</option> 
    429293                        </select> 
    430294                </label> 
    431295        </p> 
    432296        <p class="description"> 
    433                 <label for="edit-item-description"> 
    434                         <?php _e( 'Description' ); ?><br /> 
    435                         <textarea id="edit-item-description" class="widefat" rows="3" name="edit-item-description" tabindex="4" /></textarea> 
     297                <label for="edit-menu-item-classes"> 
     298                        <?php _e( 'CSS Classes (optional)' ); ?><br /> 
     299                        <input type="text" id="edit-menu-item-classes" class="widefat code" name="edit-menu-item-classes" value="" tabindex="5" /> 
    436300                </label> 
    437301        </p> 
     302        <p class="description"> 
     303                <label for="edit-menu-item-xfn"> 
     304                        <?php _e( 'Link Relationship (XFN) (optional)' ); ?><br /> 
     305                        <input type="text" id="edit-menu-item-xfn" class="widefat code" name="edit-menu-item-xfn" value="" tabindex="6" /> 
     306                </label> 
     307        </p> 
     308        <p class="description"> 
     309                <label for="edit-menu-item-description"> 
     310                        <?php _e( 'Description (optional)' ); ?><br /> 
     311                        <textarea id="edit-menu-item-description" class="widefat" rows="3" name="edit-menu-item-description" tabindex="7" /></textarea> 
     312                        <span class="description">The description will be displayed in the menu if the current theme supports it.</span> 
     313                </label> 
     314        </p> 
    438315        <p> 
    439                 <a id="cancel-save" class="submitdelete deletion"><?php _e('Cancel'); ?></a> 
    440                 <a id="update-menu-item" class="save button-primary" tabindex="5"><?php _e('Save Changes'); ?></a> 
     316                <a id="update-menu-item" class="save button-primary" tabindex="8"><?php _e('Save Changes'); ?></a> 
     317                <a id="cancel-save" class="submitdelete deletion" tabindex="9"><?php _e('Cancel'); ?></a> 
    441318        </p> 
    442         <input type="hidden" id="edit-item-id" name="edit-item-id" value="" /> 
     319        <input type="hidden" id="edit-menu-item-id" name="edit-item-id" value="" /> 
    443320</div><!-- /#menu-item-settings--> 
    444321 
    445322<?php include( 'admin-footer.php' ); ?> 
     323 No newline at end of file 
  • wp-admin/css/nav-menu.css

     
    1 #menu-management{clear:both;}#menu-management .inside{padding:0 10px;}#menu-container .submit{margin:0 0 10px;padding:0;}.submitdelete{color:#f00;text-decoration:underline;font-size:11px;float:left;margin-top:5px;}.submitdelete:hover{background-color:#F00;color:#fff;}.save{float:right;}.button-controls{float:left;}.add-to-menu{float:right;}#create-menu-name{width:159px;}#available-links{margin:15px 0 0;}#available-links dt{display:block;}#add-custom-link .howto{font-size:11px;}#add-custom-link label span{display:block;float:left;margin-top:5px;padding-right:5px;}#menu-item-url,#menu-item-name{float:right;width:220px;}.show-all,.hide-all{cursor:pointer;}.hide-all{display:none;}.quick-search{width:190px;}.list-wrap{display:none;clear:both;}.list-container{max-height:200px;overflow-y:auto;padding:10px 10px 5px;border:1px solid #DFDFDF;-moz-border-radius:4px;}.postbox p.submit{margin-bottom:0;}.list li{display:none;margin:0;margin-bottom:5px;}.list li .item-title{cursor:pointer;display:block;}.list li .item-title input{margin-right:3px;margin-top:-3px;}.list li ul li .item-title{margin-left:14px;}.list li ul li ul li .item-title{margin-left:28px;}.list li ul li ul li ul li .item-title{margin-left:42px;}.list li ul li ul li ul li ul li .item-title{margin-left:56px;}.list li ul li ul li ul li ul li ul li .item-title{margin-left:70px;}.list li ul li ul li ul li ul li ul li ul li .item-title{margin-left:84px;}.list li ul li ul li ul li ul li ul li ul li ul li .item-title{margin-left:98px;}.list li ul li ul li ul li ul li ul li ul li ul li ul li .item-title{margin-left:112px;}#menu-container .inside{padding-bottom:10px;}.menu ul{width:100%;}.menu li{margin:0;}.menu li dl dt{-webkit-border-bottom-left-radius:6px;-webkit-border-bottom-right-radius:6px;-webkit-border-top-left-radius:6px;-webkit-border-top-right-radius:6px;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top-left-radius:6px;border-top-right-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;border:1px solid #E6E6E6;position:relative;padding-left:10px;background-color:#f1f1f1;height:35px;line-height:35px;}.menu li dl dt:hover{cursor:move;}.menu li .item-title{background:url(../images/ico-arrow.png) no-repeat 4px 5px;background-position:center left;padding-left:15px;}.menu li ul li{margin-left:20px;opacity:.7;}.menu li ul li ul li{opacity:.9;}.menu li ul li ul li ul li{opacity:.9;}.menu li ul li ul li ul li ul li{opacity:.95;}.dropzone{height:7px;margin:3px 0 3px 0;}.ui-draggable-dragging{width:600px;}.item-type{text-transform:uppercase;font-size:11px;color:#999;padding-right:10px;}.item-controls{font-size:11px;position:absolute;right:15px;top:-1px;}.item-controls a{text-decoration:none;}.item-controls a:hover{cursor:pointer;}.item-controls .item-delete:hover{color:#f00;}#menu-item-settings{display:none;}#cancel-save{cursor:pointer;}#cancel-save:hover{color:#fff!important;}#update-menu-item{color:#fff!important;}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important;}.hide{display:none;} 
    2  No newline at end of file 
     1#menu-management{clear:both;}#menu-management .inside{padding:0 10px;}#menu-container .submit{margin:0 0 10px;padding:0;}.submitdelete{font-size:11px;}#cancel-save{color:#f00;text-decoration:underline;font-size:11px;margin-left:20px;margin-top:5px;}#cancel-save:hover{background-color:#F00;color:#fff;}.button-controls{float:left;}.add-to-menu{float:right;}#manage-menu .inside{padding:0;}#create-menu-name{width:159px;}#available-links{margin:15px 0 0;}#available-links dt{display:block;}#add-custom-link .howto{font-size:11px;}#add-custom-link label span{display:block;float:left;margin-top:5px;padding-right:5px;}.menu-item-textbox{float:right;width:220px;}.howto span{margin-top:4px;display:block;float:left;}.show-all,.hide-all{cursor:pointer;}.hide-all{display:none;}.quick-search{width:190px;}.list-wrap{display:none;clear:both;}.list-container{max-height:200px;overflow-y:auto;padding:10px 10px 5px;border:1px solid #DFDFDF;-moz-border-radius:4px;}.postbox p.submit{margin-bottom:0;}.list li{display:none;margin:0;margin-bottom:5px;}.list li .menu-item-title{cursor:pointer;display:block;}.list li .menu-item-title input{margin-right:3px;margin-top:-3px;}.list li ul li .menu-item-title{margin-left:14px;}.list li ul li ul li .menu-item-title{margin-left:28px;}.list li ul li ul li ul li .menu-item-title{margin-left:42px;}.list li ul li ul li ul li ul li .menu-item-title{margin-left:56px;}.list li ul li ul li ul li ul li ul li .menu-item-title{margin-left:70px;}.list li ul li ul li ul li ul li ul li ul li .menu-item-title{margin-left:84px;}.list li ul li ul li ul li ul li ul li ul li ul li .menu-item-title{margin-left:98px;}.list li ul li ul li ul li ul li ul li ul li ul li ul li .menu-item-title{margin-left:112px;}#menu-container .inside{padding-bottom:10px;}.menu ul{width:100%;}.menu li{margin:0;}.menu li dl dt{-webkit-border-bottom-left-radius:6px;-webkit-border-bottom-right-radius:6px;-webkit-border-top-left-radius:6px;-webkit-border-top-right-radius:6px;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top-left-radius:6px;border-top-right-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;border:1px solid #E6E6E6;position:relative;padding-left:10px;background-color:#f1f1f1;height:35px;line-height:35px;}.menu li dl dt:hover{cursor:move;}.menu li ul li{margin-left:20px;opacity:.7;}.menu li ul li ul li{opacity:.9;}.menu li ul li ul li ul li{opacity:.9;}.menu li ul li ul li ul li ul li{opacity:.95;}.dropzone{height:7px;margin:3px 0 3px 0;}.ui-draggable-dragging{width:600px;}.item-type{text-transform:uppercase;font-size:11px;color:#999;padding-right:10px;}.item-controls{font-size:11px;position:absolute;right:15px;top:-1px;}.item-controls a{text-decoration:none;}.item-controls a:hover{cursor:pointer;}.item-controls .menu-item-delete:hover{color:#f00;}#menu-item-settings{display:none;}#cancel-save{cursor:pointer;}#cancel-save:hover{color:#fff!important;}#update-menu-item{color:#fff!important;}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important;} 
     2 No newline at end of file 
  • wp-admin/css/nav-menu.dev.css

     
    1414 
    1515/* Button Primary Actions */ 
    1616#menu-container .submit { margin: 0px 0px 10px; padding: 0px; } 
    17 .submitdelete { color: #ff0000; text-decoration: underline; font-size: 11px; float: left; margin-top: 5px; } 
    18 .submitdelete:hover { background-color: #FF0000; color: #fff; } 
    19 .save { float: right; } 
    2017 
     18.submitdelete { font-size: 11px; } 
     19#cancel-save { color: #ff0000; text-decoration: underline; font-size: 11px; margin-left: 20px; margin-top: 5px; } 
     20#cancel-save:hover { background-color: #FF0000; color: #fff; } 
     21 
    2122/* Button Secondary Actions */ 
    2223.button-controls { float: left; } 
    2324.add-to-menu { float: right; } 
    2425 
    25 /* CSS for switching the main columns *//* 
    26 #menu-settings-column { clear: none; float: left; } 
    27 #menu-management #post-body { float: right; margin-left: -340px; margin-right: 0px; } 
    28 #menu-management #post-body-content { margin-left: 300px; margin-right: 0px; } 
    29 */ 
     26#manage-menu .inside { padding: 0px 0px; } 
    3027 
    3128/* Create Menu */ 
    3229#create-menu-name { width: 159px; } 
     
    3633#available-links dt { display: block; } 
    3734#add-custom-link .howto { font-size: 11px; } 
    3835#add-custom-link label span { display: block; float: left; margin-top: 5px; padding-right: 5px; } 
    39 #menu-item-url, #menu-item-name { float: right; width: 220px; } 
     36.menu-item-textbox { float: right; width: 220px; } 
     37.howto span { margin-top: 4px; display: block; float: left; } 
    4038 
    4139/* Pages/Categories */ 
    4240.show-all, .hide-all { cursor: pointer; } 
     
    5048/* Listings */ 
    5149.list li { display: none; margin: 0; margin-bottom: 5px; } 
    5250 
    53 .list li .item-title { cursor: pointer; display: block; } 
    54 .list li .item-title input { margin-right: 3px; margin-top: -3px; } 
     51.list li .menu-item-title { cursor: pointer; display: block; } 
     52.list li .menu-item-title input { margin-right: 3px; margin-top: -3px; } 
    5553 
    56 .list li ul li .item-title  { margin-left: 14px; } 
    57 .list li ul li ul li .item-title  { margin-left: 28px; } 
    58 .list li ul li ul li ul li .item-title  { margin-left: 42px; } 
    59 .list li ul li ul li ul li ul li .item-title  { margin-left: 56px; } 
    60 .list li ul li ul li ul li ul li ul li .item-title  { margin-left: 70px; } 
    61 .list li ul li ul li ul li ul li ul li ul li .item-title  { margin-left: 84px; } 
    62 .list li ul li ul li ul li ul li ul li ul li ul li .item-title  { margin-left: 98px; } 
    63 .list li ul li ul li ul li ul li ul li ul li ul li ul li .item-title  { margin-left: 112px; } 
     54.list li ul li .menu-item-title  { margin-left: 14px; } 
     55.list li ul li ul li .menu-item-title  { margin-left: 28px; } 
     56.list li ul li ul li ul li .menu-item-title  { margin-left: 42px; } 
     57.list li ul li ul li ul li ul li .menu-item-title  { margin-left: 56px; } 
     58.list li ul li ul li ul li ul li ul li .menu-item-title  { margin-left: 70px; } 
     59.list li ul li ul li ul li ul li ul li ul li .menu-item-title  { margin-left: 84px; } 
     60.list li ul li ul li ul li ul li ul li ul li ul li .menu-item-title  { margin-left: 98px; } 
     61.list li ul li ul li ul li ul li ul li ul li ul li ul li .menu-item-title  { margin-left: 112px; } 
    6462 
    6563/* Menu */ 
    6664#menu-container .inside { padding-bottom: 10px; } 
     
    7169.menu li dl dt:hover { cursor: move; } 
    7270 
    7371.menu li .item-title { } 
    74 .menu li ul li { margin-left: 20px; opacity: .7;} 
    75 .menu li ul li ul li { opacity: .9;} 
    76 .menu li ul li ul li ul li { opacity: .9;} 
     72.menu li ul li { margin-left: 20px; opacity: .7; } 
     73.menu li ul li ul li { opacity: .9; } 
     74.menu li ul li ul li ul li { opacity: .9; } 
    7775.menu li ul li ul li ul li ul li { opacity: .95; } 
    7876 
    7977/* Drag and Drop */ 
     
    8583.item-controls { font-size: 11px; position: absolute; right: 15px; top: -1px; } 
    8684.item-controls a { text-decoration: none; } 
    8785.item-controls a:hover { cursor: pointer; } 
    88 .item-controls .item-delete:hover { color: #ff0000; } 
     86.item-controls .menu-item-delete:hover { color: #ff0000; } 
    8987 
    9088/* Thickbox */ 
    9189#menu-item-settings { display: none; } 
     
    9492#update-menu-item { color: #fff !important; } 
    9593#update-menu-item:hover, 
    9694#update-menu-item:active, 
    97 #update-menu-item:focus { color: #eaf2fa !important; border-color: #13455b !important; } 
    98  
    99 /* Misc */ 
    100 .hide { display: none; } 
    101  No newline at end of file 
     95#update-menu-item:focus { color: #eaf2fa !important; border-color: #13455b !important; } 
     96 No newline at end of file