Ticket #11817: ticket_11817_nav_menu_bugfixes_tweaks.diff

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

     
    11<?php 
    2  
    32/** 
    4  * Outputs a navigation menu. 
     3 * Displays a navigation menu. 
    54 * 
    65 * Optional $args contents: 
    76 * 
     
    109 * menu_class - CSS class to use for the div container of the menu list. Defaults to 'menu'. 
    1110 * format - Whether to format the ul. Defaults to 'div'. 
    1211 * fallback_cb - If the menu doesn't exists, a callback function will fire. Defaults to 'wp_page_menu'. 
     12 * before_link - Output text before the link. 
     13 * after_link - Output text after the link. 
     14 * before_title - Output text before the link text. 
     15 * before_title - Output text after the link text. 
     16 * echo - Whether to echo the menu or return it. Defaults to echo. 
    1317 * 
    1418 * TODO: 
    1519 * show_home - If you set this argument, then it will display the link to the home page. The show_home argument really just needs to be set to the value of the text of the link. 
    16  * link_before - Text before show_home argument text. 
    17  * link_after - Text after show_home argument text. 
    18  * echo - Whether to echo the menu or return it. Defaults to echo. 
    1920 * 
    2021 * @since 3.0.0 
    2122 * 
    2223 * @param array $args Arguments 
    2324 */ 
    2425function wp_nav_menu( $args = array() ) { 
    25         $defaults = array( 'id' => '', 'slug' => '', 'menu_class' => 'menu', 'format' => 'div', 'fallback_cb' => 'wp_page_menu', 'echo' => true, 'link_before' => '', 'link_after' => '' ); 
     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' => '', ); 
     28         
    2629        $args = wp_parse_args( $args, $defaults ); 
     30        $args = apply_filters( 'wp_nav_menu_args', $args ); 
    2731        $args = (object) $args; 
    2832         
    29         // Get the menu 
    30         $menu = null; 
    31         if ( !empty($args->id) ) { 
    32                 $menu = wp_get_nav_menu( $args->id ); 
    33         } elseif ( !empty($args->slug) ) { 
    34                 $menu = get_term_by( 'slug', $args->slug, 'nav_menu' ); 
    35         } else { 
     33        // Get the nav menu 
     34        $menu = wp_get_nav_menu_object( $args->menu ); 
     35                 
     36        // If we couldn't find a menu based off the name, id or slug, 
     37        // get the first menu that has items. 
     38        if ( !$menu ) { 
    3639                $menus = wp_get_nav_menus(); 
    3740                foreach ( $menus as $menu_maybe ) { 
    3841                        if ( wp_get_nav_menu_items($menu_maybe->term_id) ) { 
     
    4245                } 
    4346        } 
    4447         
    45         // If the menu doesn't exists, call the fallback_cb 
    46         if ( !$menu || is_wp_error($menu) ) 
    47                 return call_user_func($args->fallback_cb, $args ); 
    48  
     48        $args->menu = $menu->term_id; 
     49        $nav_menu = ''; 
     50         
    4951        if ( 'div' == $args->format ) 
    50                 echo '<div class="' . esc_attr($args->menu_class) . '"><ul>'; 
    51  
    52         $args->id = $menu->term_id; 
    53  
    54         wp_print_nav_menu($args); 
    55                  
     52                $nav_menu .= '<div id="menu-'. $menu->slug .'" class="' . esc_attr($args->menu_class) . '">'; 
     53         
     54        $nav_menu .= wp_get_nav_menu( $args ); 
     55         
    5656        if ( 'div' == $args->format ) 
    57                 echo '</ul></div>'; 
     57                $nav_menu .= '</div>'; 
     58         
     59        $nav_menu = apply_filters( 'wp_nav_menu', $nav_menu ); 
     60         
     61        return $args->echo ? print $nav_menu : $nav_menu; 
    5862} 
    5963 
    60 function wp_print_nav_menu( $args = array() ) { 
    61                 // Defaults 
    62                 $defaults = array( 'type' => 'frontend', 'name' => 'Menu 1', 'id' => 0, 'desc' => 2, 'before_title' => '', 'after_title' => ''); 
    63  
    64                 $args = wp_parse_args($args, $defaults); 
    65                 extract($args, EXTR_SKIP); 
    66  
    67                 $menu_items = wp_get_nav_menu_items( $id ); 
    68  
    69                 $parent_stack = array(); 
    70                 $current_parent = 0; 
    71                 $parent_menu_order = array(); 
    72                 // Setup parentage 
    73                 foreach ( $menu_items as $menu_item ) { 
    74                         $parent_menu_order[ $menu_item->ID ] = $menu_item->menu_order; 
     64/** 
     65 * Returns a Navigation Menu. 
     66 * 
     67 * See wp_nav_menu() for args. 
     68 * 
     69 * @since 3.0.0 
     70 * 
     71 * @param array $args Arguments 
     72 * @return mixed $output False if menu doesn't exists, else, returns the menu. 
     73 **/ 
     74function wp_get_nav_menu( $args = array() ) { 
     75        $defaults = array( 'menu' => '', 'menu_class' => 'menu', 'ul_class' => '', 'format' => 'div', 'type' => 'frontend', 
     76        'fallback_cb' => '', 'link_before' => '', 'link_after' => '', 'before_link' => '', 'after_link' => '', ); 
     77         
     78        $args = wp_parse_args( $args, $defaults ); 
     79        $args = apply_filters( 'wp_get_nav_menu_args', $args ); 
     80        $args = (object) $args; 
     81         
     82        $menu = wp_get_nav_menu_object( $args->menu ); 
     83         
     84        // If no menu was found, call the fallback_cb 
     85        if ( !$menu || is_wp_error($menu) ) { 
     86                if ( function_exists($args->fallback_cb) ) 
     87                        return call_user_func( $args->fallback_cb, $args ); 
     88        } 
     89         
     90        $menu_items = wp_get_nav_menu_items( $menu->term_id ); 
     91        $nav_menu = ''; 
     92        $parent_stack = array(); 
     93        $current_parent = 0; 
     94        $parent_menu_order = array(); 
     95         
     96        // Setup parentage 
     97        foreach ( $menu_items as $menu_item ) 
     98                $parent_menu_order[ $menu_item->ID ] = $menu_item->menu_order; 
     99         
     100        $ul_class = isset($args->ul_class) ? ' class="'. $args->ul_class .'"' : ''; 
     101        $nav_menu .= '<ul'. $ul_class .'>'; 
     102         
     103        // Display Loop 
     104        foreach ( $menu_items as $key => $menu_item ) : 
     105                // Setup the $menu_item variables 
     106                $menu_item = wp_setup_nav_menu_item( $menu_item ); 
     107                 
     108                $maybe_value = 'frontend' == $args->type ? '' : ' value="'. $menu_item->ID .'"'; 
     109                $classes = 'frontend' == $args->type ? 'class="menu-item-'. $menu_item->type . $menu_item->li_class .'"' : ''; 
     110                 
     111                $nav_menu .= '<li id="menu-item-'. $menu_item->ID .'"'. $maybe_value . $classes .'>'; 
     112                $nav_menu .= wp_get_nav_menu_item( $menu_item, $args->type, $args ); 
     113                 
     114                // Indent children 
     115                $last_item = ( count( $menu_items ) == $menu_item->menu_order ); 
     116                if ( $last_item || $current_parent != $menu_items[ $key + 1 ]->post_parent ) { 
     117                        if ( $last_item || in_array( $menu_items[ $key + 1 ]->post_parent, $parent_stack ) ) { 
     118                                $nav_menu .= '</li>'; 
     119                                while ( !empty( $parent_stack ) && ($last_item || $menu_items[ $key + 1 ]->post_parent != $current_parent ) ) { 
     120                                        $nav_menu .= '</ul></li>'; 
     121                                        $current_parent = array_pop( $parent_stack ); 
     122                                } 
     123                        } else { 
     124                                array_push( $parent_stack, $current_parent ); 
     125                                $current_parent = $menu_item->ID; 
     126                                $nav_menu .= '<ul>'; 
     127                        } 
     128                } else { 
     129                        $nav_menu .= '</li>'; 
    75130                } 
    76  
    77             // Display Loop 
    78                 foreach ( $menu_items as $key => $menu_item ) { 
    79                         $menu_item = wp_setup_nav_menu_item($menu_item); 
    80                         // List Items 
    81                         ?><li id="menu-<?php echo $menu_item->ID; ?>" value="<?php echo $menu_item->ID; ?>" <?php echo $menu_item->li_class; ?>><?php 
    82                         wp_print_nav_menu_item($menu_item, $type, $args); 
    83                         // Indent children 
    84                         $last_item = ( count( $menu_items ) == $menu_item->menu_order ); 
    85                         if ( $last_item || $current_parent != $menu_items[ $key + 1 ]->post_parent ) { 
    86                                 if ( $last_item || in_array( $menu_items[ $key + 1 ]->post_parent, $parent_stack ) ) { ?> 
    87                 </li> 
    88 <?php                                   while ( !empty( $parent_stack ) && ($last_item || $menu_items[ $key + 1 ]->post_parent != $current_parent ) ) { ?> 
    89                         </ul> 
    90                 </li> 
    91 <?php                                   $current_parent = array_pop( $parent_stack ); 
    92                                         } ?> 
    93 <?php                           } else { 
    94                                         array_push( $parent_stack, $current_parent ); 
    95                                         $current_parent = $menu_item->ID; ?> 
    96                         <ul> 
    97 <?php                           } 
    98                         } else { ?> 
    99                 </li> 
    100 <?php           } 
    101         } 
     131                 
     132        endforeach; 
     133         
     134        $nav_menu .= '</ul>'; 
     135         
     136        return apply_filters( 'wp_get_nav_menu', $nav_menu ); 
    102137} 
    103138 
    104 function wp_print_nav_menu_item( $menu_item, $context, $args = array() ) { 
     139/** 
     140 * Returns a menu item. 
     141 * 
     142 * @since 3.0.0 
     143 * 
     144 * @param object $menu_item The menu item 
     145 * @param string $context frontend|backend|default 
     146 * @param array $args See wp_get_nav_menu(). 
     147 **/ 
     148function wp_get_nav_menu_item( $menu_item, $context, $args = array() ) { 
     149        $item = ''; 
    105150        switch ( $context ) { 
     151                case 'frontend': 
     152                        $attr_title = ( isset($menu_item->anchor_title) && '' != $menu_item->anchor_title ) ? ' title="'. esc_attr($menu_item->anchor_title) .'"' : ''; 
     153                        $href = isset($menu_item->link) ? ' href="'. esc_url($menu_item->link) .'"' : ''; 
     154                         
     155                        $item .= '<a'. $attr_title . $href . $menu_item->target .'>'; 
     156                        $item .= $args->before_link . esc_html( $menu_item->title ) . $args->after_link; 
     157                        $item .= '</a>'; 
     158                         
     159                        break; 
     160                 
    106161                case 'backend': 
    107                 case 'menu': 
    108 ?> 
    109                                                 <dl> 
    110                                                         <dt> 
    111                                                                 <span class="item-title"><?php echo esc_html($menu_item->title); ?></span> 
    112                                                                 <span class="item-controls"> 
    113                                                                         <span class="item-type"><?php echo esc_html($menu_item->type); ?></span> 
    114                                                                         <a class="item-edit thickbox" id="edit<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->menu_order ); ?>" title="<?php _e('Edit Menu Item'); ?>" href="#TB_inline?height=380&width=300&inlineId=menu-item-settings"><?php _e('Edit'); ?></a> | 
    115                                                                         <a class="item-delete" id="delete<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->menu_order ); ?>"><?php _e('Delete'); ?></a> 
    116                                                                 </span> 
    117                                                         </dt> 
    118                                                 </dl> 
    119                                                 <?php if ( 'backend' == $context ) { ?> 
    120                                                 <a><span class=""></span></a> 
    121                                                 <?php } else { ?> 
    122                                                 <a class="hide" href="<?php echo $menu_item->link; ?>"><?php echo esc_html( $menu_item->title ); ?></a> 
    123                                                 <?php } ?> 
    124                                                 <input type="hidden" name="dbid<?php echo esc_attr( $menu_item->menu_order ); ?>" id="dbid<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->ID ); ?>" /> 
    125                                                 <input type="hidden" name="postmenu<?php echo esc_attr( $menu_item->menu_order ); ?>" id="postmenu<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( get_post_meta( $menu_item->ID, 'object_id', true ) ); ?>" /> 
    126                                                 <input type="hidden" name="parent<?php echo esc_attr( $menu_item->menu_order ); ?>" id="parent<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->parent_item ); ?>" /> 
    127                                                 <input type="hidden" name="icon<?php echo esc_attr( $menu_item->menu_order ); ?>" id="icon<?php echo esc_attr( $menu_item->menu_order ); ?>" value="0" /> 
    128                                                 <input type="hidden" name="position<?php echo esc_attr( $menu_item->menu_order ); ?>" id="position<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->menu_order ); ?>" /> 
    129                                                 <input type="hidden" name="linktype<?php echo esc_attr( $menu_item->menu_order ); ?>" id="linktype<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( get_post_meta( $menu_item->ID, 'menu_type', true ) ); ?>" /> 
    130                                                 <input type="hidden" name="item-title<?php echo esc_attr( $menu_item->menu_order ); ?>" id="item-title<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->title ); ?>" /> 
    131                                                 <input type="hidden" name="item-url<?php echo esc_attr( $menu_item->menu_order ); ?>" id="item-url<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->link ); ?>" /> 
    132                                                 <input type="hidden" name="item-description<?php echo esc_attr( $menu_item->menu_order ); ?>" id="item-description<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->description ); ?>" /> 
    133                                                 <input type="hidden" name="item-attr-title<?php echo esc_attr( $menu_item->menu_order ); ?>" id="item-attr-title<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->post_excerpt ); ?>" /> 
    134                                                 <input type="hidden" name="item-target<?php echo esc_attr( $menu_item->menu_order ); ?>" id="item-target<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo ( get_post_meta( $menu_item->ID, 'menu_new_window', true ) ? '1' : '0' ); ?>" /> 
    135 <?php 
    136                 break; 
    137  
    138                 case 'frontend': 
    139                         // Override for menu descriptions 
    140                         $advanced_option_descriptions = get_option('wp_settings_nav_menu_advanced_options'); 
    141                         if ( $advanced_option_descriptions == 'no' ) 
    142                                 $args['desc'] = 2; 
    143 ?> 
    144                         <a title="<?php echo esc_attr( $menu_item->anchor_title ); ?>" href="<?php echo esc_url( $menu_item->link ); ?>" <?php echo $menu_item->target; ?>><?php echo $args['before_title'] . esc_html( $menu_item->title ) . $args['after_title']; ?><?php 
    145  
    146                                                         if ( $advanced_option_descriptions == 'no' ) { 
    147                                                                 // 2 widget override do NOT display descriptions 
    148                                                                 // 1 widget override display descriptions 
    149                                                                 // 0 widget override not set 
    150                                                                 if ( ($args['desc'] == 1) || ($args['desc'] == 0) ) { 
    151                                                                         ?><span class="nav-description"><?php echo $menu_item->description; ?></span><?php 
    152                                                                 } 
    153                                                         } else { 
    154                                                                 // 2 widget override do NOT display descriptions 
    155                                                                 // 1 widget override display descriptions 
    156                                                                 // 0 widget override not set 
    157                                                                 if ( $args['desc'] == 1 ) { 
    158                                                                         ?><span class="nav-description"><?php echo $menu_item->description; ?></span><?php 
    159                                                                 } 
    160                                                         } 
    161                                                 ?></a> 
    162 <?php 
    163                 break; 
    164  
     162                        $item .= '<dl><dt>'; 
     163                        $item .= '<span class="item-title">'. esc_html($menu_item->title) .'</span>'; 
     164                        $item .= '<span class="item-controls">'; 
     165                        $item .= '<span class="item-type">'. esc_html($menu_item->type) .'</span>'; 
     166                         
     167                        // Actions 
     168                        $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> | '; 
     169                        $item .= '<a class="item-delete" id="delete'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->menu_order ) .'">'. __('Delete') .'</a>'; 
     170                         
     171                        $item .= '</dt></dl>'; 
     172                         
     173                        // Menu Item Settings 
     174                        $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 ) .'" />'; 
     175                        $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 ) ) .'" />'; 
     176                        $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 ) .'" />'; 
     177                        $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 ) .'" />'; 
     178                        $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 ) ) .'" />'; 
     179                        $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 ) .'" />'; 
     180                        $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 ) .'" />'; 
     181                        $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 ) .'" />'; 
     182                        $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 )  .'" />'; 
     183                        $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' ) .'" />'; 
     184                        break; 
     185                         
    165186                case 'default': 
    166187                        $menu_id = 'menu-item-' . $menu_item->ID; 
    167 ?> 
    168                                         <dl> 
    169                                                 <dt> 
    170                                                         <label class="item-title"><input type="checkbox" id="<?php echo esc_attr($menu_id); ?>" onclick="wp_update_queue('<?php echo esc_js( $menu_item->append ); ?>','<?php echo esc_js( $menu_item->title ); ?>','<?php echo esc_js( $menu_item->link ); ?>','<?php echo esc_js( $menu_item->ID ); ?>','<?php echo esc_js( $menu_item->parent_item ); ?>','<?php echo esc_js( $menu_item->description ); ?>')" name="<?php echo esc_attr( $menu_item->title ); ?>" value="<?php echo esc_attr( $menu_item->link ); ?>" /><?php echo $menu_item->title; ?></label> 
    171                                                 </dt> 
    172                                         </dl> 
    173 <?php 
    174                 break; 
     188                        $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>'; 
     189                         
     190                        // Menu Item Settings 
     191                        $item .= '<input type="hidden" class="item-type" value="'. esc_attr( $menu_item->append ) .'" />'; 
     192                        $item .= '<input type="hidden" class="item-title" value="'. esc_attr( $menu_item->title ) .'" />'; 
     193                        $item .= '<input type="hidden" class="item-url" value="'. esc_attr( $menu_item->link ) .'" />'; 
     194                        $item .= '<input type="hidden" class="item-dbid" value="'. esc_attr( $menu_item->ID ) .'" />'; 
     195                        $item .= '<input type="hidden" class="item-parent" value="'. esc_attr( $menu_item->parent_item ) .'" />'; 
     196                        $item .= '<input type="hidden" class="item-description" value="'. esc_attr( $menu_item->description ) .'" />'; 
     197                        break; 
    175198        } 
     199        return apply_filters( 'wp_get_nav_menu_item', $item ); 
    176200} 
    177  
    178201?> 
    179  No newline at end of file 
  • wp-includes/default-widgets.php

     
    10441044 class WP_Nav_Menu_Widget extends WP_Widget { 
    10451045 
    10461046        function WP_Nav_Menu_Widget() { 
    1047                 $widget_ops = array('description' => __('Use this widget to add one of your navigation menus as a widget.') ); 
    1048                 parent::WP_Widget( false, __('Navigation Menu'), $widget_ops ); 
     1047                $widget_ops = array( 'description' => __('Use this widget to add one of your navigation menus as a widget.') ); 
     1048                parent::WP_Widget( 'nav_menu', __('Navigation Menu'), $widget_ops ); 
    10491049        } 
    1050  
     1050         
    10511051        function widget($args, $instance) { 
    1052                 $navmenu = $instance['navmenu']; 
    1053                 $navtitle = $instance['navtitle']; 
    1054                 $navdeveloper = strtolower($instance['navdeveloper']); 
    1055                 $navdiv = strtolower($instance['navdiv']); 
    1056                 $navul = strtolower($instance['navul']); 
    1057                 $navdivid = $instance['navdivid']; 
    1058                 $navdivclass = $instance['navdivclass']; 
    1059                 $navulid = $instance['navulid']; 
    1060                 $navulclass = $instance['navulclass']; 
    1061  
    1062                 // Override for menu descriptions 
    1063                 $advanced_option_descriptions = get_option('wp_settings_nav_menu_advanced_options'); 
    1064                 if ( $advanced_option_descriptions == 'no' ) { 
    1065                         $navwidgetdescription = 2; 
    1066                 } else { 
    1067                         $navwidgetdescription = $instance['navwidgetdescription']; 
    1068                 } 
    1069  
    10701052                // Get menu 
    1071                 if ( $navmenu > 0 ) { 
    1072                         $custom_menu = get_term( (int) $nav_menu, 'nav_menu' ); 
    1073                         $wp_custom_nav_menu_name = $custom_menu->name; 
    1074                         $menuexists = true; 
    1075                 } else { 
    1076                         $menuexists = false; 
    1077                 } 
    1078  
    1079                 if ( $navdeveloper == 'yes' ) { 
    1080                         // DISPLAY Custom DIV 
    1081                         if ( $navdiv == 'yes' ) { 
    1082                         ?> 
    1083                                 <div id="<?php echo $navdivid;  ?>" class="<?php echo $navdivclass; ?>"> 
    1084                         <?php 
    1085                                 } 
    1086                         } else { 
    1087                                 //DISPLAY default DIV 
    1088                                 ?> 
    1089                                 <div class="widget"> 
    1090                                 <?php 
    1091                         } 
    1092                 ?> 
    1093  
    1094                 <h3><?php echo $navtitle; ?></h3> 
    1095                 <?php 
    1096                 if ( $menuexists ) { 
    1097                         if ( $navdeveloper == 'yes' ) { 
    1098                                 //DISPLAY Custom UL 
    1099                                 if ( $navul == 'yes' ) { 
    1100                                         ?> 
    1101                                         <ul id="<?php echo $navulid;  ?>" class="<?php echo $navulclass; ?>"> 
    1102                                         <?php 
    1103                                 } 
    1104                         } else { 
    1105                                 // DISPLAY default UL 
    1106                                 ?> 
    1107                                 <ul class="menu"> 
    1108                                 <?php 
    1109                         } 
    1110                         wp_nav_menu( array('id' => $navmenu, 'name' => $wp_custom_nav_menu_name, 'desc' => $navwidgetdescription, 'format' => 'widget') ); 
    1111                         if ( $navdeveloper == 'yes' ) { 
    1112                                 // DISPLAY Custom UL 
    1113                                 if ( $navul == 'yes' ) { 
    1114                                         ?> 
    1115                                         </ul> 
    1116                                         <?php 
    1117                                 } 
    1118                         } else { 
    1119                                 // DISPLAY default UL 
    1120                                 ?> 
    1121                                 </ul> 
    1122                                 <?php 
    1123                         } 
    1124                 } else { 
    1125                         _e('You have not setup the custom navigation widget correctly, please check your settings in the backend.'); 
    1126                 } 
    1127  
    1128                 //DEVELOPER settings enabled 
    1129                 if ($navdeveloper == 'yes') { 
    1130                         // DISPLAY Custom DIV 
    1131                         if ( $navdiv == 'yes' ) { 
    1132                                 ?> 
    1133                                 </div> 
    1134                                 <?php 
    1135                         } 
    1136                 } else { 
    1137                         // DISPLAY default DIV 
    1138                         ?> 
    1139                         </div> 
    1140                         <?php 
    1141                 } 
    1142                 ?><!-- /#nav-container --> 
    1143                 <?php 
     1053                $nav_menu = wp_get_nav_menu_object( $instance['nav_menu'] ); 
     1054                 
     1055                if ( !$nav_menu ) 
     1056                        return;          
     1057                 
     1058                echo $args['before_widget']; 
     1059                 
     1060                if ( isset($instance['title']) ) 
     1061                        echo $args['before_title'] . $instance['title'] . $args['after_title']; 
     1062                 
     1063                wp_nav_menu( array( 'menu' => $nav_menu ) ); 
     1064                 
     1065                echo $args['after_widget']; 
    11441066        } 
    11451067 
    1146         function update($new_instance, $old_instance) { 
    1147                 return $new_instance; 
     1068        function update( $new_instance, $old_instance ) { 
     1069                $instance['title'] = strip_tags( stripslashes($new_instance['title']) ); 
     1070                $instance['nav_menu'] = (int) $new_instance['nav_menu']; 
     1071                return $instance; 
    11481072        } 
    11491073 
    1150         function form($instance) { 
    1151                 $navmenu = esc_attr($instance['navmenu']); 
    1152                 $navtitle = esc_attr($instance['navtitle']); 
    1153                 $navdeveloper = esc_attr($instance['navdeveloper']); 
    1154                 $navdiv = esc_attr($instance['navdiv']); 
    1155                 $navul = esc_attr($instance['navul']); 
    1156                 $navdivid = esc_attr($instance['navdivid']); 
    1157                 $navdivclass = esc_attr($instance['navdivclass']); 
    1158                 $navulid = esc_attr($instance['navulid']); 
    1159                 $navulclass = esc_attr($instance['navulclass']); 
    1160                 $navwidgetdescription = esc_attr($instance['navwidgetdescription']); 
    1161  
    1162                 global $wpdb; 
    1163  
     1074        function form( $instance ) { 
     1075                $title = isset( $instance['title'] ) ? $instance['title'] : ''; 
     1076                $nav_menu = isset( $instance['nav_menu'] ) ? $instance['nav_menu'] : ''; 
     1077                 
    11641078                // Get menus 
    1165                 $custom_menus = get_terms( 'nav_menu', array( 'hide_empty' => false ) ); 
    1166  
    1167                 if ( !$custom_menus) { 
    1168                 ?> 
    1169                         <p> 
    1170                         <label><?php printf(__('No menus have been created yet.  <a href="%s">Creat some</a>.'), admin_url('nav-menus.php')); ?></label> 
    1171                         </p> 
    1172                 <?php 
     1079                $menus = get_terms( 'nav_menu', array( 'hide_empty' => false ) ); 
     1080                 
     1081                // If no menus exists, direct the user to go and create some. 
     1082                if ( !$menus ) { 
     1083                        echo '<p>'. sprintf( __('No menus have been created yet. <a href="%s">Creat some</a>.'), admin_url('nav-menus.php') ) .'</p>'; 
    11731084                        return; 
    11741085                } 
    11751086                ?> 
    1176  
    11771087                <p> 
    1178                         <label for="<?php echo $this->get_field_id('navmenu'); ?>"><?php _e('Select Menu:'); ?></label> 
    1179  
    1180                         <select id="<?php echo $this->get_field_id('navmenu'); ?>" name="<?php echo $this->get_field_name('navmenu'); ?>"> 
    1181                                 <?php 
    1182                                 foreach ( $custom_menus as $menu ) { 
    1183                                         if ( $navmenu == $menu->term_id ) 
    1184                                                 $selected_option = 'selected="selected"'; 
    1185                                         else 
    1186                                                 $selected_option = ''; 
    1187                                         ?> 
    1188                                         <option value="<?php echo $menu->term_id; ?>" <?php echo $selected_option; ?>><?php echo $menu->name; ?></option> 
    1189                                         <?php 
    1190                                 } 
    1191                                 ?> 
    1192                         </select> 
     1088                        <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:') ?></label> 
     1089                        <input type="text" class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo $title; ?>" /> 
    11931090                </p> 
    1194  
    11951091                <p> 
    1196                         <label for="<?php echo $this->get_field_id('navtitle'); ?>"><?php _e('Title:'); ?></label> 
    1197                         <input type="text" name="<?php echo $this->get_field_name('navtitle'); ?>" value="<?php echo $navtitle; ?>" class="widefat" id="<?php echo $this->get_field_id('navtitle'); ?>" /> 
    1198                 </p> 
    1199  
    1200                 <?php $checked = strtolower($navdeveloper); ?> 
    1201                 <p> 
    1202                         <label for="<?php echo $this->get_field_id('navdeveloper'); ?>"><?php _e('Advanced Options:'); ?></label><br /> 
    1203                         <span class="checkboxes"> 
    1204                                 <label>Yes</label><input type="radio" id="<?php echo $this->get_field_name('navdeveloper'); ?>" name="<?php echo $this->get_field_name('navdeveloper'); ?>" value="yes" <?php if ($checked=='yes') { echo 'checked="checked"'; } ?> /> 
    1205                                 <label>No</label><input type="radio" id="<?php echo $this->get_field_name('navdeveloper'); ?>" name="<?php echo $this->get_field_name('navdeveloper'); ?>" value="no" <?php if ($checked=='yes') { } else { echo 'checked="checked"'; } ?> /> 
    1206                         </span><!-- /.checkboxes --> 
    1207                 </p> 
    1208  
     1092                        <label for="<?php echo $this->get_field_id('nav_menu'); ?>"><?php _e('Select Menu:'); ?></label> 
     1093                        <select id="<?php echo $this->get_field_id('nav_menu'); ?>" name="<?php echo $this->get_field_name('nav_menu'); ?>"> 
    12091094                <?php 
    1210                 // Advanced settings 
    1211                 if ( $checked == 'yes' ) : 
     1095                        foreach ( $menus as $menu ) { 
     1096                                $selected = $nav_menu == $menu->term_id ? ' selected="selected"' : ''; 
     1097                                echo '<option'. $selected .' value="'. $menu->term_id .'">'. $menu->name .'</option>'; 
     1098                        } 
    12121099                ?> 
    1213                 <p> 
    1214                 <?php $checked = strtolower($navdiv); ?> 
    1215                         <label for="<?php echo $this->get_field_id('navdiv'); ?>"><?php _e('Wrap in container DIV:'); ?></label><br /> 
    1216                         <span class="checkboxes"> 
    1217                                 <label>Yes</label><input type="radio" id="<?php echo $this->get_field_name('navdiv'); ?>" name="<?php echo $this->get_field_name('navdiv'); ?>" value="yes" <?php if ($checked=='yes') { echo 'checked="checked"'; } ?> /> 
    1218                                 <label>No</label><input type="radio" id="<?php echo $this->get_field_name('navdiv'); ?>" name="<?php echo $this->get_field_name('navdiv'); ?>" value="no" <?php if ($checked=='yes') { } else { echo 'checked="checked"'; } ?> /> 
    1219                         </span><!-- /.checkboxes --> 
     1100                        </select> 
    12201101                </p> 
    12211102                <?php 
    1222                 if ( $checked == 'yes' ) { 
    1223                 ?> 
    1224  
    1225                         <p> 
    1226                                 <label for="<?php echo $this->get_field_id('navdivid'); ?>"><?php _e('DIV id:'); ?></label> 
    1227                                 <input type="text" name="<?php echo $this->get_field_name('navdivid'); ?>" value="<?php echo $navdivid; ?>" class="widefat" id="<?php echo $this->get_field_id('navdivid'); ?>" /> 
    1228                         </p> 
    1229                         <p> 
    1230                                 <label for="<?php echo $this->get_field_id('navdivclass'); ?>"><?php _e('DIV class:'); ?></label> 
    1231                                 <input type="text" name="<?php echo $this->get_field_name('navdivclass'); ?>" value="<?php echo $navdivclass; ?>" class="widefat" id="<?php echo $this->get_field_id('navdivclass'); ?>" /> 
    1232                         </p> 
    1233                 <?php 
    1234                 } 
    1235                  
    1236                 $checked = strtolower($navul); 
    1237                 ?> 
    1238  
    1239                 <p> 
    1240                         <label for="<?php echo $this->get_field_id('navul'); ?>"><?php _e('Wrap in container UL:'); ?></label><br /> 
    1241                         <span class="checkboxes"> 
    1242                                 <label>Yes</label><input type="radio" id="<?php echo $this->get_field_name('navul'); ?>" name="<?php echo $this->get_field_name('navul'); ?>" value="yes" <?php if ($checked=='yes') { echo 'checked="checked"'; } ?> /> 
    1243                                 <label>No</label><input type="radio" id="<?php echo $this->get_field_name('navul'); ?>" name="<?php echo $this->get_field_name('navul'); ?>" value="no" <?php if ($checked=='yes') { } else { echo 'checked="checked"'; } ?> /> 
    1244                         </span><!-- /.checkboxes --> 
    1245                 </p> 
    1246  
    1247                 <?php 
    1248                 if ( $checked == 'yes' ) { 
    1249                 ?> 
    1250                         <p> 
    1251                                 <label for="<?php echo $this->get_field_id('navulid'); ?>"><?php _e('UL id:'); ?></label> 
    1252                                 <input type="text" name="<?php echo $this->get_field_name('navulid'); ?>" value="<?php echo $navulid; ?>" class="widefat" id="<?php echo $this->get_field_id('navulid'); ?>" /> 
    1253                         </p> 
    1254                         <p> 
    1255                                 <label for="<?php echo $this->get_field_id('navulclass'); ?>"><?php _e('UL class:'); ?></label> 
    1256                                 <input type="text" name="<?php echo $this->get_field_name('navulclass'); ?>" value="<?php echo $navulclass; ?>" class="widefat" id="<?php echo $this->get_field_id('navulclass'); ?>" /> 
    1257                         </p> 
    1258                 <?php 
    1259                 } 
    1260                 $advanced_option_descriptions = get_option('wp_settings_nav_menu_advanced_options'); 
    1261                 ?> 
    1262                 <p <?php if ($advanced_option_descriptions == 'no') { ?>style="display:none;"<?php } ?>> 
    1263                    <?php $checked = strtolower($navwidgetdescription); ?> 
    1264                         <label for="<?php echo $this->get_field_id('navwidgetdescription'); ?>"><?php _e('Show Top Level Descriptions:'); ?></label><br /> 
    1265                         <span class="checkboxes"> 
    1266                                 <label>Yes</label><input type="radio" id="<?php echo $this->get_field_name('navwidgetdescription'); ?>" name="<?php echo $this->get_field_name('navwidgetdescription'); ?>" value="1" <?php if ($checked=='1') { echo 'checked="checked"'; } ?> /> 
    1267                                 <label>No</label><input type="radio" id="<?php echo $this->get_field_name('navwidgetdescription'); ?>" name="<?php echo $this->get_field_name('navwidgetdescription'); ?>" value="2" <?php if ($checked=='1') { } else { echo 'checked="checked"'; } ?> /> 
    1268                         </span><!-- /.checkboxes --> 
    1269                 </p> 
    1270                 <?php 
    1271                 endif; 
    12721103        } 
    12731104} 
    12741105 
  • wp-includes/nav-menu.php

     
    77 * @since 3.0.0 
    88 */ 
    99 
    10 // Deletes a nav menu 
    11 function wp_delete_nav_menu( $menu_id ) { 
    12         $menu_id = (int) $menu_id; 
    13         if ( !$menu_id  ) 
    14                 return false; 
     10/** 
     11 * Returns a Navigation Menu object 
     12 * 
     13 * @since 3.0.0 
     14 * 
     15 * @param string $menu Menu id 
     16 * @return mixed $menu|false 
     17 */ 
     18function wp_get_nav_menu_object( $menu ) { 
     19        return is_nav_menu( $menu ); 
     20} 
    1521 
    16         $menu_objects = get_objects_in_term( $menu_id, 'nav_menu' ); 
    17         if ( !empty( $menu_objects ) ) { 
    18                 foreach ( $menu_objects as $item ) { 
    19                         wp_delete_post( $item ); 
    20                 } 
     22/** 
     23 * Check if Menu exists. 
     24 * 
     25 * Returns the menu object, or false if the term doesn't exist. 
     26 * 
     27 * @since 3.0.0 
     28 * 
     29 * @param int|string $menu The menu to check 
     30 * @return mixed Menu Object, if exists. 
     31 */ 
     32function is_nav_menu( $menu ) { 
     33        if ( $menu ) { 
     34                $menu = get_term( $menu, 'nav_menu' ); 
     35        } elseif ( !$menu ) { 
     36                $menu = get_term_by( 'slug', $menu, 'nav_menu' ); 
     37        } elseif( !$menu ) { 
     38                $menu = get_term_by( 'name', $menu, 'nav_menu' ); 
     39        } else { 
     40                $menu = false; 
    2141        } 
    22         wp_delete_term( $menu_id, 'nav_menu' ); 
     42                 
     43        return $menu; 
    2344} 
    2445 
    25 // Creates a new nav menu 
     46/** 
     47 * Returns all Navigation Menu objects. 
     48 * 
     49 * @since 3.0.0 
     50 * 
     51 * @return array menu objects 
     52 */ 
     53function wp_get_nav_menus() { 
     54        return get_terms( 'nav_menu', array( 'hide_empty' => false, 'orderby' => 'id' ) ); 
     55} 
     56 
     57/** 
     58 * Creates a navigation menu. 
     59 * 
     60 * Optional args: 
     61 * slug - the url friendly version of the nav menu. 
     62 * 
     63 * @since 3.0.0 
     64 * 
     65 * @param string $menu_name Menu Name 
     66 * @param string $args Optional. 
     67 * @return mixed Menu object|WP_Error 
     68 */ 
    2669function wp_create_nav_menu( $menu_name, $args = array() ) { 
    2770        $menu_exists = get_term_by( 'name', $menu_name, 'nav_menu' ); 
    2871 
     
    3982        if ( is_wp_error($menu) ) 
    4083                return $menu; 
    4184 
    42         return get_term( $menu['term_id'], 'nav_menu'); 
     85        return get_term( $menu['term_id'], 'nav_menu') ; 
    4386} 
    4487 
    45 // Creates a default menu if none exists 
     88/** 
     89 * Deletes a navigation menu. 
     90 * 
     91 * @since 3.0.0 
     92 * 
     93 * @param string $menu name|id|slug 
     94 * @return bool true on success, else false. 
     95 */ 
     96function wp_delete_nav_menu( $menu ) { 
     97        $menu = wp_get_nav_menu_object( $menu ); 
     98        if ( !$menu  ) 
     99                return false; 
     100 
     101        $menu_objects = get_objects_in_term( $menu->term_id, 'nav_menu' ); 
     102        if ( !empty( $menu_objects ) ) { 
     103                foreach ( $menu_objects as $item ) { 
     104                        wp_delete_post( $item ); 
     105                } 
     106        } 
     107        wp_delete_term( $menu_id, 'nav_menu' ); 
     108} 
     109 
     110/** 
     111 * Creates a nav menu named 'Menu 1'. 
     112 * 
     113 * This function is called if the user doesn't have any nav menus. 
     114 * It grabs the first 14 pages, and creates a new default menu. 
     115 * 
     116 * @since 3.0.0 
     117 */ 
    46118function wp_create_default_nav_menu() { 
    47119        $menu = wp_create_nav_menu( __('Menu 1'), array('slug' => 'menu-1') ); 
    48120 
     
    61133        } 
    62134} 
    63135 
    64 // Get nav menu by id 
    65 function wp_get_nav_menu( $menu ) { 
    66         return get_term( (int) $menu, 'nav_menu' ); 
    67 } 
    68  
    69 // Get all nav menus 
    70 function wp_get_nav_menus() { 
    71         return get_terms( 'nav_menu', array( 'hide_empty' => false, 'orderby' => 'id' ) ); 
    72 } 
    73  
    74 // Get the nav menu items 
     136/** 
     137 * Returns the menu items of a navigation menu. 
     138 * 
     139 * @since 3.0.0 
     140 * 
     141 * @param string $menu menu name, id, or slug 
     142 * @param string $args  
     143 * @return mixed $items array of menu items, else false. 
     144 */ 
    75145function wp_get_nav_menu_items( $menu, $args = array() ) { 
    76         $items = get_objects_in_term( (int) $menu, 'nav_menu' ); 
     146        $menu = wp_get_nav_menu_object( $menu ); 
     147         
     148        if ( !$menu ) 
     149                return false; 
     150         
     151        $items = get_objects_in_term( $menu->term_id, 'nav_menu' ); 
    77152 
    78153        if ( ! empty( $items ) ) { 
    79154                $defaults = array( 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item', 'post_status' => 'publish', 'output' => ARRAY_A, 'output_key' => 'menu_order' ); 
    80                 $args = wp_parse_args($args, $defaults); 
     155                $args = wp_parse_args( $args, $defaults ); 
    81156                if ( count( $items ) > 1 )       
    82157                        $args['include'] = implode( ',', $items ); 
    83158                else 
     
    90165                        foreach ( $items as $item ) { 
    91166                                $output[$item->$args['output_key']] = $item; 
    92167                        } 
    93                         unset($items); 
    94                         ksort($output); 
     168                        unset( $items ); 
     169                        ksort( $output ); 
    95170                        return $output; 
    96171                } 
    97172        } 
    98173        return $items; 
    99174} 
    100175 
    101 // wp_setup_nav_menu_item() 
    102 function wp_setup_nav_menu_item($menu_item, $type = 'item', $position = 0) { 
     176/** 
     177 * Returns a menu item with all it's nessecary data populated. 
     178 * 
     179 * @since 3.0.0 
     180 * 
     181 * @param string $menu_item Menu item. 
     182 * @param string $type item|category|page. 
     183 * @param string $position position of the menu item. 
     184 * @return $menu_item 
     185 */ 
     186function wp_setup_nav_menu_item( $menu_item, $type = 'item', $position = 0 ) { 
    103187        global $parent_menu_order; 
    104188 
    105189        if ( 'item' == $type ) { 
    106                 $menu_item->type = get_post_meta($menu_item->ID, 'menu_type', true); 
    107                 $menu_item->object_id = get_post_meta($menu_item->ID, 'object_id', true); 
     190                $menu_item->type = get_post_meta( $menu_item->ID, 'menu_type', true ); 
     191                $menu_item->object_id = get_post_meta( $menu_item->ID, 'object_id', true ); 
    108192                $menu_item->target = ( get_post_meta( $menu_item->ID, 'menu_new_window', true ) ) ? 'target="_blank"' : ''; 
    109193                if ( isset( $parent_menu_order[ $menu_item->post_parent ] ) ) 
    110194                        $menu_item->parent_item = $parent_menu_order[ $menu_item->post_parent ]; 
     
    165249 
    166250        $menu_item->li_class = ''; 
    167251        global $wp_query; 
    168         if ( $menu_item->ID == $wp_query->get_queried_object_id() ) 
    169                 $menu_item->li_class = 'class="current_page_item"'; 
     252         
     253        if ( $menu_item->object_id == $wp_query->get_queried_object_id() ) 
     254                $menu_item->li_class = ' current_page_item'; 
    170255 
    171256        $menu_item->anchor_title = ''; 
    172257/* @todo: update to use tax/post data 
     
    195280 
    196281        return $menu_item; 
    197282} 
    198  
    199283?> 
    200  No newline at end of file 
  • wp-content/themes/twentyten/header.php

     
    11<!DOCTYPE html> 
    22<html <?php language_attributes(); ?>> 
    33<head> 
    4         <title><?php 
    5                 if ( is_single() ) { 
     4    <title><?php 
     5        if ( is_single() ) { 
    66                        single_post_title(); echo ' | '; bloginfo('name'); 
    77                } elseif ( is_home() || is_front_page() ) { 
    88                        bloginfo('name'); echo ' | '; bloginfo('description'); twentyten_the_page_number(); 
     
    1515                } else { 
    1616                        wp_title(''); echo ' | '; bloginfo('name'); twentyten_the_page_number(); 
    1717                } 
    18         ?></title> 
     18    ?></title> 
    1919 
    2020        <meta http-equiv="content-type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" /> 
    2121 
  • wp-admin/includes/nav-menu.php

     
    11<?php 
    22 
    3 /*-----------------------------------------------------------------------------------*/ 
    4 /* Custom Navigation Functions */ 
    5 /* wp_custom_navigation_output() displays the menu in the back/frontend 
    6 /* wp_custom_nav_get_pages() 
    7 /* wp_custom_nav_get_categories() 
    8 /* wp_custom_navigation_default_sub_items() is a recursive sub menu item function 
    9 /*-----------------------------------------------------------------------------------*/ 
     3/** 
     4 * Displays a list of links and thier sub items. 
     5 * 
     6 * @since 3.0.0 
     7 * 
     8 * @param string $counter  
     9 * @param string $context  
     10 */ 
     11function wp_nav_menu_get_custom_links( $counter, $context ) { 
     12        $available_links = new WP_Query(  ); 
     13         
     14        $args = array( 'post_status' => 'any', 'post_type' => 'nav_menu_item', 'meta_value' => 'custom' ); 
     15        $link_objects = new WP_Query( $args ); 
     16         
     17        $items_counter = $counter; 
    1018 
    11 // Outputs All Pages and Sub Items 
    12 function wp_nav_menu_get_pages($counter, $type) { 
     19        if ( !$link_objects->posts ) { 
     20                _e('Not Found'); 
     21                return $items_counter; 
     22        } 
     23         
     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                } 
     57        } 
     58        return $items_counter; 
     59} 
    1360 
     61/** 
     62 * Displays a list of pages and thier sub items. 
     63 * 
     64 * @since 3.0.0 
     65 * 
     66 * @param string $counter  
     67 * @param string $context  
     68 */ 
     69function wp_nav_menu_get_pages( $counter, $context ) { 
    1470        $pages_args = array( 
    1571                    'child_of' => 0, 
    1672                        'sort_order' => 'ASC', 
     
    2682                        'number' => '', 
    2783                        'offset' => 0 ); 
    2884 
    29         //GET all pages 
    30         $pages_array = get_pages($pages_args); 
     85        // Get all pages 
     86        $pages_array = get_pages( $pages_args ); 
    3187 
    3288        $items_counter = $counter; 
    3389        $parentli = $items_counter; 
     
    4096        // Display Loop 
    4197        foreach ( $pages_array as $post ) { 
    4298                if ( $post->post_parent == 0 ) { 
    43                         $post = wp_setup_nav_menu_item($post, 'page', $items_counter); 
    44                         if ( $type == 'menu' ) { 
     99                        $post = wp_setup_nav_menu_item( $post, 'page', $items_counter ); 
     100                        if ( $context == 'menu' ) { 
    45101                                ?> 
    46  
    47102                                <li id="menu-<?php echo $items_counter; ?>" value="<?php echo $items_counter; ?>"> 
    48103                                        <?php 
    49                                                 wp_print_nav_menu_item($post, 'menu', $items_counter); 
     104                                                echo wp_get_nav_menu_item( $post, 'menu', $items_counter ); 
    50105                                                $parentli = $post->ID; 
    51106                                                $items_counter++; 
    52                                                 $items_counter = wp_custom_navigation_default_sub_items($post->ID, $items_counter, $parentli, 'pages', 'menu'); 
     107                                                $items_counter = wp_nav_menu_sub_items( $post->ID, $items_counter, $parentli, 'pages', 'menu' ); 
    53108                                        ?> 
    54109                                </li> 
    55  
    56110                                <?php 
    57                         } elseif ( $type == 'default' ) { 
     111                        } elseif ( $context == 'default' ) { 
    58112                                // Sidebar Menu 
    59113                                ?> 
    60114                                 <li> 
    61115                                        <?php 
    62                                                 wp_print_nav_menu_item($post, 'default'); 
     116                                                echo wp_get_nav_menu_item( $post, 'default' ); 
    63117                                                $parentli = $post->ID; 
    64118                                                $items_counter++; 
    65                                                 $items_counter = wp_nav_menu_sub_items($post->ID, $items_counter, $parentli, 'pages', 'default'); 
     119                                                $items_counter = wp_nav_menu_sub_items( $post->ID, $items_counter, $parentli, 'pages', 'default' ); 
    66120                                         ?> 
    67121                                </li> 
    68  
    69122                                <?php 
    70123                        } 
    71124                } 
    72125        } 
    73  
    74126        return $items_counter; 
    75127} 
    76128 
    77 // Outputs All Categories and Sub Items 
    78 function wp_nav_menu_get_categories($counter, $type) { 
    79  
     129/** 
     130 * Displays a list of categories and thier sub items. 
     131 * 
     132 * @since 3.0.0 
     133 * 
     134 * @param string $counter  
     135 * @param string $context  
     136 */ 
     137function wp_nav_menu_get_categories( $counter, $context ) { 
    80138        $category_args = array( 
    81139                        'type'                     => 'post', 
    82140                        'child_of'                 => 0, 
     
    93151        $items_counter = $counter; 
    94152 
    95153        // Get all categories 
    96         $categories_array = get_categories($category_args); 
     154        $categories_array = get_categories( $category_args ); 
    97155 
    98156        if ( !$categories_array ) { 
    99157                _e('Not Found'); 
     
    103161        // Display Loop 
    104162        foreach ( $categories_array as $cat_item ) { 
    105163                if ( $cat_item->parent == 0 ) { 
    106                         $cat_item = wp_setup_nav_menu_item($cat_item, 'category', $items_counter); 
     164                        $cat_item = wp_setup_nav_menu_item( $cat_item, 'category', $items_counter ); 
    107165                        // Custom Menu 
    108                         if ( $type == 'menu' ) { 
     166                        if ( $context == 'menu' ) { 
    109167                                ?> 
    110  
    111168                                <li id="menu-<?php echo $items_counter; ?>" value="<?php echo $items_counter; ?>"> 
    112169                                        <?php 
    113                                                 wp_print_nav_menu_item($cat_item, 'menu'); 
     170                                                echo wp_get_nav_menu_item($cat_item, 'menu'); 
    114171                                                $parentli = $cat_item->cat_ID; 
    115172                                                $items_counter++; 
    116                                                 $items_counter = wp_nav_menu_sub_items($cat_item->cat_ID, $items_counter, $parentli, 'categories', 'menu'); 
     173                                                $items_counter = wp_nav_menu_sub_items( $cat_item->cat_ID, $items_counter, $parentli, 'categories', 'menu' ); 
    117174                                        ?> 
    118  
    119175                                </li> 
    120  
    121176                                <?php 
    122                         } elseif ( $type == 'default' ) { 
     177                        } elseif ( $context == 'default' ) { 
    123178                                // Sidebar Menu 
    124179                                ?> 
    125180                                <li> 
    126181                                        <?php 
    127                                                 wp_print_nav_menu_item($cat_item, 'default'); 
     182                                                echo wp_get_nav_menu_item( $cat_item, 'default' ); 
    128183                                                $parentli = $cat_item->cat_ID; 
    129184                                                $items_counter++; 
    130                                                 $items_counter = wp_nav_menu_sub_items($cat_item->cat_ID, $items_counter, $parentli, 'categories', 'default'); 
     185                                                $items_counter = wp_nav_menu_sub_items( $cat_item->cat_ID, $items_counter, $parentli, 'categories', 'default' ); 
    131186                                        ?> 
    132  
    133187                                </li> 
    134  
    135188                                <?php 
    136189                        } 
    137190                } 
    138191        } 
    139  
    140192        return $items_counter; 
    141193} 
    142194 
    143 //RECURSIVE Sub Menu Items of default categories and pages 
    144 function wp_nav_menu_sub_items($childof, $items_counter, $parentli, $type, $output_type) { 
    145  
     195/** 
     196 * Recursive function that gets sub menu items. 
     197 * 
     198 * @since 3.0.0 
     199 * 
     200 * @param string $childof  
     201 * @param string $items_counter  
     202 * @param string $parentli  
     203 * @param string $context  
     204 * @param string $output_type  
     205 */ 
     206function wp_nav_menu_sub_items( $childof, $items_counter, $parentli, $context, $output_type ) { 
    146207        $counter = $items_counter; 
    147208 
    148209        // Custom Menu 
     
    159220                'parent' => $childof); 
    160221        } 
    161222 
    162         if ( $type == 'categories' ) { 
     223        if ( $context == 'categories' ) { 
    163224                // Get Sub Category Items 
    164225                $item_type = 'category'; 
    165226                $sub_array = get_categories($sub_args); 
    166         } elseif ($type == 'pages') { 
     227        } elseif ($context == 'pages') { 
    167228                // Get Sub Page Items 
    168229                $item_type = 'page'; 
    169230                $sub_array = get_pages($sub_args); 
     
    172233                $sub_array = array(); 
    173234        } 
    174235 
    175  
    176236        if ( $sub_array ) { 
    177237                ?> 
    178                 <ul id="sub-menu-<?php echo $type ?>"> 
    179  
     238                <ul id="sub-menu-<?php echo $context ?>"> 
    180239                <?php 
    181240                // Display Loop 
    182241                foreach ( $sub_array as $sub_item ) { 
    183                         $sub_item = wp_setup_nav_menu_item($sub_item, $item_type, $counter); 
    184  
     242                        $sub_item = wp_setup_nav_menu_item( $sub_item, $item_type, $counter ); 
    185243                        if ( $output_type == 'menu' ) { 
    186244                                ?> 
    187245                                <li id="menu-<?php echo $counter; ?>" value="<?php echo $counter; ?>"> 
    188246                                        <?php 
    189                                                 wp_print_nav_menu_item($sub_item, 'menu'); 
     247                                                echo wp_get_nav_menu_item( $sub_item, 'menu' ); 
    190248                                                $counter++; 
    191                                                 $counter = wp_nav_menu_sub_items($sub_item->ID, $counter, $sub_item->ID, $type, 'menu'); 
     249                                                $counter = wp_nav_menu_sub_items( $sub_item->ID, $counter, $sub_item->ID, $context, 'menu' ); 
    192250                                        ?> 
    193  
    194251                                </li> 
    195252                                <?php 
    196253                        } elseif ( $output_type == 'default' ) { 
     
    198255                                ?> 
    199256                                <li> 
    200257                                        <?php 
    201                                                 wp_print_nav_menu_item($sub_item, 'default'); 
     258                                                echo wp_get_nav_menu_item( $sub_item, 'default' ); 
    202259                                                //$counter++; 
    203                                                 $counter = wp_nav_menu_sub_items($sub_item->ID, $counter, $sub_item->ID, $type, 'default'); 
     260                                                $counter = wp_nav_menu_sub_items( $sub_item->ID, $counter, $sub_item->ID, $context, 'default' ); 
    204261                                        ?> 
    205262                                </li> 
    206263 
     
    208265                        } 
    209266                } 
    210267                ?> 
    211  
    212268                </ul> 
    213  
    214269        <?php 
    215270        } 
    216  
    217271        return $counter; 
    218272} 
    219 /* 
    220 function wp_nav_menu_setup($override = false) { 
    221         // Custom Navigation Menu Setup 
    222  
    223         // Override for menu descriptions 
    224         update_option('wp_settings_nav_menu_advanced_options', 'yes'); 
    225  
    226         $menus = wp_get_nav_menus(); 
    227         if ( !empty( $menus ) ) { 
    228                 foreach ( $menus as $menu ) { 
    229                         wp_delete_nav_menu( $menu->term_id ); 
    230                 } 
    231         } 
    232  
    233         wp_create_nav_menu( __('Main') ); 
    234 } 
    235 /**/ 
    236273?> 
    237  No newline at end of file 
  • wp-admin/js/nav-menu-default-items.dev.js

     
    1313 */ 
    1414jQuery(document).ready(function($){ 
    1515         
     16        wp_drag_and_drop(); 
     17         
     18        wp_update_post_data(); 
     19         
    1620        // Handle Save Button Clicks 
    1721        $('#save_menu').click(function(){ 
    18                 wp_update_post_data(); 
     22                return wp_update_post_data(); 
    1923        }); 
    2024                 
    2125        // Clear the quick search textbox 
     
    3034         
    3135        // Edit menu item 
    3236        $('#menu-container .item-edit').click(function(){ 
    33                 wp_edit_menu_item( $(this).attr('value') ); 
     37                return wp_edit_menu_item( $(this).attr('value') ); 
    3438        }); 
    3539         
    3640        // Delete menu item 
    3741        $('#menu-container .item-delete').live( 'click', function(){ 
    38                 wp_remove_menu_item( $(this).attr('value') ); 
     42                return wp_remove_menu_item( $(this).attr('value') ); 
    3943        }); 
    4044         
    4145        // Update menu item settings (thickbox) 
     
    5054         
    5155        // Close thickbox 
    5256        $('#cancel-save').click(function(){ 
    53                 tb_remove(); 
     57                return tb_remove(); 
    5458        }); 
    5559         
    5660        // Show All Button 
     
    5862                $(this).offsetParent().find('#add-buttons-actions').attr( 'style','margin-bottom: 10px;' ); 
    5963                $(this).offsetParent().find('.list-wrap').css( 'display','block' ); 
    6064                $(this).siblings('.quick-search').attr( 'value', '' );           
    61                 $(this).offsetParent().find('.list-wrap dt').css( 'display', 'block' ); 
     65                $(this).offsetParent().find('.list-wrap li').css( 'display', 'block' ); 
    6266                $(this).hide(); 
    6367                $(this).siblings('.hide-all').show(); 
    6468        }); 
     
    6872                $(this).offsetParent().find('#add-buttons-actions').attr( 'style','margin-bottom: 0px;' ); 
    6973                $(this).offsetParent().find('.list-wrap').css( 'display','none' ); 
    7074                $(this).siblings('.quick-search').attr( 'value', 'Search' ); 
    71                 $(this).offsetParent().find('.list-wrap dt').css( 'display', 'none' ); 
     75                $(this).offsetParent().find('.list-wrap li').css( 'display', 'none' ); 
    7276                $(this).hide(); 
    7377                $(this).siblings('.show-all').show(); 
    7478        }); 
    7579         
     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-id').val(); 
     87                var item_parent_id = jQuery(this).parent().siblings('.item-parent-id').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 ); 
     91        }); 
     92         
    7693        // Add queued menu items into the menu 
    7794        $('.enqueue a').click(function(){ 
    78                 wp_add_queued_items_to_menu(this); 
     95                return wp_add_queued_items_to_menu(this); 
    7996        }); 
    8097         
    8198        // Create the link, add it to the menu + available links section 
    8299        $('#add-custom-link .add-to-menu a').click(function(){ 
    83100                var link_url = $(this).offsetParent().find('#menu-item-url').val(); 
    84101                var link_name = $(this).offsetParent().find('#menu-item-name').val(); 
    85                 var links = $(this).offsetParent().find('#available-links input:checked'); 
    86102                 
    87                 // If links are checked in the available links section, add them to the menu 
    88                 if ( links ) { 
    89                         for (var i = 0; i < links.length; i++) { 
    90                                 wp_add_item_to_menu( 'Custom', links[i].name, links[i].value, links[i].id.substring( 5, links[i].id.length ), 0, '' ); 
    91                         }; 
    92                          
    93                         // Reset the checkboxes; 
    94                         $(links).attr('checked', false); 
    95                 }; 
     103                wp_add_queued_items_to_menu( this ); 
    96104                                 
    97105                // Don't save the link if it was left with it's default settings 
    98106                if ( 'http://' == link_url || 'Menu Item' == link_name ) 
     
    119127                        wp_add_item_to_menu( 'Custom', params.link_name, params.link_url, params.link_id, 0, '' ); 
    120128                }, 'json'); 
    121129        }); 
    122          
    123         // Add dropzones 
    124     $('#menu li').prepend('<div class="dropzone"></div>'); 
    125  
    126         // Make menu items draggable 
    127         $('#menu li').draggable({ 
    128                     handle: ' > dl', 
    129                     opacity: .8, 
    130                     addClasses: false, 
    131                     helper: 'clone', 
    132                     zIndex: 100 
    133         }); 
    134  
    135         // Make items droppable 
    136         $('#menu dl, #menu .dropzone').droppable({ 
    137                 accept: '#menu li', 
    138                 tolerance: 'pointer', 
    139                  
    140                 drop: function(e, ui) { 
    141                         var li = $(this).parent(); 
    142                         var child = !$(this).hasClass('dropzone'); 
    143                          
    144                         // Add UL to first child 
    145                 if ( child && li.children('ul').length == 0 ) { 
    146                 li.append('<ul id="sub-menu" />'); 
    147                 } 
    148                 // Make it draggable 
    149                 if ( child ) { 
    150                 li.children('ul').append( ui.draggable ); 
    151                 } else { 
    152                 li.before( ui.draggable ); 
    153                 } 
    154  
    155                 li.find('dl,.dropzone').css({ backgroundColor: '', borderColor: '' }); 
    156  
    157                         var draggablevalue = ui.draggable.attr('value'); 
    158                         var droppablevalue = li.attr('value'); 
    159                          
    160                 li.find('#menu-' + draggablevalue).find('#parent' + draggablevalue).val(droppablevalue); 
    161                         $(this).parent().find('dt').removeAttr('style'); 
    162                          
    163                         $(this).parent().find('div:first').removeAttr('style'); 
    164         }, 
    165          
    166                 over: function() { 
    167                  
    168                 if ( 'dropzone ui-droppable' == $(this).attr('class') ) { 
    169                                 // Add child 
    170                         $(this).parent().find('dt:first').css('background', 'none').css('height', '50px'); 
    171                                  
    172                 } else if ($(this).attr('class') == 'ui-droppable') { 
    173                                 // Add above 
    174                         $(this).parent().find('dt:first').css('background', '#d8d8d8'); 
    175                                  
    176                 } else { 
    177                                 // do nothing 
    178                 } 
    179                 var parentid = $(this).parent().attr('id'); 
    180         }, 
    181         out: function() { 
    182                 $(this).parent().find('dt').removeAttr('style'); 
    183                 $(this).parent().find('div:first').removeAttr('style'); 
    184                 $(this).filter('.dropzone').css({ borderColor: '' }); 
    185         }, 
    186         deactivate: function() { 
    187                         // 
    188         } 
    189         }); 
    190130}); 
    191  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_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_edit_menu_item(id){console.log("wp_edit_menu_item");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();console.log(id);console.log(itemTitle);console.log(itemURL);console.log(itemAttrTitle);console.log(itemTarget);console.log(itemDesc);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();console.log(id);console.log(itemTitle);console.log(itemURL);console.log(itemAttrTitle);console.log(itemTarget);console.log(itemDesc);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_update_post_data(){var i=0;jQuery("#menu li").each(function(i){i=i+1;var j=jQuery(this).attr("value");jQuery(this).find("#position"+j).attr("value",i);jQuery(this).attr("id","menu-"+i);jQuery(this).attr("value",i);jQuery(this).find("#dbid"+j).attr("name","dbid"+i);jQuery(this).find("#dbid"+j).attr("id","dbid"+i);jQuery(this).find("#postmenu"+j).attr("name","postmenu"+i);jQuery(this).find("#postmenu"+j).attr("id","postmenu"+i);var p=jQuery(this).find("#parent"+j).parent().parent().parent().attr("value");jQuery(this).find("#parent"+j).attr("name","parent"+i);jQuery(this).find("#parent"+j).attr("id","parent"+i);if(p){}else{p=0}jQuery(this).find("#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("#position"+j).attr("name","position"+i);jQuery(this).find("#position"+j).attr("id","position"+i);jQuery(this).find("#linktype"+j).attr("name","linktype"+i);jQuery(this).find("#linktype"+j).attr("id","linktype"+i);jQuery("#li-count").attr("value",i)})}function wp_add_item_to_menu(additemtype,itemtext,itemurl,itemid,itemparentid,itemdescription){var inputvaluevarname="";var inputvaluevarurl="";var inputitemid="";var inputparentid="";var inputdescription="";var randomnumber=wp_get_unique_menu_id();inputvaluevarname=htmlentities(itemtext.toString());inputvaluevarurl=itemurl.toString();inputitemid=itemid;inputparentid=itemparentid;inputlinktype="custom";inputdescription=htmlentities(itemdescription.toString());jQuery("#menu").append('<li id="menu-'+randomnumber+'" value="'+randomnumber+'"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">'+inputvaluevarname+'</span><span class="item-controls"><span class="item-type">'+additemtype+'</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><a class="hide" href="'+inputvaluevarurl+'">'+inputvaluevarname+'</a><input type="hidden" name="postmenu'+randomnumber+'" id="postmenu'+randomnumber+'" value="'+inputitemid+'" /><input type="hidden" name="parent'+randomnumber+'" id="parent'+randomnumber+'" value="'+inputparentid+'" /><input type="hidden" name="item-title'+randomnumber+'" id="item-title'+randomnumber+'" value="'+inputvaluevarname+'" /><input type="hidden" name="item-url'+randomnumber+'" id="item-url'+randomnumber+'" value="'+inputvaluevarurl+'" /><input type="hidden" name="item-description'+randomnumber+'" id="item-description'+randomnumber+'" value="'+inputdescription+'" /><input type="hidden" name="position'+randomnumber+'" id="position'+randomnumber+'" value="'+randomnumber+'" /><input type="hidden" name="linktype'+randomnumber+'" id="linktype'+randomnumber+'" value="'+inputlinktype+'" /><input type="hidden" name="item-attr-title'+randomnumber+'" id="item-attr-title'+randomnumber+'" value="'+inputvaluevarname+'" /><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();tb_init("a.thickbox, area.thickbox, input.thickbox")}function wp_update_queue(additemtype,itemtext,itemurl,itemid,itemparentid,itemdescription){var inputvaluevarname="";var inputvaluevarurl="";var inputitemid="";var inputparentid="";var inputdescription="";var randomnumber=wp_get_unique_menu_id();if(additemtype==navMenuL10n.page){inputvaluevarname=htmlentities(itemtext.toString());inputvaluevarurl=itemurl.toString();inputitemid=itemid.toString();inputparentid="0";inputlinktype="page";inputdescription=htmlentities(itemdescription.toString())}else{if(additemtype==navMenuL10n.category){inputvaluevarname=htmlentities(itemtext.toString());inputvaluevarurl=itemurl.toString();inputitemid=itemid.toString();inputparentid="0";inputlinktype="category";inputdescription=htmlentities(itemdescription.toString())}}if(jQuery(menu_item_id="#menu-item-"+inputitemid).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">'+inputvaluevarname+'</span><span class="item-controls"><span class="item-type">'+additemtype+'</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><a class="hide" href="'+inputvaluevarurl+'">'+inputvaluevarname+'</a><input type="hidden" name="postmenu'+randomnumber+'" id="postmenu'+randomnumber+'" value="'+inputitemid+'" /><input type="hidden" name="parent'+randomnumber+'" id="parent'+randomnumber+'" value="'+inputparentid+'" /><input type="hidden" name="item-title'+randomnumber+'" id="item-title'+randomnumber+'" value="'+inputvaluevarname+'" /><input type="hidden" name="item-url'+randomnumber+'" id="item-url'+randomnumber+'" value="'+inputvaluevarurl+'" /><input type="hidden" name="item-description'+randomnumber+'" id="item-description'+randomnumber+'" value="'+inputdescription+'" /><input type="hidden" name="position'+randomnumber+'" id="position'+randomnumber+'" value="'+randomnumber+'" /><input type="hidden" name="linktype'+randomnumber+'" id="linktype'+randomnumber+'" value="'+inputlinktype+'" /><input type="hidden" name="item-attr-title'+randomnumber+'" id="item-attr-title'+randomnumber+'" value="'+inputvaluevarname+'" /><input type="hidden" name="item-target'+randomnumber+'" id="item-target'+randomnumber+'" value="0" /></li>')}else{for(var i=0;i<jQuery('#queue li input[name^="postmenu"]').length;i++){if(itemid==jQuery('#queue li input[name^="postmenu"]')[i].value){var menu_queue_id=jQuery('#queue li input[name^="postmenu"]')[i].name.substring(8,jQuery('#queue li input[name^="postmenu"]')[i].name.length)}}jQuery("#queue li#menu-"+menu_queue_id).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").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/>")}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=document.getElementById("menu").getElementsByTagName("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_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 
  • wp-admin/js/nav-menu-dynamic-functions.dev.js

     
    2424} 
    2525 
    2626/** 
    27  * Removes a menu item from current menu 
    28  * 
    29  * @param int o - the id of the menu li to remove. 
    30  */ 
    31 function wp_remove_menu_item( o ) { 
    32         var todelete = document.getElementById('menu-' + o); 
    33          
    34         if ( todelete ) { 
    35                 // Give some feedback to the user 
    36                 jQuery( todelete ).find('dt').each(function(){ 
    37                         jQuery(this).animate( { backgroundColor: '#FF3333' }, { duration: 'normal', complete: function() { jQuery(this).parent().parent().remove() } } ); 
    38                 }); 
    39                  
    40                 wp_update_post_data(); 
    41         } 
    42 }; 
    43  
    44 /** 
    4527 * Populate the thickbox window with the selected menu items 
    4628 * 
    4729 * @param int o - the id of the menu li to edit. 
    4830 */ 
    4931function wp_edit_menu_item( id ) { 
    50         console.log('wp_edit_menu_item'); 
    51          
     32        var itemType = jQuery('#item-type' + id).val(); 
    5233        var itemTitle = jQuery('#item-title' + id).val(); 
    5334        var itemURL = jQuery('#item-url' + id).val(); 
    5435        var itemAttrTitle = jQuery('#item-attr-title' + id).val(); 
    5536        var itemTarget = jQuery('#item-target' + id).val(); 
    5637        var itemDesc = jQuery('#item-description' + id).val(); 
    5738         
    58         console.log(id); 
    59         console.log(itemTitle); 
    60         console.log(itemURL); 
    61         console.log(itemAttrTitle); 
    62         console.log(itemTarget); 
    63         console.log(itemDesc); 
     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' ); 
    6442         
    6543        // Populate the fields for thickbox 
    6644        jQuery( '#edit-item-id' ).val(id); 
     
    8361        var itemTarget = jQuery('#edit-item-target').val(); 
    8462        var itemDesc = jQuery('#edit-item-description').val(); 
    8563         
    86         console.log(id); 
    87         console.log(itemTitle); 
    88         console.log(itemURL); 
    89         console.log(itemAttrTitle); 
    90         console.log(itemTarget); 
    91         console.log(itemDesc); 
    92          
    9364        // update menu item settings     
    9465        jQuery('#menu-' + id).find('.item-title:first').html(itemTitle); 
    9566        jQuery('#item-title' + id).val(itemTitle); 
     
    10071} 
    10172 
    10273/** 
     74 * Removes a menu item from current menu 
     75 * 
     76 * @param int o - the id of the menu li to remove. 
     77 */ 
     78function wp_remove_menu_item( o ) { 
     79        var todelete = document.getElementById('menu-' + o); 
     80         
     81        if ( todelete ) { 
     82                // Give some feedback to the user 
     83                jQuery( todelete ).find('dt').each(function(){ 
     84                        jQuery(this).animate( { backgroundColor: '#FF3333' }, { duration: 'normal', complete: function() { jQuery(this).parent().parent().remove() } } ); 
     85                }); 
     86                 
     87                wp_update_post_data(); 
     88        } 
     89}; 
     90 
     91/** 
    10392 * Prepares menu items for POST 
    10493 */ 
    10594function wp_update_post_data() { 
    10695        var i = 0; 
    10796         
    108          jQuery('#menu li').each(function(i) { 
     97         jQuery('.menu li').each(function(i) { 
    10998                i = i + 1; 
    11099        var j = jQuery(this).attr('value'); 
    111100 
    112         jQuery(this).find('#position' + j).attr('value', i); 
     101        jQuery(this).find('#item-position' + j).attr('value', i); 
    113102        jQuery(this).attr('id','menu-' + i); 
    114103        jQuery(this).attr('value', i); 
    115104 
    116         jQuery(this).find('#dbid' + j).attr('name','dbid' + i); 
    117         jQuery(this).find('#dbid' + j).attr('id','dbid' + i); 
     105        jQuery(this).find('#item-dbid' + j).attr('name','item-dbid' + i); 
     106        jQuery(this).find('#item-dbid' + j).attr('id','item-dbid' + i); 
    118107 
    119                 jQuery(this).find('#postmenu' + j).attr('name','postmenu' + i); 
    120         jQuery(this).find('#postmenu' + j).attr('id','postmenu' + i); 
     108                jQuery(this).find('#item-postmenu' + j).attr('name','item-postmenu' + i); 
     109        jQuery(this).find('#item-postmenu' + j).attr('id','item-postmenu' + i); 
    121110 
    122         var p = jQuery(this).find('#parent' + j).parent().parent().parent().attr('value'); 
     111        var p = jQuery(this).find('#item-parent' + j).parent().parent().parent().attr('value'); 
    123112 
    124                 jQuery(this).find('#parent' + j).attr('name','parent' + i); 
    125                 jQuery(this).find('#parent' + j).attr('id','parent' + i); 
     113                jQuery(this).find('#item-parent' + j).attr('name','item-parent' + i); 
     114                jQuery(this).find('#item-parent' + j).attr('id','item-parent' + i); 
    126115                 
    127116                if (p) { 
    128117                        // Do nothing 
     
    131120                        p = 0; 
    132121                } 
    133122 
    134                 jQuery(this).find('#parent' + j).attr('value', p); 
     123                jQuery(this).find('#item-parent' + j).attr('value', p); 
    135124 
    136125                jQuery(this).find('#item-title' + j).attr('name','item-title' + i); 
    137126                jQuery(this).find('#item-title' + j).attr('id','item-title' + i); 
     
    148137                jQuery(this).find('#item-target' + j).attr('name','item-target' + i); 
    149138                jQuery(this).find('#item-target' + j).attr('id','item-target' + i); 
    150139 
    151                 jQuery(this).find('#position' + j).attr('name', 'position' + i); 
    152                 jQuery(this).find('#position' + j).attr('id', 'position' + i); 
     140                jQuery(this).find('#item-position' + j).attr('name', 'item-position' + i); 
     141                jQuery(this).find('#item-position' + j).attr('id', 'item-position' + i); 
    153142 
    154                 jQuery(this).find('#linktype' + j).attr('name', 'linktype' + i); 
    155                 jQuery(this).find('#linktype' + j).attr('id', 'linktype' + i); 
     143                jQuery(this).find('#item-type' + j).attr('name', 'item-type' + i); 
     144                jQuery(this).find('#item-type' + j).attr('id', 'item-type' + i); 
    156145 
    157146                jQuery('#li-count').attr( 'value', i ); 
    158147   }); 
     
    169158 * @param int itemparentid - default 0. 
    170159 * @param string itemdescription - the description of the menu item. 
    171160 */ 
    172 function wp_add_item_to_menu( additemtype, itemtext, itemurl, itemid, itemparentid, itemdescription ) { 
    173         var inputvaluevarname = ''; 
    174         var inputvaluevarurl = ''; 
    175         var inputitemid = ''; 
    176         var inputparentid= ''; 
    177         var inputdescription = ''; 
     161function wp_add_item_to_menu( item_type, item_title, item_url, item_id, item_parent_id, item_description ) { 
    178162        var randomnumber = wp_get_unique_menu_id(); 
    179  
    180         inputvaluevarname = htmlentities(itemtext.toString()); 
    181         inputvaluevarurl = itemurl.toString(); 
    182         inputitemid = itemid; 
    183         inputparentid = itemparentid; 
    184         inputlinktype = 'custom'; 
    185         inputdescription = htmlentities(itemdescription.toString()); 
    186163         
    187164        // Adds the item in the queue 
    188         jQuery('#menu').append('<li id="menu-' + randomnumber + '" value="' + randomnumber + '"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">' + inputvaluevarname + '</span><span class="item-controls"><span class="item-type">' + additemtype + '</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><a class="hide" href="' + inputvaluevarurl + '">' + inputvaluevarname + '</a><input type="hidden" name="postmenu' + randomnumber + '" id="postmenu' + randomnumber + '" value="' + inputitemid + '" /><input type="hidden" name="parent' + randomnumber + '" id="parent' + randomnumber + '" value="' + inputparentid + '" /><input type="hidden" name="item-title' + randomnumber + '" id="item-title' + randomnumber + '" value="' + inputvaluevarname + '" /><input type="hidden" name="item-url' + randomnumber + '" id="item-url' + randomnumber + '" value="' + inputvaluevarurl + '" /><input type="hidden" name="item-description' + randomnumber + '" id="item-description' + randomnumber + '" value="' + inputdescription + '" /><input type="hidden" name="position' + randomnumber + '" id="position' + randomnumber + '" value="' + randomnumber + '" /><input type="hidden" name="linktype' + randomnumber + '" id="linktype' + randomnumber + '" value="' + inputlinktype + '" /><input type="hidden" name="item-attr-title' + randomnumber + '" id="item-attr-title' + randomnumber + '" value="' + inputvaluevarname + '" /><input type="hidden" name="item-target' + randomnumber + '" id="item-target' + randomnumber + '" value="0" /></li>'); 
     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>'); 
    189166         
    190167        // Give some feedback to the user 
    191         jQuery( '#menu #menu-' + randomnumber + ' dt:first' ).animate( { backgroundColor: '#FFFF33' }, { duration: 'normal', complete: function() { jQuery(this).css( 'backgroundColor', '' ); }}); 
     168        jQuery( '.menu #menu-' + randomnumber + ' dt:first' ).animate( { backgroundColor: '#FFFF33' }, { duration: 'normal', complete: function() { jQuery(this).css( 'backgroundColor', '' ); }}); 
    192169         
    193170        // Enable drag-n-drop 
    194171        wp_drag_and_drop(); 
    195172         
     173        wp_update_post_data(); 
     174         
    196175        // Reload thickbox 
    197176        tb_init('a.thickbox, area.thickbox, input.thickbox'); 
    198177}; 
     
    200179/* 
    201180 * Queues items in perperation for appendToList 
    202181 * 
    203  * @param string id - The menu item's id 
    204  * @param string additemtype - Page, Category, or Custom. 
    205  * @param string itemtext - menu text. 
    206  * @param string itemurl - url of the menu. 
    207  * @param int itemid - menu id. 
    208  * @param int itemparentid - default 0. 
    209  * @param string itemdescription - the description of the menu item. 
     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. 
    210188*/ 
    211 function wp_update_queue( additemtype, itemtext, itemurl, itemid, itemparentid, itemdescription ) { 
    212         var inputvaluevarname = ''; 
    213         var inputvaluevarurl = ''; 
    214         var inputitemid = ''; 
    215         var inputparentid= ''; 
    216         var inputdescription = ''; 
     189function wp_update_queue( e, item_type, item_title, item_url, item_id, item_parent_id, item_description ) { 
    217190        var randomnumber = wp_get_unique_menu_id(); 
    218  
    219         if ( additemtype == navMenuL10n.page ) { 
    220                 inputvaluevarname = htmlentities(itemtext.toString()); 
    221                 inputvaluevarurl = itemurl.toString(); 
    222                 inputitemid = itemid.toString(); 
    223                 inputparentid = '0'; 
    224                 inputlinktype = 'page'; 
    225                 inputdescription = htmlentities(itemdescription.toString()); 
    226  
    227         } else if ( additemtype == navMenuL10n.category ) { 
    228                 inputvaluevarname = htmlentities(itemtext.toString()); 
    229                 inputvaluevarurl = itemurl.toString(); 
    230                 inputitemid = itemid.toString(); 
    231                 inputparentid = '0'; 
    232                 inputlinktype = 'category'; 
    233                 inputdescription = htmlentities(itemdescription.toString()); 
    234         } 
    235                          
    236         // Adds or removes the item from the queue 
    237         if ( jQuery(menu_item_id = '#menu-item-' + inputitemid).attr('checked') ) { 
    238                  
     191        var menu_item_id = jQuery(e).attr('id'); 
     192         
     193        if ( jQuery(e).attr('checked') ) { 
    239194                // Add menu item to the queue 
    240                 jQuery('#queue').append('<li id="menu-' + randomnumber + '" value="' + randomnumber + '"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">' + inputvaluevarname + '</span><span class="item-controls"><span class="item-type">' + additemtype + '</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><a class="hide" href="' + inputvaluevarurl + '">' + inputvaluevarname + '</a><input type="hidden" name="postmenu' + randomnumber + '" id="postmenu' + randomnumber + '" value="' + inputitemid + '" /><input type="hidden" name="parent' + randomnumber + '" id="parent' + randomnumber + '" value="' + inputparentid + '" /><input type="hidden" name="item-title' + randomnumber + '" id="item-title' + randomnumber + '" value="' + inputvaluevarname + '" /><input type="hidden" name="item-url' + randomnumber + '" id="item-url' + randomnumber + '" value="' + inputvaluevarurl + '" /><input type="hidden" name="item-description' + randomnumber + '" id="item-description' + randomnumber + '" value="' + inputdescription + '" /><input type="hidden" name="position' + randomnumber + '" id="position' + randomnumber + '" value="' + randomnumber + '" /><input type="hidden" name="linktype' + randomnumber + '" id="linktype' + randomnumber + '" value="' + inputlinktype + '" /><input type="hidden" name="item-attr-title' + randomnumber + '" id="item-attr-title' + randomnumber + '" value="' + inputvaluevarname + '" /><input type="hidden" name="item-target' + randomnumber + '" id="item-target' + randomnumber + '" value="0" /></li>'); 
    241         } else { 
     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>'); 
    242196                 
    243                 // Get the item in the queue 
    244                 for ( var i = 0; i < jQuery('#queue li input[name^="postmenu"]').length; i++ ) { 
    245                         if ( itemid == jQuery('#queue li input[name^="postmenu"]')[i].value ) { 
    246                                 var menu_queue_id = jQuery('#queue li input[name^="postmenu"]')[i].name.substring( 8, jQuery('#queue li input[name^="postmenu"]')[i].name.length ); 
    247                         }; 
     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() 
    248201                }; 
    249                  
    250                 // Removes the item from the queue 
    251                 jQuery('#queue li#menu-' + menu_queue_id).remove(); 
    252202        }; 
    253203}; 
    254204 
     
    265215        jQuery('#queue').empty(); 
    266216                 
    267217        // Appends HTML to the menu 
    268         jQuery('#menu').append( items ); 
     218        jQuery('.menu').append( items ); 
    269219 
    270220        // Give some feedback to the user 
    271221        jQuery(items).each(function(){ 
     
    288238 * Allow the items in the Menu to be dragged and dropped. 
    289239 */ 
    290240function wp_drag_and_drop() { 
     241        // Make sure all li's have dropzones 
     242        jQuery('.menu li').each(function(){ 
     243                if ( !jQuery(this).children('.dropzone').attr('class') ) { 
     244                        jQuery(this).prepend('<div class="dropzone"></div>'); 
     245                }; 
     246        }); 
     247 
    291248        // make menu item draggable 
    292         jQuery('#menu li').draggable({ 
     249        jQuery('.menu li').draggable({ 
    293250                handle: ' > dl', 
    294251                opacity: .8, 
    295252                addClasses: false, 
    296253                helper: 'clone', 
    297                 zIndex: 100 
     254                zIndex: 100, 
    298255        }); 
    299256 
    300257        // make menu item droppable 
    301         jQuery('#menu li dl, #menu li .dropzone').droppable({ 
    302                 accept: '#menu li', 
     258        jQuery('.menu li dl, .menu li .dropzone').droppable({ 
     259                accept: '.menu li', 
    303260                tolerance: 'pointer', 
    304261                drop: function(e, ui) { 
    305262                        var li = jQuery(this).parent(); 
     
    307264                         
    308265                        // Append UL to first child 
    309266                        if ( child && li.children('ul').length == 0 ) { 
    310                                 li.append( '<ul/>' ); 
     267                                li.append( '<ul class="sub-menu" />' ); 
    311268                        } 
    312269                        // Make it draggable 
    313270                        if ( child ) { 
     
    322279                        var droppablevalue = li.attr('value'); 
    323280                         
    324281                        li.find('#menu-' + draggablevalue).find('#parent' + draggablevalue).val(droppablevalue); 
    325                         jQuery(this).parent().find("dt").removeAttr('style'); 
    326                         jQuery(this).parent().find("div:first").removeAttr('style'); 
     282                        jQuery(this).parent().find('dt').removeAttr('style'); 
     283                        jQuery(this).parent().find('div:first').removeAttr('style'); 
    327284 
    328285                }, 
    329286                over: function() { 
    330287                        // Add child 
    331288                        if ( jQuery(this).attr('class') == 'dropzone ui-droppable' ) { 
    332                                 jQuery(this).parent().find("div:first").css('background', 'none').css('height', '50px'); 
     289                                jQuery(this).parent().find('div:first').css('background', 'none').css('height', '50px'); 
    333290                        } 
    334291                        // Add above 
    335292                        else if ( jQuery(this).attr('class') == 'ui-droppable' ) { 
    336                                 jQuery(this).parent().find("dt:first").css('background', '#d8d8d8'); 
     293                                jQuery(this).parent().find('dt:first').css('background', '#d8d8d8'); 
    337294                        } else { 
    338295                                        // do nothing 
    339296                        } 
     
    341298 
    342299                }, 
    343300                out: function() { 
    344                         jQuery(this).parent().find("dt").removeAttr('style'); 
    345                         jQuery(this).parent().find("div:first").removeAttr('style'); 
     301                        jQuery(this).parent().find('dt').removeAttr('style'); 
     302                        jQuery(this).parent().find('div:first').removeAttr('style'); 
    346303                        jQuery(this).filter('.dropzone').css({ borderColor: '' }); 
    347304                } 
    348305                } 
     
    353310 * Gets a unique number based on how many items are in the menu 
    354311 */ 
    355312function wp_get_unique_menu_id() { 
    356         var count = document.getElementById('menu').getElementsByTagName('li').length + 1; 
     313        var count = jQuery('.menu li').length + 1; 
    357314        var randomnumber = count; 
    358315        var validatetest = 0; 
    359316 
  • wp-admin/js/nav-menu-default-items.js

     
    1 jQuery(document).ready(function($){$("#save_menu").click(function(){wp_update_post_data()});$(".quick-search").click(function(){$(this).attr("value","")});$(".quick-search-submit").click(function(){$(this).siblings(".quick-search").search()});$("#menu-container .item-edit").click(function(){wp_edit_menu_item($(this).attr("value"))});$("#menu-container .item-delete").live("click",function(){wp_remove_menu_item($(this).attr("value"))});$("#update-menu-item").click(function(){wp_update_menu_item();tb_remove();var id=$("#edit-item-id").val();$("#menu-"+id+" dt:first").animate({backgroundColor:"#FFFF33"},{duration:"normal",complete:function(){jQuery(this).css("backgroundColor","")}})});$("#cancel-save").click(function(){tb_remove()});$(".show-all").click(function(){$(this).offsetParent().find("#add-buttons-actions").attr("style","margin-bottom: 10px;");$(this).offsetParent().find(".list-wrap").css("display","block");$(this).siblings(".quick-search").attr("value","");$(this).offsetParent().find(".list-wrap dt").css("display","block");$(this).hide();$(this).siblings(".hide-all").show()});$(".hide-all").click(function(){$(this).offsetParent().find("#add-buttons-actions").attr("style","margin-bottom: 0px;");$(this).offsetParent().find(".list-wrap").css("display","none");$(this).siblings(".quick-search").attr("value","Search");$(this).offsetParent().find(".list-wrap dt").css("display","none");$(this).hide();$(this).siblings(".show-all").show()});$(".enqueue a").click(function(){wp_add_queued_items_to_menu(this)});$("#add-custom-link .add-to-menu a").click(function(){var link_url=$(this).offsetParent().find("#menu-item-url").val();var link_name=$(this).offsetParent().find("#menu-item-name").val();var links=$(this).offsetParent().find("#available-links input:checked");if(links){for(var i=0;i<links.length;i++){wp_add_item_to_menu("Custom",links[i].name,links[i].value,links[i].id.substring(5,links[i].id.length),0,"")}$(links).attr("checked",false)}if("http://"==link_url||"Menu Item"==link_name){return}params={action:"add-menu-link",link_url:link_url,link_name:link_name,};$.post(ajaxurl,params,function(response){if(null==response||"-1"==response){return false}params.link_id=response;wp_add_item_to_menu("Custom",params.link_name,params.link_url,params.link_id,0,"")},"json")});$("#menu li").prepend('<div class="dropzone"></div>');$("#menu li").draggable({handle:" > dl",opacity:0.8,addClasses:false,helper:"clone",zIndex:100});$("#menu dl, #menu .dropzone").droppable({accept:"#menu li",tolerance:"pointer",drop:function(e,ui){var li=$(this).parent();var child=!$(this).hasClass("dropzone");if(child&&li.children("ul").length==0){li.append('<ul id="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);$(this).parent().find("dt").removeAttr("style");$(this).parent().find("div:first").removeAttr("style")},over:function(){if("dropzone ui-droppable"==$(this).attr("class")){$(this).parent().find("dt:first").css("background","none").css("height","50px")}else{if($(this).attr("class")=="ui-droppable"){$(this).parent().find("dt:first").css("background","#d8d8d8")}else{}}var parentid=$(this).parent().attr("id")},out:function(){$(this).parent().find("dt").removeAttr("style");$(this).parent().find("div:first").removeAttr("style");$(this).filter(".dropzone").css({borderColor:""})},deactivate:function(){}})}); 
    2  No newline at end of file 
     1jQuery(document).ready(function($){wp_drag_and_drop();wp_update_post_data();$("#save_menu").click(function(){return wp_update_post_data()});$(".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(){return wp_remove_menu_item($(this).attr("value"))});$("#update-menu-item").click(function(){wp_update_menu_item();tb_remove();var id=$("#edit-item-id").val();$("#menu-"+id+" dt:first").animate({backgroundColor:"#FFFF33"},{duration:"normal",complete:function(){jQuery(this).css("backgroundColor","")}})});$("#cancel-save").click(function(){return tb_remove()});$(".show-all").click(function(){$(this).offsetParent().find("#add-buttons-actions").attr("style","margin-bottom: 10px;");$(this).offsetParent().find(".list-wrap").css("display","block");$(this).siblings(".quick-search").attr("value","");$(this).offsetParent().find(".list-wrap li").css("display","block");$(this).hide();$(this).siblings(".hide-all").show()});$(".hide-all").click(function(){$(this).offsetParent().find("#add-buttons-actions").attr("style","margin-bottom: 0px;");$(this).offsetParent().find(".list-wrap").css("display","none");$(this).siblings(".quick-search").attr("value","Search");$(this).offsetParent().find(".list-wrap li").css("display","none");$(this).hide();$(this).siblings(".show-all").show()});$(".list input").click(function(){var item_type=jQuery(this).parent().siblings(".item-type").val();var item_title=jQuery(this).parent().siblings(".item-title").val();var item_url=jQuery(this).parent().siblings(".item-url").val();var item_id=jQuery(this).parent().siblings(".item-id").val();var item_parent_id=jQuery(this).parent().siblings(".item-parent-id").val();var item_description=jQuery(this).parent().siblings(".item-description").val();return wp_update_queue($(this),item_type,item_title,item_url,item_id,item_parent_id,item_description)});$(".enqueue a").click(function(){return wp_add_queued_items_to_menu(this)});$("#add-custom-link .add-to-menu a").click(function(){var link_url=$(this).offsetParent().find("#menu-item-url").val();var link_name=$(this).offsetParent().find("#menu-item-name").val();wp_add_queued_items_to_menu(this);if("http://"==link_url||"Menu Item"==link_name){return}params={action:"add-menu-link",link_url:link_url,link_name:link_name,};$.post(ajaxurl,params,function(response){if(null==response||"-1"==response){return false}params.link_id=response;wp_add_item_to_menu("Custom",params.link_name,params.link_url,params.link_id,0,"")},"json")})}); 
     2 No newline at end of file 
  • wp-admin/nav-menus.php

     
    4343$updated = false; 
    4444$advanced_option_descriptions = 'no'; 
    4545 
    46 // Get all menu link items 
    47 $available_links = new WP_Query( array( 'post_status' => 'any', 'post_type' => 'nav_menu_item', 'meta_key' => 'menu_type', 'meta_value' => 'custom' ) ); 
    48  
    4946// Check which menu is selected and if menu is in edit already 
    5047if ( isset( $_GET['edit-menu'] ) ) { 
    5148        $menu_selected_id = (int) $_GET['edit-menu']; 
     
    127124         
    128125        // Loop through all POST variables 
    129126        for ( $k = 1; $k <= $post_counter; $k++ ) { 
    130                 $db_id = isset( $_POST['dbid'.$k] )? $_POST['dbid'.$k] : 0; 
    131                 $object_id = isset( $_POST['postmenu'.$k] )? $_POST['postmenu'.$k] : 0; 
    132                 $parent_id = isset( $_POST['parent'.$k] )? $_POST['parent'.$k] : 0; 
     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; 
    133130                $custom_title = isset( $_POST['item-title'.$k] )?  $_POST['item-title'.$k] : ''; 
    134131                $custom_linkurl = ( isset( $_POST['item-url'.$k] ) && 'custom' == $_POST['linktype'.$k] ) ? $_POST['item-url'.$k] : ''; 
    135132                $custom_description = isset( $_POST['item-description'.$k] )? $_POST['item-description'.$k] : ''; 
     133                 
    136134                // doesn't seem to be used by UI 
    137                 $icon = isset( $_POST['icon'.$k] )? $_POST['icon'.$k] : 0; 
    138                 $position = isset( $_POST['position'.$k] )? $_POST['position'.$k] : 0; 
    139                 $linktype = isset( $_POST['linktype'.$k] )? $_POST['linktype'.$k] : 'custom'; 
     135                $position = isset( $_POST['item-position'.$k] )? $_POST['item-position'.$k] : 0; 
     136                $linktype = isset( $_POST['item-type'.$k] )? $_POST['item-type'.$k] : 'custom'; 
    140137                $custom_anchor_title  = isset( $_POST['item-attr-title'.$k] )? $_POST['item-attr-title'.$k] : $custom_title; 
    141138                $new_window = isset( $_POST['item-target'.$k] )? $_POST['item-target'.$k] : 0; 
    142139 
     
    209206                                                        <div class="inside"> 
    210207                                                                <input type="hidden" name="li-count" id="li-count" value="0" /> 
    211208                                                                <input type="hidden" name="menu-id-in-edit" id="menu-id-in-edit" value="<?php echo esc_attr( $menu_selected_id ); ?>" /> 
    212  
    213                                                                 <ul id="menu"> 
    214209                                                                <?php 
    215                                                                 if ( $menu_selected_id > 0 ) { 
    216                                                                         wp_print_nav_menu( array( 'type' => 'backend', 'name' => $menu_title, 'id' => $menu_selected_id ) ); 
    217                                                                 } 
     210                                                                if ( $menu_selected_id > 0 ) 
     211                                                                        echo wp_get_nav_menu( array( 'type' => 'backend', 'menu' => $menu_selected_id, 'ul_class' => 'menu' ) ); 
    218212                                                                ?> 
    219                                                                 </ul><!-- /#menu--> 
    220213                                                                 
    221214                                                                <div id="queue" class="hide"> 
    222215                                                                </div><!--/#queue--> 
     
    265258                                                                </label> 
    266259                                                        </p> 
    267260                                                         
    268                                         <?php if ( $available_links->posts ) : ?> 
    269261                                                        <p class="button-controls"> 
    270262                                                                <a class="show-all button"><?php _e('View All'); ?></a> 
    271263                                                                <a class="hide-all button"><?php _e('Hide All'); ?></a> 
     
    273265                                                        <div id="available-links" class="list-wrap"> 
    274266                                                                <div class="list-container"> 
    275267                                                                        <ul class="list"> 
    276                                                                         <?php 
    277                                                                         foreach ( $available_links->posts as $link ) : 
    278                                                                         $url = get_post_meta( $link->ID, 'menu_link' ); 
    279                                                                         ?> 
    280                                                                                 <li> 
    281                                                                                         <dl> 
    282                                                                                                 <dt> 
    283                                                                                                         <label class="item-title"><input type="checkbox" id="link-<?php echo esc_attr($link->ID); ?>" name="<?php echo esc_attr($link->post_title); ?>" value="<?php echo esc_attr($url[0]); ?>" /><?php echo esc_html($link->post_title); ?></label> 
    284                                                                                                 </dt> 
    285                                                                                         </dl> 
    286                                                                                 </li> 
    287                                                                         <?php 
    288                                                                         endforeach; 
    289                                                                         ?> 
     268                                                                        <?php $items_counter = wp_nav_menu_get_custom_links( 0, 'default' ); ?> 
    290269                                                                        </ul> 
    291270                                                                </div><!-- /.list-container--> 
    292271                                                        </div><!-- /#available-links--> 
    293                                         <?php endif; ?> 
    294272                                                        <p class="add-to-menu"> 
    295273                                                                <a class="button"><?php _e('Add to Menu'); ?></a> 
    296274                                                        </p> 
     
    325303                                                                         
    326304                                                                        jQuery('#add-pages .quick-search').result(function(event, data, formatted) { 
    327305                                                                                jQuery('#add-pages .list-wrap').css('display','block'); 
    328                                                                                 jQuery("#add-pages .list-wrap dt:contains('" + data + "')").css('display','block'); 
     306                                                                                jQuery("#add-pages .list-wrap li:contains('" + data + "')").css('display','block'); 
    329307                                                                                jQuery('#add-pages .show-all').hide(); 
    330308                                                                                jQuery('#add-pages .hide-all').show(); 
    331309                                                                        }); 
     
    344322                                                        <div id="existing-pages" class="list-wrap"> 
    345323                                                                <div class="list-container"> 
    346324                                                                        <ul class="list"> 
    347                                                                         <?php $items_counter = wp_nav_menu_get_pages( 0, 'default' ); ?> 
     325                                                                        <?php $items_counter = wp_nav_menu_get_pages( $items_counter, 'default' ); ?> 
    348326                                                                        </ul> 
    349327                                                                </div><!-- /.list-container--> 
    350328                                                        </div><!-- /#existing-pages--> 
     
    387365                                                                        jQuery('#add-categories .quick-search').autocomplete(categories); 
    388366                                                                        jQuery('#add-categories .quick-search').result(function(event, data, formatted) { 
    389367                                                                                jQuery('#add-categories .list-wrap').css('display','block'); 
    390                                                                                 jQuery("#add-categories .list-wrap dt:contains('" + data + "')").css('display','block'); 
     368                                                                                jQuery("#add-categories .list-wrap li:contains('" + data + "')").css('display','block'); 
    391369                                                                                jQuery('#add-categories .show-all').hide(); 
    392370                                                                                jQuery('#add-categories .hide-all').show(); 
    393371                                                                        }); 
  • 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{margin:0;}.list dt{display:none;margin:0;overflow:hidden;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{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 
  • wp-admin/css/nav-menu.dev.css

     
    2222.button-controls { float: left; } 
    2323.add-to-menu { float: right; } 
    2424 
    25 /* CSS for switching the columns *//* 
     25/* CSS for switching the main columns *//* 
    2626#menu-settings-column { clear: none; float: left; } 
    2727#menu-management #post-body { float: right; margin-left: -340px; margin-right: 0px; } 
    2828#menu-management #post-body-content { margin-left: 300px; margin-right: 0px; } 
     
    4848.postbox p.submit { margin-bottom: 0; } 
    4949 
    5050/* Listings */ 
    51 .list li { margin: 0; } 
    52 .list dt { display: none; margin: 0; overflow: hidden; margin-bottom: 5px; } 
     51.list li { display: none; margin: 0; margin-bottom: 5px; } 
    5352 
    5453.list li .item-title { cursor: pointer; display: block; } 
    5554.list li .item-title input { margin-right: 3px; margin-top: -3px; } 
     
    6665/* Menu */ 
    6766#menu-container .inside { padding-bottom: 10px; } 
    6867 
    69 #menu ul { width: 100%; } 
    70 #menu li { margin: 0; } 
    71 #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; } 
    72 #menu li dl dt:hover { cursor: move; } 
     68.menu ul { width: 100%; } 
     69.menu li { margin: 0; } 
     70.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; } 
     71.menu li dl dt:hover { cursor: move; } 
    7372 
    74 #menu li .item-title { background: url(../images/ico-arrow.png) no-repeat 4px 5px; background-position: center left; padding-left: 15px; } 
    75 #menu li ul li { margin-left: 20px; opacity: .7;} 
    76 #menu li ul li ul li { opacity: .9;} 
    77 #menu li ul li ul li ul li { opacity: .9;} 
    78 #menu li ul li ul li ul li ul li { opacity: .95; } 
     73.menu li .item-title { background: url(../images/ico-arrow.png) no-repeat 4px 5px; background-position: center left; padding-left: 15px; } 
     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;} 
     77.menu li ul li ul li ul li ul li { opacity: .95; } 
    7978 
    8079/* Drag and Drop */ 
    8180.dropzone { height: 7px; margin: 3px 0 3px 0; }