Make WordPress Core


Ignore:
Timestamp:
04/27/2010 01:05:58 AM (16 years ago)
Author:
ryan
Message:

New menu UI. Props filosofo. see #12713

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/nav-menus.php

    r14139 r14248  
    1111
    1212/** Load WordPress Administration Bootstrap */
    13 require_once( './admin.php' );
     13require_once( 'admin.php' );
    1414
    1515// Load all the nav menu interface functions
    … …  
    3838wp_enqueue_script( 'postbox' );
    3939
    40 // Thickbox
    41 add_thickbox();
    42 
    4340// Container for any messages displayed to the user
    4441$messages_div = '';
    … …  
    5451
    5552switch ( $action ) {
     53        case 'add-menu-item':
     54                if ( current_user_can( 'switch_themes' ) ) {
     55                        check_admin_referer( 'add-menu_item', 'menu-settings-column-nonce' );
     56                        if ( isset( $_REQUEST['menu-item'] ) ) {
     57                                wp_save_nav_menu_item( $nav_menu_selected_id, $_REQUEST['menu-item'] );
     58                        }
     59                }
     60                break;
     61        case 'move-down-menu-item' :
     62                // moving down a menu item is the same as moving up the next in order
     63                check_admin_referer( 'move-menu_item' );
     64                $menu_item_id = (int) $_REQUEST['menu-item'];
     65                $next_item_id = 0;
     66                if ( 'nav_menu_item' == get_post_type( $menu_item_id ) ) {
     67                        $menus = isset( $_REQUEST['menu'] ) ? array( (int) $_REQUEST['menu'] ) : wp_get_object_terms( $menu_item_id, 'nav_menu', array( 'fields' => 'ids' ) );
     68                        if ( ! is_wp_error( $menus ) ) {
     69                                foreach( (array) $menus as $menu_id ) {
     70                                        $move_down_ordered_menu_items = (array) wp_get_nav_menu_items( $menu_id );
     71                                        while ( $next = array_shift( $move_down_ordered_menu_items ) ) {
     72                                                if ( isset( $next->ID ) && $next->ID == $menu_item_id ) {
     73                                                        break;
     74                                                }
     75                                        }
     76
     77                                        if ( $following = array_shift( $move_down_ordered_menu_items ) ) {
     78                                                $next_item_id = (int) $following->ID;
     79                                        }
     80                                }
     81                        }
     82                }
     83                // fall through to next case
     84        case 'move-up-menu-item' :
     85                check_admin_referer( 'move-menu_item' );
     86                $menu_item_id = empty( $next_item_id ) ? (int) $_REQUEST['menu-item'] : $next_item_id;
     87                if ( 'nav_menu_item' == get_post_type( $menu_item_id ) ) {
     88                        $menus = isset( $_REQUEST['menu'] ) ? array( (int) $_REQUEST['menu'] ) : wp_get_object_terms( $menu_item_id, 'nav_menu', array( 'fields' => 'ids' ) );
     89                        if ( ! is_wp_error( $menus ) ) {
     90                                foreach( (array) $menus as $menu_id ) {
     91                                        $ordered_menu_items = wp_get_nav_menu_items( $menu_id );
     92                                        $menu_item_data = get_post( $menu_item_id , ARRAY_A );
     93
     94                                        // setup the data we need in one pass through the array of menu items
     95                                        $dbids_to_orders = array();
     96                                        $orders_to_dbids = array();
     97                                        $objectids_to_dbids = array();
     98                                        $dbids_to_objectids = array();
     99                                        foreach( (array) $ordered_menu_items as $ordered_menu_item_object ) {
     100                                                if ( isset( $ordered_menu_item_object->ID ) ) {
     101                                                        if ( isset( $ordered_menu_item_object->menu_order ) ) {
     102                                                                $dbids_to_orders[$ordered_menu_item_object->ID] = $ordered_menu_item_object->menu_order;
     103                                                                $orders_to_dbids[$ordered_menu_item_object->menu_order] = $ordered_menu_item_object->ID;
     104                                                        }
     105
     106                                                        $possible_object_id = (int) get_post_meta( $ordered_menu_item_object->ID, '_menu_item_object_id', true );
     107                                                        if ( ! empty( $possible_object_id ) ) {
     108                                                                $dbids_to_objectids[$ordered_menu_item_object->ID] = $possible_object_id;
     109                                                                $objectids_to_dbids[$possible_object_id] = $ordered_menu_item_object->ID;
     110                                                        }
     111                                                }
     112                                        }
     113
     114
     115                                        // if this menu item is not first
     116                                        if ( ! empty( $dbids_to_orders[$menu_item_id] ) && ! empty( $orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1] ) ) {
     117                                               
     118                                                // if this menu item is a child of the previous
     119                                                if (
     120                                                        ! empty( $menu_item_data['post_parent'] ) &&
     121                                                        isset( $objectids_to_dbids[$menu_item_data['post_parent']] ) &&
     122                                                        isset( $orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1] ) &&
     123                                                        ( $objectids_to_dbids[$menu_item_data['post_parent']] == $orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1] )
     124                                                ) {
     125
     126                                                        $parent_db_id = $objectids_to_dbids[$menu_item_data['post_parent']];
     127                                                        $parent_data = get_post( $parent_db_id, ARRAY_A );
     128
     129                                                        if ( ! is_wp_error( $parent_data ) ) {
     130                                                               
     131                                                                // if there is something before the parent, make menu item a child of the parent's parent
     132                                                                if ( ! empty( $dbids_to_orders[$parent_db_id] ) && ! empty( $orders_to_dbids[$dbids_to_orders[$parent_db_id] - 1] ) ) {
     133                                                                        $menu_item_data['post_parent'] = $parent_data['post_parent'];
     134
     135                                                                // else there isn't something before the parent
     136                                                                } else {
     137                                                                        $menu_item_data['post_parent'] = 0;
     138                                                                }
     139                                                               
     140                                                                // set former parent's [menu_order] to that of menu-item's
     141                                                                $parent_data['menu_order'] = $parent_data['menu_order'] + 1;
     142
     143                                                                // set menu-item's [menu_order] to that of former parent
     144                                                                $menu_item_data['menu_order'] = $menu_item_data['menu_order'] - 1;
     145                                                               
     146                                                                // save changes
     147                                                                wp_update_post($menu_item_data);
     148                                                                wp_update_post($parent_data);
     149                                                        }
     150
     151                                                // else this menu item is not a child of the previous
     152                                                } elseif ( isset($dbids_to_objectids[$orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1]] ) ) {
     153                                                        // just make it a child of the previous; keep the order
     154                                                        $menu_item_data['post_parent'] = (int) $dbids_to_objectids[$orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1]];
     155                                                        wp_update_post($menu_item_data);
     156                                                }
     157                                        }
     158                                }
     159                        }
     160                }
     161                break;
     162
     163        case 'delete-menu-item':
     164                $menu_item_id = (int) $_REQUEST['menu-item'];
     165
     166                check_admin_referer( 'delete-menu_item_' . $menu_item_id );
     167
     168
     169                if ( 'nav_menu_item' == get_post_type( $menu_item_id ) ) {
     170                        if ( wp_delete_post( $menu_item_id, true ) ) {
     171                               
     172                                $messages_div = '<div id="message" class="updated"><p>' . __('The menu item has been successfully deleted.') . '</p></div>';
     173                        }
     174                }
     175                break;
    56176        case 'delete':
    57177                check_admin_referer( 'delete-nav_menu-' . $nav_menu_selected_id );
    58178
    59                 if ( is_nav_menu($nav_menu_selected_id) ) {
     179                if ( is_nav_menu( $nav_menu_selected_id ) ) {
    60180                        $delete_nav_menu = wp_delete_nav_menu( $nav_menu_selected_id );
    61181
    … …  
    71191
    72192        case 'update':
    73                 check_admin_referer( 'update-nav_menu' );
     193                check_admin_referer( 'update-nav_menu', 'update-nav-menu-nonce' );
    74194
    75195                // Add Menu
    76                 if ( isset($_POST['create-menu-button']) ) {
     196                if ( 0 == $nav_menu_selected_id ) {
    77197                        if ( current_theme_supports('nav-menus') || current_theme_supports('widgets') ) {
    78                                 $add_nav_menu = esc_html( $_POST['create-menu-name'] );
    79 
    80                                 if ( $add_nav_menu ) {
    81                                         $add_nav_menu = wp_create_nav_menu( $add_nav_menu );
    82 
    83                                         if ( is_wp_error( $add_nav_menu ) ) {
    84                                                 $messages_div = '<div id="message" class="error"><p>' . $add_nav_menu->get_error_message() . '</p></div>';
     198                                $new_menu_title = esc_html( $_POST['menu-name'] );
     199
     200                                if ( $new_menu_title ) {
     201                                        $_nav_menu_selected_id = wp_update_nav_menu_object( 0, array('menu-name' => $new_menu_title) );
     202
     203                                        if ( is_wp_error( $_nav_menu_selected_id ) ) {
     204                                                $messages_div = '<div id="message" class="error"><p>' . $_nav_menu_selected_id->get_error_message() . '</p></div>';
    85205                                        } else {
    86                                                 $nav_menu_selected_id = $add_nav_menu->term_id;
    87                                                 $nav_menu_selected_title = $add_nav_menu->name;
    88                                                 $messages_div = '<div id="message" class="updated"><p>' . sprintf( __('The <strong>%s</strong> menu has been successfully created.'), $add_nav_menu->name ) . '</p></div>';
     206                                                $_menu_object = wp_get_nav_menu_object( $_nav_menu_selected_id );
     207                                                $nav_menu_selected_id = $_nav_menu_selected_id;
     208                                                $nav_menu_selected_title = $_menu_object->name;
     209                                                $messages_div = '<div id="message" class="updated"><p>' . sprintf( __('The <strong>%s</strong> menu has been successfully created.'), $nav_menu_selected_title ) . '</p></div>';
    89210                                        }
    90211                                } else {
    91212                                        $messages_div = '<div id="message" class="error"><p>' . __('Please enter a valid menu name.') . '</p></div>';
    92213                                }
    93                                 unset( $add_nav_menu );
    94                         }
     214                        }
     215
     216                // update existing menu
    95217                } else {
    96218
    97                         // @todo wrap this into wp_update_nav_menu_object();
    98                         if ( isset($_POST['menu-name']) ) {
    99                                 $old_nav_menu = get_term( $nav_menu_selected_id, 'nav_menu', ARRAY_A );
    100                                 $args = array( 'name' => $_POST['menu-name'], 'slug' => null, 'description' => $old_nav_menu['description'], 'parent' => $old_nav_menu['parent'], );
    101                                 $new_nav_menu = wp_update_term( $nav_menu_selected_id, 'nav_menu', $args );
     219                        $_menu_object = wp_get_nav_menu_object( $nav_menu_selected_id );
     220
     221                        if ( ! is_wp_error( $_menu_object ) ) {
     222                                wp_update_nav_menu_object( $nav_menu_selected_id, array( 'menu-name' => $_POST['menu-name'] ) );
     223                                $nav_menu_selected_title = $_menu_object->name;
    102224                        }
    103225
    104226                        // Update menu items
    105227
    106                         // @todo: wrap update logic into wp_update_nav_menu();
    107                         $update_count = isset( $_POST['li-count'] ) ? (int) $_POST['li-count'] : 0;
    108                         $update_nav_menu = is_nav_menu( $nav_menu_selected_id );
    109 
    110                         if ( !is_wp_error($update_nav_menu) ) {
     228                        if ( ! is_wp_error( $_menu_object ) ) {
    111229                                $menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array('orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID') );
    112230
    113                                 // Loop through all POST variables
    114                                 for ( $k = 0; $k < $update_count; $k++ ) {
     231                                // Loop through all the menu items' POST variables
     232                                foreach( (array) $_POST['menu-item-db-id'] as $_key => $k ) {
    115233
    116234                                        // Menu item title can't be blank
    117                                         if ( '' == $_POST['menu-item-title'][$k] )
     235                                        if ( '' == $_POST['menu-item-title'][$_key] )
    118236                                                continue;
    119 
    120                                         $menu_item_db_id       = isset( $_POST['menu-item-db-id'][$k] )       ? $_POST['menu-item-db-id'][$k]       : 0;
    121                                         $menu_item_object_id   = isset( $_POST['menu-item-object-id'][$k] )   ? $_POST['menu-item-object-id'][$k]   : 0;
    122                                         $menu_item_object      = isset( $_POST['menu-item-object'][$k] )      ? $_POST['menu-item-object'][$k]      : '';
    123                                         $menu_item_parent_id   = isset( $_POST['menu-item-parent-id'][$k] )   ? $_POST['menu-item-parent-id'][$k]   : 0;
    124                                         $menu_item_position    = isset( $_POST['menu-item-position'][$k] )    ? $_POST['menu-item-position'][$k]    : 0;
    125                                         $menu_item_type        = isset( $_POST['menu-item-type'][$k] )        ? $_POST['menu-item-type'][$k]        : 'custom';
    126                                         $menu_item_append      = isset( $_POST['menu-item-append'][$k] )      ? $_POST['menu-item-append'][$k]      : 'custom';
    127                                         $menu_item_title       = isset( $_POST['menu-item-title'][$k] )       ? $_POST['menu-item-title'][$k]       : '';
    128                                         $menu_item_url         = isset( $_POST['menu-item-url'][$k] )         ? $_POST['menu-item-url'][$k]         : '';
    129                                         $menu_item_description = isset( $_POST['menu-item-description'][$k] ) ? $_POST['menu-item-description'][$k] : '';
    130                                         $menu_item_attr_title  = isset( $_POST['menu-item-attr-title'][$k] )  ? $_POST['menu-item-attr-title'][$k]  : '';
    131                                         $menu_item_target      = isset( $_POST['menu-item-target'][$k] )      ? $_POST['menu-item-target'][$k]      : '';
    132                                         $menu_item_classes     = isset( $_POST['menu-item-classes'][$k] )     ? $_POST['menu-item-classes'][$k]     : '';
    133                                         $menu_item_xfn         = isset( $_POST['menu-item-xfn'][$k] )         ? $_POST['menu-item-xfn'][$k]         : '';
    134 
    135                                         // Populate the menu item object
    136                                         $post = array(
    137                                                 'post_status' => 'publish', 'post_type' => 'nav_menu_item', 'ping_status' => 0,
    138                                                 'post_author' => $user_ID, 'tax_input' => array( 'nav_menu' => $update_nav_menu->name ),
    139                                                 'post_title' => $menu_item_title, 'post_excerpt' => $menu_item_attr_title,
    140                                                 'post_parent' => $menu_item_parent_id, 'menu_order' => $menu_item_position,
    141                                                 'post_content' => $menu_item_description,
     237       
     238                                        $args = array(
     239                                                'menu-item-db-id' => $_POST['menu-item-db-id'][$_key],
     240                                                'menu-item-object-id' => $_POST['menu-item-object-id'][$_key],
     241                                                'menu-item-object' => $_POST['menu-item-object'][$_key],
     242                                                'menu-item-parent-id' => $_POST['menu-item-parent-id'][$_key],
     243                                                'menu-item-position' => $_POST['menu-item-position'][$_key],
     244                                                'menu-item-type' => $_POST['menu-item-type'][$_key],
     245                                                'menu-item-append' => $_POST['menu-item-append'][$_key],
     246                                                'menu-item-title' => $_POST['menu-item-title'][$_key],
     247                                                'menu-item-url' => $_POST['menu-item-url'][$_key],
     248                                                'menu-item-description' => $_POST['menu-item-description'][$_key],
     249                                                'menu-item-attr-title' => $_POST['menu-item-attr-title'][$_key],
     250                                                'menu-item-target' => $_POST['menu-item-target'][$_key],
     251                                                'menu-item-classes' => $_POST['menu-item-classes'][$_key],
     252                                                'menu-item-xfn' => $_POST['menu-item-xfn'][$_key],
    142253                                        );
    143254
    144                                         // New menu item
    145                                         if ( $menu_item_db_id == 0 ) {
    146                                                 $menu_item_db_id = wp_insert_post( $post );
    147 
    148                                         // Update existing menu item
    149                                         } elseif ( isset($menu_items[$menu_item_db_id]) || ( 'custom' == $menu_item_type && 0 != $menu_item_db_id ) ) {
    150                                                 $post['ID'] = $menu_item_db_id;
    151                                                 wp_update_post( $post );
     255                                        $menu_item_db_id = wp_update_nav_menu_item( $nav_menu_selected_id, ( $_POST['menu-item-db-id'][$_key] != $_key ? 0 : $_key ), $args );
     256
     257                                        if ( ! is_wp_error( $menu_item_db_id ) && isset( $menu_items[$menu_item_db_id] ) ) {
    152258                                                unset( $menu_items[$menu_item_db_id] );
    153259                                        }
    154 
    155                                         update_post_meta( $menu_item_db_id, '_menu_item_type', sanitize_key($menu_item_type) );
    156                                         update_post_meta( $menu_item_db_id, '_menu_item_object_id', (int) $menu_item_object_id );
    157                                         update_post_meta( $menu_item_db_id, '_menu_item_object', sanitize_key($menu_item_object) );
    158                                         update_post_meta( $menu_item_db_id, '_menu_item_target', sanitize_key($menu_item_target) );
    159                                         // @todo handle sanitizing multiple classes separated by whitespace.
    160                                         update_post_meta( $menu_item_db_id, '_menu_item_classes', sanitize_html_class($menu_item_classes) );
    161                                         update_post_meta( $menu_item_db_id, '_menu_item_xfn', sanitize_html_class($menu_item_xfn) );
    162 
    163                                         // @todo: only save custom link urls.
    164                                         update_post_meta( $menu_item_db_id, '_menu_item_url', esc_url_raw($menu_item_url) );
    165260                                }
    166261
    … …  
    174269                                do_action( 'wp_update_nav_menu', $nav_menu_selected_id );
    175270
    176                                 $messages_div = '<div id="message" class="updated"><p>' . sprintf( __('The <strong>%s</strong> menu has been updated.'), $update_nav_menu->name ) . '</p></div>';
    177                                 unset( $update_nav_menu, $update_count, $menu_items );
     271                                $messages_div = '<div id="message" class="updated"><p>' . sprintf( __('The <strong>%s</strong> menu has been updated.'), $nav_menu_selected_title ) . '</p></div>';
     272                                unset( $menu_items );
    178273                        }
    179274                }
    … …  
    185280
    186281// Get recently edited nav menu
    187 $recently_edited = get_user_option( 'nav_menu_recently_edited' );
     282$recently_edited = (int) get_user_option( 'nav_menu_recently_edited' );
    188283
    189284// If there was no recently edited menu, and $nav_menu_selected_id is a nav menu, update recently edited menu.
    190 if ( !$recently_edited && is_nav_menu($nav_menu_selected_id) ) {
     285if ( !$recently_edited && is_nav_menu( $nav_menu_selected_id ) ) {
    191286        $recently_edited = $nav_menu_selected_id;
    192287
    193 // Else if $nav_menu_selected_id is not a menu, but $recently_edited is, grab that one.
    194 } elseif ( 0 == $nav_menu_selected_id && is_nav_menu($recently_edited) ) {
     288// Else if $nav_menu_selected_id is not a menu and not requesting that we create a new menu, but $recently_edited is a menu, grab that one.
     289} elseif ( 0 == $nav_menu_selected_id && ! isset( $_REQUEST['menu'] ) && is_nav_menu( $recently_edited ) ) {
    195290        $nav_menu_selected_id = $recently_edited;
    196291
    197292// Else try to grab the first menu from the menus list
    198 } elseif ( 0 == $nav_menu_selected_id && ! empty($nav_menus) ) {
     293} elseif ( 0 == $nav_menu_selected_id && ! isset( $_REQUEST['menu'] ) && ! empty($nav_menus) ) {
    199294        $nav_menu_selected_id = $nav_menus[0]->term_id;
    200295}
    201296
    202297// Update the user's setting
    203 if ( $nav_menu_selected_id != $recently_edited && is_nav_menu($nav_menu_selected_id) )
     298if ( $nav_menu_selected_id != $recently_edited && is_nav_menu( $nav_menu_selected_id ) )
    204299        update_user_meta( $current_user->ID, 'nav_menu_recently_edited', $nav_menu_selected_id );
    205300
    206 // If there's a menu, get it's name.
    207 if ( !$nav_menu_selected_title && $nav_menu_selected_title = is_nav_menu( $nav_menu_selected_id ) ) {
    208         $nav_menu_selected_title = $nav_menu_selected_title->name;
     301// If there's a menu, get its name.
     302if ( ! $nav_menu_selected_title && is_nav_menu( $nav_menu_selected_id ) ) {
     303        $_menu_object = wp_get_nav_menu_object( $nav_menu_selected_id );
     304        $nav_menu_selected_title = ! is_wp_error( $_menu_object ) ? $_menu_object->name : '';
    209305}
    210306
    211 // Create Menu Metabox
    212 add_meta_box( 'create-menu', __('Create Menu'), 'wp_nav_menu_create_metabox', 'nav-menus', 'side', 'core' );
    213 
    214 // The user has no menus.
    215 if ( !is_nav_menu( $nav_menu_selected_id ) ) {
    216         $messages_div = '<div id="message" class="updated"><p>' . __('You do not have any menus. Create a new menu.') . '</p></div>';
    217 
    218307// The theme supports menus
    219 } elseif ( current_theme_supports('nav-menus') ) {
     308if ( current_theme_supports('nav-menus') ) {
    220309        // Register nav menu metaboxes
    221         add_meta_box( 'manage-menu', __( 'Menu Settings' ), 'wp_nav_menu_manage_menu_metabox', 'nav-menus', 'side', 'high', array( $nav_menu_selected_id, $nav_menu_selected_title ) );
    222         wp_nav_menu_metaboxes_setup();
     310        wp_nav_menu_meta_boxes_setup();
    223311
    224312// The theme does not support menus but supports widgets
    225313} elseif ( current_theme_supports('widgets') ) {
    226314        // Register nav menu metaboxes
    227         add_meta_box( 'manage-menu', __( 'Menu Settings' ), 'wp_nav_menu_manage_menu_metabox', 'nav-menus', 'side', 'high', array( $nav_menu_selected_id, $nav_menu_selected_title ) );
    228         wp_nav_menu_metaboxes_setup();
     315        wp_nav_menu_meta_boxes_setup();
    229316        $messages_div = '<div id="message" class="error"><p>' . __('The current theme does not natively support menus, but you can use the &#8220;Navigation Menu&#8221; widget to add any menus you create here to the theme&#8217;s sidebar.') . '</p></div>';
    230317
    … …  
    236323
    237324// Get the admin header
    238 require_once( './admin-header.php' );
     325require_once( 'admin-header.php' );
    239326?>
    240 <div class="wrap">
     327<div class="wrap nav-edit-wrap">
    241328        <?php screen_icon(); ?>
    242329        <h2><?php esc_html_e('Menus'); ?></h2>
    243         <?php /* OMGWTFBBQ */ ?><div class="error"><p><strong><?php _e('Beta Testers:') ?></strong> <?php _e('This feature is still under construction. You can try it out, but expect it to change in layout and functionality in the second beta release.'); ?></p></div>
    244330        <?php echo $messages_div; ?>
    245         <div class="hide-if-js error"><p><?php _e('You do not have JavaScript enabled in your browser. Please enable it to access the Menus functionality.'); ?></p></div>
    246 
    247         <?php if ( !empty($nav_menus) && count($nav_menus) > 1 && ( current_theme_supports('nav-menus') || current_theme_supports('widgets') ) ) : ?>
    248         <ul class="subsubsub">
    249                 <?php
    250                         foreach ( $nav_menus as $_nav_menu ) {
    251                                 $sep = end( $nav_menus ) == $_nav_menu ? '' : ' | ';
    252 
    253                                 if ( $nav_menu_selected_id == $_nav_menu->term_id )
    254                                         echo '<li><a href="'. admin_url( 'nav-menus.php?action=edit&amp;menu=' . esc_attr($_nav_menu->term_id) ) .'" class="current">'. esc_html( $_nav_menu->name ) .'</a>'. $sep .'</li>';
    255                                 else
    256                                         echo '<li><a href="'. admin_url( 'nav-menus.php?action=edit&amp;menu=' . esc_attr($_nav_menu->term_id) ) .'">'. esc_html( $_nav_menu->name ) .'</a>'. $sep .'</li>';
    257                         }
    258                 ?>
    259         </ul>
    260         <?php endif; ?>
    261 
    262         <div id="menu-management" class="metabox-holder has-right-sidebar">
    263                 <form id="update-nav-menu" action="<?php echo admin_url( 'nav-menus.php' ); ?>" method="post" enctype="multipart/form-data">
    264                         <?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?>
    265                         <?php wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); ?>
    266                         <?php wp_nonce_field( 'update-nav_menu' ); ?>
    267                         <input type="hidden" name="action" value="update" />
    268                         <input type="hidden" name="li-count" id="li-count" value="-1" />
    269                         <input type="hidden" name="menu" id="menu" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" />
    270                         <input type="hidden" id="hidden-metaboxes" value="<?php echo wp_initial_nav_menu_meta_boxes(); ?>" />
    271                         <div id="post-body">
    272                                 <div id="post-body-content">
    273                                         <?php if ( is_nav_menu($nav_menu_selected_id) && ( current_theme_supports('nav-menus') || current_theme_supports('widgets') ) ) : ?>
    274                                                 <div id="menu-container" class="postbox">
    275                                                         <h3 class="hndle"><?php echo esc_html( $nav_menu_selected_title ); ?></h3>
    276                                                         <div class="inside">
    277                                                                 <?php wp_nav_menu( array( 'menu' => $nav_menu_selected_id, 'context' => 'backend' ) ); ?>
    278                                                         </div><!-- /.inside -->
    279                                                 <!-- /#nav-menu-canvas .postbox-->
    280                                                 </div>
    281                                         <?php endif; ?>
    282                                 </div><!-- /#post-body-content-->
    283                         </div><!--- /#post-body -->
    284                         <div id="menu-settings-column" class="inner-sidebar">
    285 
    286                                 <?php do_meta_boxes( 'nav-menus', 'side', null ); ?>
    287 
    288                         </div><!-- /#menu-settings-column -->
    289                 </form><!--/#update-nav-menu-->
    290                 <br class="clear" />
    291         </div><!-- /.metabox-holder has-right-sidebar-->
     331       
     332        <?php if ( current_theme_supports('nav-menus') || current_theme_supports('widgets') ) : ?>
     333        <div id="menu-settings-column" class="metabox-holder">
     334
     335                <form id="nav-menu-meta" action="<?php echo admin_url( 'nav-menus.php' ); ?>" class="nav-menu-meta" method="post" enctype="multipart/form-data">
     336                        <input type="hidden" name="menu" id="nav-menu-meta-object-id" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" />
     337                        <input type="hidden" name="action" value="add-menu-item" />
     338                        <?php wp_nonce_field( 'add-menu_item', 'menu-settings-column-nonce' ); ?>
     339                        <?php do_meta_boxes( 'nav-menus', 'side', null ); ?>
     340                </form>
     341
     342        </div><!-- /#menu-settings-column -->
     343       
     344        <div id="menu-management" class="">
     345                <h2>
     346                        <?php
     347                        foreach( (array) $nav_menus as $_nav_menu ) :
     348                               
     349                                ?>
     350                                <a href="<?php
     351                                        echo add_query_arg(
     352                                                array(
     353                                                        'action' => 'edit',
     354                                                        'menu' => $_nav_menu->term_id,
     355                                                ),
     356                                                admin_url( 'nav-menus.php' )
     357                                        );
     358                                ?>" class="menu-tabs<?php
     359                                        if ( $nav_menu_selected_id != $_nav_menu->term_id )
     360                                                echo ' menu-tab-inactive';
     361                                ?>"><?php echo esc_html( $_nav_menu->name ); ?></a>
     362
     363                                <?php
     364                        endforeach;
     365                        ?>
     366                        <a href="<?php
     367                                echo add_query_arg(
     368                                        array(
     369                                                'action' => 'edit',
     370                                                'menu' => 0,
     371                                        ),
     372                                        admin_url( 'nav-menus.php' )
     373                                );
     374                        ?>" class="menu-tabs menu-add-new<?php
     375                                if ( 0 != $nav_menu_selected_id )
     376                                        echo ' menu-tab-inactive';
     377                        ?>"><?php printf( '<abbr title="%s">+</abbr>', esc_html__( 'Add menu' ) ); ?></a>
     378                </h2>
     379                <div class="menu-edit">
     380                        <form id="update-nav-menu" action="<?php echo admin_url( 'nav-menus.php' ); ?>" method="post" enctype="multipart/form-data">
     381                                <div id="submitpost" class="submitbox">
     382                                        <div id="minor-publishing">
     383                                                <div class="misc-pub-section misc-pub-section-last">
     384                                                        <label class="howto" for="menu-name">
     385                                                                <span><?php _e('Name'); ?></span>
     386                                                                <input id="menu-name" name="menu-name" type="text" class="regular-text menu-item-textbox" value="<?php echo esc_attr( $nav_menu_selected_title  ); ?>" />
     387                                                                <br class="clear" />
     388                                                        </label>
     389                                                </div><!--END .misc-pub-section misc-pub-section-last-->
     390                                                <br class="clear" />
     391                                        </div><!--END #misc-publishing-actions-->
     392                                        <div id="major-publishing-actions">
     393
     394                                                <?php if ( ! empty( $nav_menu_selected_id ) ) : ?>
     395                                                <div id="delete-action">
     396                                                        <a class="submitdelete deletion menu-delete" href="<?php echo wp_nonce_url( admin_url('nav-menus.php?action=delete&amp;menu=' . $nav_menu_selected_id), 'delete-nav_menu-' . $nav_menu_selected_id ); ?>"><?php _e('Delete Menu'); ?></a>
     397                                                </div><!--END #delete-action-->
     398                                                <?php endif; ?>
     399
     400                                                <div id="publishing-action">
     401                                                        <input class="button-primary" name="save_menu" type="submit" value="<?php esc_attr_e('Save Menu'); ?>" />
     402                                                </div><!--END #publishing-action-->
     403                                                <br class="clear" />
     404                                        </div><!--END #major-publishing-actions-->
     405                                </div><!--END #submitpost .submitbox-->
     406                                <?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?>
     407                                <?php wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); ?>
     408                                <?php wp_nonce_field( 'update-nav_menu', 'update-nav-menu-nonce' ); ?>
     409                                <input type="hidden" name="action" value="update" />
     410                                <input type="hidden" name="menu" id="menu" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" />
     411                                <input type="hidden" id="hidden-metaboxes" value="<?php echo wp_initial_nav_menu_meta_boxes(); ?>" />
     412                                <div id="post-body">
     413                                        <div id="post-body-content">
     414                                                <?php if ( is_nav_menu( $nav_menu_selected_id ) && ( current_theme_supports('nav-menus') || current_theme_supports('widgets') ) ) : ?>
     415                                                        <ul class="menu" id="menu-to-edit">
     416                                                        <?php
     417                                                        $edit_markup = wp_get_nav_menu_to_edit( $nav_menu_selected_id  );
     418                                                        if ( ! is_wp_error( $edit_markup ) ) {
     419                                                                echo $edit_markup;
     420                                                        }
     421                                                        ?>
     422                                                        </ul>
     423                                                <?php endif; ?>
     424                                                <br class="clear" />
     425                                        </div><!-- /#post-body-content-->
     426                                </div><!--- /#post-body -->
     427                        </form><!--/#update-nav-menu-->
     428                </div><!-- /.menu-edit -->
     429        </div><!-- /#menu-management -->
     430        <?php endif; // if menus supported in current theme ?>
    292431</div><!-- /.wrap-->
    293432
    294 <div id="menu-item-settings">
    295         <p class="description">
    296                 <label for="edit-menu-item-title">
    297                         <?php _e( 'Menu Title' ); ?><br />
    298                         <input type="text" id="edit-menu-item-title" class="widefat" name="edit-menu-item-title" value="" tabindex="1" />
    299                 </label>
    300         </p>
    301         <p class="description">
    302                 <label for="edit-menu-item-url">
    303                         <?php _e( 'URL' ); ?><br />
    304                         <input type="text" id="edit-menu-item-url" class="widefat code" name="edit-menu-item-url" value="" tabindex="2" />
    305                 </label>
    306         </p>
    307         <p class="description">
    308                 <label for="edit-menu-item-attr-title">
    309                         <?php _e( 'Title Attribute' ); ?><br />
    310                         <input type="text" id="edit-menu-item-attr-title" class="widefat" name="edit-menu-item-attr-title" value="" tabindex="3" />
    311                 </label>
    312         </p>
    313         <p class="description">
    314                 <label for="edit-menu-item-target">
    315                         <?php _e( 'Link Target' ); ?><br />
    316                         <select id="edit-menu-item-target" class="widefat" name="edit-menu-item-target" tabindex="4">
    317                                 <option value=""><?php _e('Same window or tab'); ?></option>
    318                                 <option value="_blank"><?php _e('New window or tab'); ?></option>
    319                         </select>
    320                 </label>
    321         </p>
    322         <p class="description">
    323                 <label for="edit-menu-item-classes">
    324                         <?php _e( 'CSS Classes (optional)' ); ?><br />
    325                         <input type="text" id="edit-menu-item-classes" class="widefat code" name="edit-menu-item-classes" value="" tabindex="5" />
    326                 </label>
    327         </p>
    328         <p class="description">
    329                 <label for="edit-menu-item-xfn">
    330                         <?php _e( 'Link Relationship (XFN) (optional)' ); ?><br />
    331                         <input type="text" id="edit-menu-item-xfn" class="widefat code" name="edit-menu-item-xfn" value="" tabindex="6" />
    332                 </label>
    333         </p>
    334         <p class="description">
    335                 <label for="edit-menu-item-description">
    336                         <?php _e( 'Description (optional)' ); ?><br />
    337                         <textarea id="edit-menu-item-description" class="widefat" rows="3" name="edit-menu-item-description" tabindex="7" /></textarea>
    338                         <span class="description"><?php _e('The description will be displayed in the menu if the current theme supports it.'); ?></span>
    339                 </label>
    340         </p>
    341         <p>
    342                 <a id="update-menu-item" class="save button-primary" tabindex="8"><?php _e('Save Changes'); ?></a>
    343                 <a id="cancel-save" class="submitdelete deletion" tabindex="9"><?php _e('Cancel'); ?></a>
    344         </p>
    345         <input type="hidden" id="edit-menu-item-id" name="edit-item-id" value="" />
    346 </div><!-- /#menu-item-settings-->
    347 
    348 <?php include( './admin-footer.php' ); ?>
     433
     434<?php include( 'admin-footer.php' ); ?>
Note: See TracChangeset for help on using the changeset viewer.