| 1 | Index: wp-admin/includes/nav-menu.php |
|---|
| 2 | =================================================================== |
|---|
| 3 | --- wp-admin/includes/nav-menu.php (revision 23389) |
|---|
| 4 | +++ wp-admin/includes/nav-menu.php (working copy) |
|---|
| 5 | @@ -81,11 +81,15 @@ |
|---|
| 6 | |
|---|
| 7 | $title = empty( $item->label ) ? $title : $item->label; |
|---|
| 8 | |
|---|
| 9 | + $submenu_text = ''; |
|---|
| 10 | + if (0 == $depth) |
|---|
| 11 | + $submenu_text = 'style="display: none;"'; |
|---|
| 12 | + |
|---|
| 13 | ?> |
|---|
| 14 | <li id="menu-item-<?php echo $item_id; ?>" class="<?php echo implode(' ', $classes ); ?>"> |
|---|
| 15 | <dl class="menu-item-bar"> |
|---|
| 16 | <dt class="menu-item-handle"> |
|---|
| 17 | - <span class="item-title"><?php echo esc_html( $title ); ?></span> |
|---|
| 18 | + <span class="item-title"><?php echo esc_html( $title ); ?> <span class="is-submenu" <?php echo $submenu_text; ?>><?php _e( 'sub item' ); ?></span></span> |
|---|
| 19 | <span class="item-controls"> |
|---|
| 20 | <span class="item-type"><?php echo esc_html( $item->type_label ); ?></span> |
|---|
| 21 | <span class="item-order hide-if-js"> |
|---|
| 22 | @@ -382,10 +386,11 @@ |
|---|
| 23 | **/ |
|---|
| 24 | function wp_nav_menu_setup() { |
|---|
| 25 | // Register meta boxes |
|---|
| 26 | - if ( wp_get_nav_menus() ) |
|---|
| 27 | - add_meta_box( 'nav-menu-theme-locations', __( 'Theme Locations' ), 'wp_nav_menu_locations_meta_box' , 'nav-menus', 'side', 'default' ); |
|---|
| 28 | - add_meta_box( 'add-custom-links', __('Custom Links'), 'wp_nav_menu_item_link_meta_box', 'nav-menus', 'side', 'default' ); |
|---|
| 29 | + //if ( wp_get_nav_menus() ) |
|---|
| 30 | +// add_meta_box( 'nav-menu-theme-locations', __( 'Menus within your theme' ), 'wp_nav_menu_locations_meta_box' , 'nav-menus', 'side', 'default' ); |
|---|
| 31 | + // todo: if we stick with the theme location checkboxes then remove the metabox code all togehter |
|---|
| 32 | wp_nav_menu_post_type_meta_boxes(); |
|---|
| 33 | + add_meta_box( 'add-custom-links', __('Add Links'), 'wp_nav_menu_item_link_meta_box', 'nav-menus', 'side', 'default' ); |
|---|
| 34 | wp_nav_menu_taxonomy_meta_boxes(); |
|---|
| 35 | |
|---|
| 36 | // Register advanced menu items (columns) |
|---|
| 37 | @@ -411,7 +416,7 @@ |
|---|
| 38 | if ( get_user_option( 'metaboxhidden_nav-menus' ) !== false || ! is_array($wp_meta_boxes) ) |
|---|
| 39 | return; |
|---|
| 40 | |
|---|
| 41 | - $initial_meta_boxes = array( 'nav-menu-theme-locations', 'add-custom-links', 'add-page', 'add-category' ); |
|---|
| 42 | + $initial_meta_boxes = array( 'nav-menu-theme-locations', 'add-page', 'add-custom-links', 'add-category' ); |
|---|
| 43 | $hidden_meta_boxes = array(); |
|---|
| 44 | |
|---|
| 45 | foreach ( array_keys($wp_meta_boxes['nav-menus']) as $context ) { |
|---|
| 46 | @@ -445,7 +450,7 @@ |
|---|
| 47 | $post_type = apply_filters( 'nav_menu_meta_box_object', $post_type ); |
|---|
| 48 | if ( $post_type ) { |
|---|
| 49 | $id = $post_type->name; |
|---|
| 50 | - add_meta_box( "add-{$id}", $post_type->labels->name, 'wp_nav_menu_item_post_type_meta_box', 'nav-menus', 'side', 'default', $post_type ); |
|---|
| 51 | + add_meta_box( "add-{$id}", __('Add ') . $post_type->labels->name, 'wp_nav_menu_item_post_type_meta_box', 'nav-menus', 'side', 'default', $post_type ); |
|---|
| 52 | } |
|---|
| 53 | } |
|---|
| 54 | } |
|---|
| 55 | @@ -465,7 +470,7 @@ |
|---|
| 56 | $tax = apply_filters( 'nav_menu_meta_box_object', $tax ); |
|---|
| 57 | if ( $tax ) { |
|---|
| 58 | $id = $tax->name; |
|---|
| 59 | - add_meta_box( "add-{$id}", $tax->labels->name, 'wp_nav_menu_item_taxonomy_meta_box', 'nav-menus', 'side', 'default', $tax ); |
|---|
| 60 | + add_meta_box( "add-{$id}", __('Add ') . $tax->labels->name, 'wp_nav_menu_item_taxonomy_meta_box', 'nav-menus', 'side', 'default', $tax ); |
|---|
| 61 | } |
|---|
| 62 | } |
|---|
| 63 | } |
|---|
| 64 | @@ -489,7 +494,7 @@ |
|---|
| 65 | $menu_locations = get_nav_menu_locations(); |
|---|
| 66 | $num_locations = count( array_keys($locations) ); |
|---|
| 67 | |
|---|
| 68 | - echo '<p class="howto">' . sprintf( _n('Your theme supports %s menu. Select which menu you would like to use.', 'Your theme supports %s menus. Select which menu appears in each location.', $num_locations ), number_format_i18n($num_locations) ) . '</p>'; |
|---|
| 69 | + echo '<p class="howto">' . _n('Select a menu to use within your theme.', 'Select the menus you will use in your theme.', $num_locations ) . '</p>'; |
|---|
| 70 | |
|---|
| 71 | foreach ( $locations as $location => $description ) { |
|---|
| 72 | ?> |
|---|
| 73 | @@ -512,12 +517,21 @@ |
|---|
| 74 | } |
|---|
| 75 | ?> |
|---|
| 76 | <p class="button-controls"> |
|---|
| 77 | - <?php submit_button( __( 'Save' ), 'primary right', 'nav-menu-locations', false, disabled( $nav_menu_selected_id, 0, false ) ); ?> |
|---|
| 78 | + <?php submit_button( __( 'Save' ), 'primary right', 'nav-menu-locations', false, wp_nav_menu_disabled_check( $nav_menu_selected_id ) ); ?> |
|---|
| 79 | <span class="spinner"></span> |
|---|
| 80 | </p> |
|---|
| 81 | <?php |
|---|
| 82 | } |
|---|
| 83 | |
|---|
| 84 | +function wp_nav_menu_disabled_check( $nav_menu_selected_id ) { |
|---|
| 85 | + global $one_theme_location_no_menus; |
|---|
| 86 | + |
|---|
| 87 | + if ( $one_theme_location_no_menus ) |
|---|
| 88 | + return false; |
|---|
| 89 | + |
|---|
| 90 | + return disabled( $nav_menu_selected_id, 0 ); |
|---|
| 91 | +} |
|---|
| 92 | + |
|---|
| 93 | /** |
|---|
| 94 | * Displays a metabox for the custom links menu item. |
|---|
| 95 | * |
|---|
| 96 | @@ -554,14 +568,14 @@ |
|---|
| 97 | |
|---|
| 98 | <p id="menu-item-name-wrap"> |
|---|
| 99 | <label class="howto" for="custom-menu-item-name"> |
|---|
| 100 | - <span><?php _e('Label'); ?></span> |
|---|
| 101 | + <span><?php _e('Link Text'); ?></span> |
|---|
| 102 | <input id="custom-menu-item-name" name="menu-item[<?php echo $_nav_menu_placeholder; ?>][menu-item-title]" type="text" class="regular-text menu-item-textbox input-with-default-title" title="<?php esc_attr_e('Menu Item'); ?>" /> |
|---|
| 103 | </label> |
|---|
| 104 | </p> |
|---|
| 105 | |
|---|
| 106 | <p class="button-controls"> |
|---|
| 107 | <span class="add-to-menu"> |
|---|
| 108 | - <input type="submit"<?php disabled( $nav_menu_selected_id, 0 ); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-custom-menu-item" id="submit-customlinkdiv" /> |
|---|
| 109 | + <input type="submit"<?php wp_nav_menu_disabled_check( $nav_menu_selected_id ); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-custom-menu-item" id="submit-customlinkdiv" /> |
|---|
| 110 | <span class="spinner"></span> |
|---|
| 111 | </span> |
|---|
| 112 | </p> |
|---|
| 113 | @@ -779,7 +793,7 @@ |
|---|
| 114 | </span> |
|---|
| 115 | |
|---|
| 116 | <span class="add-to-menu"> |
|---|
| 117 | - <input type="submit"<?php disabled( $nav_menu_selected_id, 0 ); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-post-type-menu-item" id="submit-posttype-<?php echo $post_type_name; ?>" /> |
|---|
| 118 | + <input type="submit"<?php wp_nav_menu_disabled_check( $nav_menu_selected_id ); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-post-type-menu-item" id="submit-posttype-<?php echo $post_type_name; ?>" /> |
|---|
| 119 | <span class="spinner"></span> |
|---|
| 120 | </span> |
|---|
| 121 | </p> |
|---|
| 122 | @@ -955,7 +969,7 @@ |
|---|
| 123 | </span> |
|---|
| 124 | |
|---|
| 125 | <span class="add-to-menu"> |
|---|
| 126 | - <input type="submit"<?php disabled( $nav_menu_selected_id, 0 ); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-taxonomy-menu-item" id="submit-taxonomy-<?php echo $taxonomy_name; ?>" /> |
|---|
| 127 | + <input type="submit"<?php wp_nav_menu_disabled_check( $nav_menu_selected_id ); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-taxonomy-menu-item" id="submit-taxonomy-<?php echo $taxonomy_name; ?>" /> |
|---|
| 128 | <span class="spinner"></span> |
|---|
| 129 | </span> |
|---|
| 130 | </p> |
|---|
| 131 | @@ -1084,10 +1098,10 @@ |
|---|
| 132 | // If the menu exists, get its items. |
|---|
| 133 | if ( is_nav_menu( $menu ) ) { |
|---|
| 134 | $menu_items = wp_get_nav_menu_items( $menu->term_id, array('post_status' => 'any') ); |
|---|
| 135 | - $result = '<div id="menu-instructions" class="post-body-plain'; |
|---|
| 136 | + $result = '<div id="menu-instructions" class="post-body-plain'; |
|---|
| 137 | $result .= ( ! empty($menu_items) ) ? ' menu-instructions-inactive">' : '">'; |
|---|
| 138 | - $result .= '<p>' . __('Select menu items (pages, categories, links) from the boxes at left to begin building your custom menu.') . '</p>'; |
|---|
| 139 | - $result .= '</div>'; |
|---|
| 140 | + $result .= '<p>' . __('Next, add menu items (i.e. pages, links, categories) from the column on the left.') . '</p>'; |
|---|
| 141 | + $result .= '</div>'; |
|---|
| 142 | |
|---|
| 143 | if( empty($menu_items) ) |
|---|
| 144 | return $result . ' <ul class="menu" id="menu-to-edit"> </ul>'; |
|---|
| 145 | @@ -1158,5 +1172,102 @@ |
|---|
| 146 | foreach( (array) $menu_items_to_delete as $menu_item_id ) |
|---|
| 147 | wp_delete_post( $menu_item_id, true ); |
|---|
| 148 | } |
|---|
| 149 | +add_action('admin_head-nav-menus.php', '_wp_delete_orphaned_draft_menu_items'); |
|---|
| 150 | |
|---|
| 151 | -add_action('admin_head-nav-menus.php', '_wp_delete_orphaned_draft_menu_items'); |
|---|
| 152 | +/** |
|---|
| 153 | +* Delete nav menus from the nav menu management screen |
|---|
| 154 | +* |
|---|
| 155 | +* @access private |
|---|
| 156 | +* @since 3.6 |
|---|
| 157 | +*/ |
|---|
| 158 | +function _wp_delete_nav_menu( $nav_menu_id ) { |
|---|
| 159 | + |
|---|
| 160 | + if ( ! is_nav_menu( $nav_menu_id ) ) |
|---|
| 161 | + return; |
|---|
| 162 | + |
|---|
| 163 | + $deleted_nav_menu = wp_get_nav_menu_object( $nav_menu_id ); |
|---|
| 164 | + $delete_nav_menu = wp_delete_nav_menu( $nav_menu_id ); |
|---|
| 165 | + |
|---|
| 166 | + if ( is_wp_error( $delete_nav_menu ) ) |
|---|
| 167 | + return $delete_nav_menu; |
|---|
| 168 | + |
|---|
| 169 | + // Remove this menu from any locations. |
|---|
| 170 | + $locations = get_theme_mod( 'nav_menu_locations' ); |
|---|
| 171 | + foreach ( (array) $locations as $location => $menu_id ) { |
|---|
| 172 | + if ( $menu_id == $nav_menu_id ) |
|---|
| 173 | + $locations[ $location ] = 0; |
|---|
| 174 | + } |
|---|
| 175 | + set_theme_mod( 'nav_menu_locations', $locations ); |
|---|
| 176 | + return true; |
|---|
| 177 | +} |
|---|
| 178 | + |
|---|
| 179 | +/** |
|---|
| 180 | +* Saves nav menu items |
|---|
| 181 | +* |
|---|
| 182 | +* @since 3.6 |
|---|
| 183 | +*/ |
|---|
| 184 | +function wp_nav_menu_update_menu_items ($nav_menu_selected_id, $nav_menu_selected_title) { |
|---|
| 185 | + $unsorted_menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array('orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID', 'post_status' => 'draft,publish') ); |
|---|
| 186 | + |
|---|
| 187 | + $menu_items = array(); |
|---|
| 188 | + // Index menu items by db ID |
|---|
| 189 | + foreach( $unsorted_menu_items as $_item ) |
|---|
| 190 | + $menu_items[$_item->db_id] = $_item; |
|---|
| 191 | + |
|---|
| 192 | + $post_fields = array( 'menu-item-db-id', 'menu-item-object-id', 'menu-item-object', 'menu-item-parent-id', 'menu-item-position', 'menu-item-type', 'menu-item-title', 'menu-item-url', 'menu-item-description', 'menu-item-attr-title', 'menu-item-target', 'menu-item-classes', 'menu-item-xfn' ); |
|---|
| 193 | + wp_defer_term_counting(true); |
|---|
| 194 | + // Loop through all the menu items' POST variables |
|---|
| 195 | + if ( ! empty( $_POST['menu-item-db-id'] ) ) { |
|---|
| 196 | + foreach( (array) $_POST['menu-item-db-id'] as $_key => $k ) { |
|---|
| 197 | + |
|---|
| 198 | + // Menu item title can't be blank |
|---|
| 199 | + if ( empty( $_POST['menu-item-title'][$_key] ) ) |
|---|
| 200 | + continue; |
|---|
| 201 | + |
|---|
| 202 | + $args = array(); |
|---|
| 203 | + foreach ( $post_fields as $field ) |
|---|
| 204 | + $args[$field] = isset( $_POST[$field][$_key] ) ? $_POST[$field][$_key] : ''; |
|---|
| 205 | + |
|---|
| 206 | + $menu_item_db_id = wp_update_nav_menu_item( $nav_menu_selected_id, ( $_POST['menu-item-db-id'][$_key] != $_key ? 0 : $_key ), $args ); |
|---|
| 207 | + |
|---|
| 208 | + if ( is_wp_error( $menu_item_db_id ) ) |
|---|
| 209 | + $messages[] = '<div id="message" class="error"><p>' . $menu_item_db_id->get_error_message() . '</p></div>'; |
|---|
| 210 | + elseif ( isset( $menu_items[$menu_item_db_id] ) ) |
|---|
| 211 | + unset( $menu_items[$menu_item_db_id] ); |
|---|
| 212 | + } |
|---|
| 213 | + } |
|---|
| 214 | + |
|---|
| 215 | + // Remove menu items from the menu that weren't in $_POST |
|---|
| 216 | + if ( ! empty( $menu_items ) ) { |
|---|
| 217 | + foreach ( array_keys( $menu_items ) as $menu_item_id ) { |
|---|
| 218 | + if ( is_nav_menu_item( $menu_item_id ) ) { |
|---|
| 219 | + wp_delete_post( $menu_item_id ); |
|---|
| 220 | + } |
|---|
| 221 | + } |
|---|
| 222 | + } |
|---|
| 223 | + |
|---|
| 224 | + // Store 'auto-add' pages. |
|---|
| 225 | + $auto_add = ! empty( $_POST['auto-add-pages'] ); |
|---|
| 226 | + $nav_menu_option = (array) get_option( 'nav_menu_options' ); |
|---|
| 227 | + if ( ! isset( $nav_menu_option['auto_add'] ) ) |
|---|
| 228 | + $nav_menu_option['auto_add'] = array(); |
|---|
| 229 | + if ( $auto_add ) { |
|---|
| 230 | + if ( ! in_array( $nav_menu_selected_id, $nav_menu_option['auto_add'] ) ) |
|---|
| 231 | + $nav_menu_option['auto_add'][] = $nav_menu_selected_id; |
|---|
| 232 | + } else { |
|---|
| 233 | + if ( false !== ( $key = array_search( $nav_menu_selected_id, $nav_menu_option['auto_add'] ) ) ) |
|---|
| 234 | + unset( $nav_menu_option['auto_add'][$key] ); |
|---|
| 235 | + } |
|---|
| 236 | + // Remove nonexistent/deleted menus |
|---|
| 237 | + $nav_menu_option['auto_add'] = array_intersect( $nav_menu_option['auto_add'], wp_get_nav_menus( array( 'fields' => 'ids' ) ) ); |
|---|
| 238 | + update_option( 'nav_menu_options', $nav_menu_option ); |
|---|
| 239 | + |
|---|
| 240 | + wp_defer_term_counting(false); |
|---|
| 241 | + |
|---|
| 242 | + do_action( 'wp_update_nav_menu', $nav_menu_selected_id ); |
|---|
| 243 | + |
|---|
| 244 | + $messages[] = '<div id="message" class="updated"><p>' . sprintf( __('<strong>%1$s</strong> has been updated.'), $nav_menu_selected_title ) . '</p></div>'; |
|---|
| 245 | + unset( $menu_items, $unsorted_menu_items ); |
|---|
| 246 | + |
|---|
| 247 | + return $messages; |
|---|
| 248 | +} |
|---|
| 249 | \ No newline at end of file |
|---|
| 250 | Index: wp-admin/js/nav-menu.js |
|---|
| 251 | =================================================================== |
|---|
| 252 | --- wp-admin/js/nav-menu.js (revision 23389) |
|---|
| 253 | +++ wp-admin/js/nav-menu.js (working copy) |
|---|
| 254 | @@ -45,9 +45,15 @@ |
|---|
| 255 | if( api.menuList.length ) // If no menu, we're in the + tab. |
|---|
| 256 | this.initSortables(); |
|---|
| 257 | |
|---|
| 258 | + if( oneThemeLocationNoMenus ) |
|---|
| 259 | + $('#posttype-page').addSelectedToMenu( api.addMenuItemToBottom ); |
|---|
| 260 | + |
|---|
| 261 | this.initToggles(); |
|---|
| 262 | - |
|---|
| 263 | - this.initTabManager(); |
|---|
| 264 | + |
|---|
| 265 | + this.messageFadeIn(); |
|---|
| 266 | + |
|---|
| 267 | + this.initSelectMenuDropdown(); |
|---|
| 268 | + this.initAccessibility(); |
|---|
| 269 | }, |
|---|
| 270 | |
|---|
| 271 | jQueryExtensions : function() { |
|---|
| 272 | @@ -84,18 +90,53 @@ |
|---|
| 273 | }); |
|---|
| 274 | return result; |
|---|
| 275 | }, |
|---|
| 276 | + shiftHorizontally : function(dir) { |
|---|
| 277 | + return this.each(function(){ |
|---|
| 278 | + var t = $(this), |
|---|
| 279 | + depth = t.menuItemDepth(), |
|---|
| 280 | + newDepth = depth + dir; |
|---|
| 281 | + |
|---|
| 282 | + // Change .menu-item-depth-n class |
|---|
| 283 | + t.moveHorizontally(newDepth, depth); |
|---|
| 284 | + }); |
|---|
| 285 | + }, |
|---|
| 286 | + moveHorizontally : function(newDepth, depth) { |
|---|
| 287 | + return this.each(function(){ |
|---|
| 288 | + var t = $(this), |
|---|
| 289 | + children = t.childMenuItems(), |
|---|
| 290 | + diff = newDepth - depth, |
|---|
| 291 | + subItemText = t.find('.is-submenu'); |
|---|
| 292 | + |
|---|
| 293 | + // Change .menu-item-depth-n class |
|---|
| 294 | + t.updateDepthClass(newDepth, depth).updateParentMenuItemDBId(); |
|---|
| 295 | + |
|---|
| 296 | + // If it has children, move those too |
|---|
| 297 | + if (children) { |
|---|
| 298 | + children.each(function( index ) { |
|---|
| 299 | + var thisDepth = $(this).menuItemDepth(), |
|---|
| 300 | + newDepth = thisDepth + diff; |
|---|
| 301 | + $(this).updateDepthClass(newDepth, thisDepth).updateParentMenuItemDBId(); |
|---|
| 302 | + }); |
|---|
| 303 | + } |
|---|
| 304 | + |
|---|
| 305 | + // Show "Sub item" helper text |
|---|
| 306 | + if (0 === newDepth) |
|---|
| 307 | + subItemText.hide(); |
|---|
| 308 | + else |
|---|
| 309 | + subItemText.show(); |
|---|
| 310 | + }); |
|---|
| 311 | + }, |
|---|
| 312 | updateParentMenuItemDBId : function() { |
|---|
| 313 | return this.each(function(){ |
|---|
| 314 | var item = $(this), |
|---|
| 315 | input = item.find('.menu-item-data-parent-id'), |
|---|
| 316 | - depth = item.menuItemDepth(), |
|---|
| 317 | - parent = item.prev(); |
|---|
| 318 | + depth = parseInt(item.menuItemDepth()), |
|---|
| 319 | + parentDepth = depth - 1; |
|---|
| 320 | + parent = item.prevAll('.menu-item-depth-' + parentDepth).first(); |
|---|
| 321 | |
|---|
| 322 | if( depth == 0 ) { // Item is on the top level, has no parent |
|---|
| 323 | input.val(0); |
|---|
| 324 | } else { // Find the parent item, and retrieve its object id. |
|---|
| 325 | - while( ! parent[0] || ! parent[0].className || -1 == parent[0].className.indexOf('menu-item') || ( parent.menuItemDepth() != depth - 1 ) ) |
|---|
| 326 | - parent = parent.prev(); |
|---|
| 327 | input.val( parent.find('.menu-item-data-db-id').val() ); |
|---|
| 328 | } |
|---|
| 329 | }); |
|---|
| 330 | @@ -120,7 +161,7 @@ |
|---|
| 331 | |
|---|
| 332 | return this.each(function() { |
|---|
| 333 | var t = $(this), menuItems = {}, |
|---|
| 334 | - checkboxes = t.find('.tabs-panel-active .categorychecklist li input:checked'), |
|---|
| 335 | + checkboxes = ( oneThemeLocationNoMenus && 0 == t.find('.tabs-panel-active .categorychecklist li input:checked').length ) ? t.find('#page-all li input[type="checkbox"]') : t.find('.tabs-panel-active .categorychecklist li input:checked'), |
|---|
| 336 | re = new RegExp('menu-item\\[(\[^\\]\]*)'); |
|---|
| 337 | |
|---|
| 338 | processMethod = processMethod || api.addMenuItemToBottom; |
|---|
| 339 | @@ -222,7 +263,140 @@ |
|---|
| 340 | } |
|---|
| 341 | }); |
|---|
| 342 | }, |
|---|
| 343 | + |
|---|
| 344 | + initSelectMenuDropdown : function () { |
|---|
| 345 | + var menuSelector = $('.manage-menus select'); |
|---|
| 346 | |
|---|
| 347 | + menuSelector.on('change', function () { |
|---|
| 348 | + var url = $(this).val(); |
|---|
| 349 | + |
|---|
| 350 | + if (url && '--' !== url) { |
|---|
| 351 | + $('.menu-selector .spinner').show(); |
|---|
| 352 | + window.location = url; |
|---|
| 353 | + } |
|---|
| 354 | + }); |
|---|
| 355 | + }, |
|---|
| 356 | + |
|---|
| 357 | + initAccessibility : function() { |
|---|
| 358 | + $('.item-edit').on('focus', function () { |
|---|
| 359 | + $(this).on('keydown', function (e) { |
|---|
| 360 | + |
|---|
| 361 | + // Bail if it's not an arrow key |
|---|
| 362 | + if (e.which !== 37 && e.which !== 38 && e.which !== 39 && e.which !== 40) |
|---|
| 363 | + return; |
|---|
| 364 | + |
|---|
| 365 | + // Avoid multiple keydown events |
|---|
| 366 | + $(this).off('keydown'); |
|---|
| 367 | + |
|---|
| 368 | + var menuItems = $('#menu-to-edit li'); |
|---|
| 369 | + menuItemsCount = menuItems.length, |
|---|
| 370 | + thisItem = $(this).parents('li.menu-item'), |
|---|
| 371 | + thisItemChildren = thisItem.childMenuItems(), |
|---|
| 372 | + thisItemData = thisItem.getItemData(), |
|---|
| 373 | + thisItemDepth = parseInt(thisItem.menuItemDepth()), |
|---|
| 374 | + thisItemPosition = parseInt(thisItem.index()), |
|---|
| 375 | + nextItem = thisItem.next(), |
|---|
| 376 | + nextItemChildren = nextItem.childMenuItems(), |
|---|
| 377 | + nextItemDepth = parseInt(nextItem.menuItemDepth()) + 1, |
|---|
| 378 | + prevItem = thisItem.prev(), |
|---|
| 379 | + prevItemDepth = parseInt(prevItem.menuItemDepth()), |
|---|
| 380 | + prevItemId = prevItem.getItemData()['menu-item-db-id']; |
|---|
| 381 | + |
|---|
| 382 | + // Bail if there is only one menu item |
|---|
| 383 | + if (1 === menuItemsCount) |
|---|
| 384 | + return; |
|---|
| 385 | + |
|---|
| 386 | + // If RTL, swap left/right arrows |
|---|
| 387 | + var arrows = { '38' : 'up', '40' : 'down', '37' : 'left', '39' : 'right' }; |
|---|
| 388 | + if ($('body').hasClass('rtl')) |
|---|
| 389 | + arrows = { '38' : 'up', '40' : 'down', '39' : 'left', '37' : 'right' }; |
|---|
| 390 | + |
|---|
| 391 | + switch (arrows[e.which]) { |
|---|
| 392 | + case 'up': |
|---|
| 393 | + var newItemPosition = thisItemPosition - 1; |
|---|
| 394 | + |
|---|
| 395 | + // Already at top |
|---|
| 396 | + if (0 === thisItemPosition) |
|---|
| 397 | + break; |
|---|
| 398 | + |
|---|
| 399 | + // If a sub item is moved to top, shift it to 0 depth |
|---|
| 400 | + if (0 === newItemPosition && 0 !== thisItemDepth) |
|---|
| 401 | + thisItem.moveHorizontally(0, thisItemDepth); |
|---|
| 402 | + |
|---|
| 403 | + // If prev item is sub item, shift to match depth |
|---|
| 404 | + if (0 !== prevItemDepth) |
|---|
| 405 | + thisItem.moveHorizontally(prevItemDepth, thisItemDepth); |
|---|
| 406 | + |
|---|
| 407 | + // Does this item have sub items? |
|---|
| 408 | + if (thisItemChildren) { |
|---|
| 409 | + var items = thisItem.add(thisItemChildren); |
|---|
| 410 | + // Move the entire block |
|---|
| 411 | + items.detach().insertBefore(menuItems.eq(newItemPosition)); |
|---|
| 412 | + } else { |
|---|
| 413 | + thisItem.detach().insertBefore(menuItems.eq(newItemPosition)); |
|---|
| 414 | + } |
|---|
| 415 | + break; |
|---|
| 416 | + case 'down': |
|---|
| 417 | + // Does this item have sub items? |
|---|
| 418 | + if (thisItemChildren) { |
|---|
| 419 | + var items = thisItem.add(thisItemChildren), |
|---|
| 420 | + nextItem = menuItems.eq(items.length + thisItemPosition), |
|---|
| 421 | + nextItemChildren = 0 !== nextItem.childMenuItems().length; |
|---|
| 422 | + |
|---|
| 423 | + if (nextItemChildren) { |
|---|
| 424 | + var newDepth = parseInt(nextItem.menuItemDepth()) + 1; |
|---|
| 425 | + thisItem.moveHorizontally(newDepth, thisItemDepth); |
|---|
| 426 | + } |
|---|
| 427 | + |
|---|
| 428 | + // Have we reached the bottom? |
|---|
| 429 | + if (menuItemsCount === thisItemPosition + items.length) |
|---|
| 430 | + break; |
|---|
| 431 | + |
|---|
| 432 | + items.detach().insertAfter(menuItems.eq(thisItemPosition + items.length)); |
|---|
| 433 | + } else { |
|---|
| 434 | + // If next item has sub items, shift depth |
|---|
| 435 | + if (0 !== nextItemChildren.length) |
|---|
| 436 | + thisItem.moveHorizontally(nextItemDepth, thisItemDepth); |
|---|
| 437 | + |
|---|
| 438 | + // Have we reached the bottom |
|---|
| 439 | + if (menuItemsCount === thisItemPosition + 1) |
|---|
| 440 | + break; |
|---|
| 441 | + thisItem.detach().insertAfter(menuItems.eq(thisItemPosition + 1)); |
|---|
| 442 | + } |
|---|
| 443 | + break; |
|---|
| 444 | + case 'left': |
|---|
| 445 | + // As far left as possible |
|---|
| 446 | + if (0 === thisItemDepth) |
|---|
| 447 | + break; |
|---|
| 448 | + thisItem.shiftHorizontally(-1); |
|---|
| 449 | + break; |
|---|
| 450 | + case 'right': |
|---|
| 451 | + // Can't be sub item at top |
|---|
| 452 | + if (0 === thisItemPosition) |
|---|
| 453 | + break; |
|---|
| 454 | + // Already sub item of prevItem |
|---|
| 455 | + if (thisItemData['menu-item-parent-id'] === prevItemId) |
|---|
| 456 | + break; |
|---|
| 457 | + thisItem.shiftHorizontally(1); |
|---|
| 458 | + break; |
|---|
| 459 | + } |
|---|
| 460 | + api.registerChange(); |
|---|
| 461 | + // Put focus back on same menu item |
|---|
| 462 | + $('#edit-' + thisItemData['menu-item-db-id']).focus(); |
|---|
| 463 | + return false; |
|---|
| 464 | + }); |
|---|
| 465 | + }).blur(function () { |
|---|
| 466 | + $(this).off('keydown'); |
|---|
| 467 | + }); |
|---|
| 468 | + }, |
|---|
| 469 | + |
|---|
| 470 | + messageFadeIn : function() { |
|---|
| 471 | + var messages = $('#message'); |
|---|
| 472 | + |
|---|
| 473 | + // Visual change when users save menus multiple times in a row |
|---|
| 474 | + messages.slideDown('slow'); |
|---|
| 475 | + }, |
|---|
| 476 | + |
|---|
| 477 | initToggles : function() { |
|---|
| 478 | // init postboxes |
|---|
| 479 | postboxes.add_postbox_toggles('nav-menus'); |
|---|
| 480 | @@ -245,6 +419,9 @@ |
|---|
| 481 | menuEdge = api.menuList.offset().left, |
|---|
| 482 | body = $('body'), maxChildDepth, |
|---|
| 483 | menuMaxDepth = initialMenuMaxDepth(); |
|---|
| 484 | + |
|---|
| 485 | + if( 0 != $('#menu-to-edit li').length ) |
|---|
| 486 | + $('.drag-instructions').show(); |
|---|
| 487 | |
|---|
| 488 | // Use the right edge if RTL. |
|---|
| 489 | menuEdge += api.isRTL ? api.menuList.width() : 0; |
|---|
| 490 | @@ -307,6 +484,13 @@ |
|---|
| 491 | |
|---|
| 492 | // Return child elements to the list |
|---|
| 493 | children = transport.children().insertAfter(ui.item); |
|---|
| 494 | + |
|---|
| 495 | + // Add "sub menu" description |
|---|
| 496 | + var subMenuTitle = ui.item.find('.item-title .is-submenu'); |
|---|
| 497 | + if (0 < currentDepth) |
|---|
| 498 | + subMenuTitle.show(); |
|---|
| 499 | + else |
|---|
| 500 | + subMenuTitle.hide(); |
|---|
| 501 | |
|---|
| 502 | // Update depth classes |
|---|
| 503 | if( depthChange != 0 ) { |
|---|
| 504 | @@ -327,9 +511,6 @@ |
|---|
| 505 | ui.item[0].style.left = 'auto'; |
|---|
| 506 | ui.item[0].style.right = 0; |
|---|
| 507 | } |
|---|
| 508 | - |
|---|
| 509 | - // The width of the tab bar might have changed. Just in case. |
|---|
| 510 | - api.refreshMenuTabs( true ); |
|---|
| 511 | }, |
|---|
| 512 | change: function(e, ui) { |
|---|
| 513 | // Make sure the placeholder is inside the menu. |
|---|
| 514 | @@ -461,6 +642,8 @@ |
|---|
| 515 | if( '' == $t.val() ) |
|---|
| 516 | $t.addClass( name ).val( $t.data(name) ); |
|---|
| 517 | }); |
|---|
| 518 | + |
|---|
| 519 | + $('.blank-slate .input-with-default-title').focus(); |
|---|
| 520 | }, |
|---|
| 521 | |
|---|
| 522 | attachThemeLocationsListeners : function() { |
|---|
| 523 | @@ -572,6 +755,9 @@ |
|---|
| 524 | $.post( ajaxurl, params, function(menuMarkup) { |
|---|
| 525 | var ins = $('#menu-instructions'); |
|---|
| 526 | processMethod(menuMarkup, params); |
|---|
| 527 | + // Make it stand out a bit more visually, by adding a fadeIn |
|---|
| 528 | + $('li.pending').hide().fadeIn('slow'); |
|---|
| 529 | + $('.drag-instructions').show(); |
|---|
| 530 | if( ! ins.hasClass('menu-instructions-inactive') && ins.siblings().length ) |
|---|
| 531 | ins.addClass('menu-instructions-inactive'); |
|---|
| 532 | callback(); |
|---|
| 533 | @@ -604,7 +790,7 @@ |
|---|
| 534 | }; |
|---|
| 535 | } else { |
|---|
| 536 | // Make the post boxes read-only, as they can't be used yet |
|---|
| 537 | - $('#menu-settings-column').find('input,select').prop('disabled', true).end().find('a').attr('href', '#').unbind('click'); |
|---|
| 538 | + $('#menu-settings-column').find('input,select').end().find('a').attr('href', '#').unbind('click'); |
|---|
| 539 | } |
|---|
| 540 | }, |
|---|
| 541 | |
|---|
| 542 | @@ -688,139 +874,6 @@ |
|---|
| 543 | }); |
|---|
| 544 | }, |
|---|
| 545 | |
|---|
| 546 | - initTabManager : function() { |
|---|
| 547 | - var fixed = $('.nav-tabs-wrapper'), |
|---|
| 548 | - fluid = fixed.children('.nav-tabs'), |
|---|
| 549 | - active = fluid.children('.nav-tab-active'), |
|---|
| 550 | - tabs = fluid.children('.nav-tab'), |
|---|
| 551 | - tabsWidth = 0, |
|---|
| 552 | - fixedRight, fixedLeft, |
|---|
| 553 | - arrowLeft, arrowRight, resizeTimer, css = {}, |
|---|
| 554 | - marginFluid = api.isRTL ? 'margin-right' : 'margin-left', |
|---|
| 555 | - marginFixed = api.isRTL ? 'margin-left' : 'margin-right', |
|---|
| 556 | - msPerPx = 2; |
|---|
| 557 | - |
|---|
| 558 | - /** |
|---|
| 559 | - * Refreshes the menu tabs. |
|---|
| 560 | - * Will show and hide arrows where necessary. |
|---|
| 561 | - * Scrolls to the active tab by default. |
|---|
| 562 | - * |
|---|
| 563 | - * @param savePosition {boolean} Optional. Prevents scrolling so |
|---|
| 564 | - * that the current position is maintained. Default false. |
|---|
| 565 | - **/ |
|---|
| 566 | - api.refreshMenuTabs = function( savePosition ) { |
|---|
| 567 | - var fixedWidth = fixed.width(), |
|---|
| 568 | - margin = 0, css = {}; |
|---|
| 569 | - fixedLeft = fixed.offset().left; |
|---|
| 570 | - fixedRight = fixedLeft + fixedWidth; |
|---|
| 571 | - |
|---|
| 572 | - if( !savePosition ) |
|---|
| 573 | - active.makeTabVisible(); |
|---|
| 574 | - |
|---|
| 575 | - // Prevent space from building up next to the last tab if there's more to show |
|---|
| 576 | - if( tabs.last().isTabVisible() ) { |
|---|
| 577 | - margin = fixed.width() - tabsWidth; |
|---|
| 578 | - margin = margin > 0 ? 0 : margin; |
|---|
| 579 | - css[marginFluid] = margin + 'px'; |
|---|
| 580 | - fluid.animate( css, 100, "linear" ); |
|---|
| 581 | - } |
|---|
| 582 | - |
|---|
| 583 | - // Show the arrows only when necessary |
|---|
| 584 | - if( fixedWidth > tabsWidth ) |
|---|
| 585 | - arrowLeft.add( arrowRight ).hide(); |
|---|
| 586 | - else |
|---|
| 587 | - arrowLeft.add( arrowRight ).show(); |
|---|
| 588 | - } |
|---|
| 589 | - |
|---|
| 590 | - $.fn.extend({ |
|---|
| 591 | - makeTabVisible : function() { |
|---|
| 592 | - var t = this.eq(0), left, right, css = {}, shift = 0; |
|---|
| 593 | - |
|---|
| 594 | - if( ! t.length ) return this; |
|---|
| 595 | - |
|---|
| 596 | - left = t.offset().left; |
|---|
| 597 | - right = left + t.outerWidth(); |
|---|
| 598 | - |
|---|
| 599 | - if( right > fixedRight ) |
|---|
| 600 | - shift = fixedRight - right; |
|---|
| 601 | - else if ( left < fixedLeft ) |
|---|
| 602 | - shift = fixedLeft - left; |
|---|
| 603 | - |
|---|
| 604 | - if( ! shift ) return this; |
|---|
| 605 | - |
|---|
| 606 | - css[marginFluid] = "+=" + api.negateIfRTL * shift + 'px'; |
|---|
| 607 | - fluid.animate( css, Math.abs( shift ) * msPerPx, "linear" ); |
|---|
| 608 | - return this; |
|---|
| 609 | - }, |
|---|
| 610 | - isTabVisible : function() { |
|---|
| 611 | - var t = this.eq(0), |
|---|
| 612 | - left = t.offset().left, |
|---|
| 613 | - right = left + t.outerWidth(); |
|---|
| 614 | - return ( right <= fixedRight && left >= fixedLeft ) ? true : false; |
|---|
| 615 | - } |
|---|
| 616 | - }); |
|---|
| 617 | - |
|---|
| 618 | - // Find the width of all tabs |
|---|
| 619 | - tabs.each(function(){ |
|---|
| 620 | - tabsWidth += $(this).outerWidth(true); |
|---|
| 621 | - }); |
|---|
| 622 | - |
|---|
| 623 | - // Set up fixed margin for overflow, unset padding |
|---|
| 624 | - css['padding'] = 0; |
|---|
| 625 | - css[marginFixed] = (-1 * tabsWidth) + 'px'; |
|---|
| 626 | - fluid.css( css ); |
|---|
| 627 | - |
|---|
| 628 | - // Build tab navigation |
|---|
| 629 | - arrowLeft = $('<div class="nav-tabs-arrow nav-tabs-arrow-left"><a>«</a></div>'); |
|---|
| 630 | - arrowRight = $('<div class="nav-tabs-arrow nav-tabs-arrow-right"><a>»</a></div>'); |
|---|
| 631 | - // Attach to the document |
|---|
| 632 | - fixed.wrap('<div class="nav-tabs-nav"/>').parent().prepend( arrowLeft ).append( arrowRight ); |
|---|
| 633 | - |
|---|
| 634 | - // Set the menu tabs |
|---|
| 635 | - api.refreshMenuTabs(); |
|---|
| 636 | - // Make sure the tabs reset on resize |
|---|
| 637 | - $(window).resize(function() { |
|---|
| 638 | - if( resizeTimer ) clearTimeout(resizeTimer); |
|---|
| 639 | - resizeTimer = setTimeout( api.refreshMenuTabs, 200); |
|---|
| 640 | - }); |
|---|
| 641 | - |
|---|
| 642 | - // Build arrow functions |
|---|
| 643 | - $.each([{ |
|---|
| 644 | - arrow : arrowLeft, |
|---|
| 645 | - next : "next", |
|---|
| 646 | - last : "first", |
|---|
| 647 | - operator : "+=" |
|---|
| 648 | - },{ |
|---|
| 649 | - arrow : arrowRight, |
|---|
| 650 | - next : "prev", |
|---|
| 651 | - last : "last", |
|---|
| 652 | - operator : "-=" |
|---|
| 653 | - }], function(){ |
|---|
| 654 | - var that = this; |
|---|
| 655 | - this.arrow.mousedown(function(){ |
|---|
| 656 | - var marginFluidVal = Math.abs( parseInt( fluid.css(marginFluid) ) ), |
|---|
| 657 | - shift = marginFluidVal, |
|---|
| 658 | - css = {}; |
|---|
| 659 | - |
|---|
| 660 | - if( "-=" == that.operator ) |
|---|
| 661 | - shift = Math.abs( tabsWidth - fixed.width() ) - marginFluidVal; |
|---|
| 662 | - |
|---|
| 663 | - if( ! shift ) return; |
|---|
| 664 | - |
|---|
| 665 | - css[marginFluid] = that.operator + shift + 'px'; |
|---|
| 666 | - fluid.animate( css, shift * msPerPx, "linear" ); |
|---|
| 667 | - }).mouseup(function(){ |
|---|
| 668 | - var tab, next; |
|---|
| 669 | - fluid.stop(true); |
|---|
| 670 | - tab = tabs[that.last](); |
|---|
| 671 | - while( (next = tab[that.next]()) && next.length && ! next.isTabVisible() ) { |
|---|
| 672 | - tab = next; |
|---|
| 673 | - } |
|---|
| 674 | - tab.makeTabVisible(); |
|---|
| 675 | - }); |
|---|
| 676 | - }); |
|---|
| 677 | - }, |
|---|
| 678 | - |
|---|
| 679 | eventOnClickEditLink : function(clickedEl) { |
|---|
| 680 | var settings, item, |
|---|
| 681 | matchedSection = /#(.*)$/.exec(clickedEl.href); |
|---|
| 682 | @@ -945,8 +998,10 @@ |
|---|
| 683 | var ins = $('#menu-instructions'); |
|---|
| 684 | el.remove(); |
|---|
| 685 | children.shiftDepthClass(-1).updateParentMenuItemDBId(); |
|---|
| 686 | - if( ! ins.siblings().length ) |
|---|
| 687 | + if( 0 == $('#menu-to-edit li').length ) { |
|---|
| 688 | + $('.drag-instructions').hide(); |
|---|
| 689 | ins.removeClass('menu-instructions-inactive'); |
|---|
| 690 | + } |
|---|
| 691 | }); |
|---|
| 692 | }, |
|---|
| 693 | |
|---|
| 694 | Index: wp-admin/nav-menus.php |
|---|
| 695 | =================================================================== |
|---|
| 696 | --- wp-admin/nav-menus.php (revision 23389) |
|---|
| 697 | +++ wp-admin/nav-menus.php (working copy) |
|---|
| 698 | @@ -221,50 +221,61 @@ |
|---|
| 699 | if ( is_nav_menu_item( $menu_item_id ) && wp_delete_post( $menu_item_id, true ) ) |
|---|
| 700 | $messages[] = '<div id="message" class="updated"><p>' . __('The menu item has been successfully deleted.') . '</p></div>'; |
|---|
| 701 | break; |
|---|
| 702 | + |
|---|
| 703 | case 'delete': |
|---|
| 704 | check_admin_referer( 'delete-nav_menu-' . $nav_menu_selected_id ); |
|---|
| 705 | - |
|---|
| 706 | if ( is_nav_menu( $nav_menu_selected_id ) ) { |
|---|
| 707 | - $deleted_nav_menu = wp_get_nav_menu_object( $nav_menu_selected_id ); |
|---|
| 708 | - $delete_nav_menu = wp_delete_nav_menu( $nav_menu_selected_id ); |
|---|
| 709 | - |
|---|
| 710 | - if ( is_wp_error($delete_nav_menu) ) { |
|---|
| 711 | - $messages[] = '<div id="message" class="error"><p>' . $delete_nav_menu->get_error_message() . '</p></div>'; |
|---|
| 712 | - } else { |
|---|
| 713 | - // Remove this menu from any locations. |
|---|
| 714 | - $locations = get_theme_mod( 'nav_menu_locations' ); |
|---|
| 715 | - foreach ( (array) $locations as $location => $menu_id ) { |
|---|
| 716 | - if ( $menu_id == $nav_menu_selected_id ) |
|---|
| 717 | - $locations[ $location ] = 0; |
|---|
| 718 | - } |
|---|
| 719 | - set_theme_mod( 'nav_menu_locations', $locations ); |
|---|
| 720 | - $messages[] = '<div id="message" class="updated"><p>' . __('The menu has been successfully deleted.') . '</p></div>'; |
|---|
| 721 | - // Select the next available menu |
|---|
| 722 | - $nav_menu_selected_id = 0; |
|---|
| 723 | - $_nav_menus = wp_get_nav_menus( array('orderby' => 'name') ); |
|---|
| 724 | - foreach( $_nav_menus as $index => $_nav_menu ) { |
|---|
| 725 | - if ( strcmp( $_nav_menu->name, $deleted_nav_menu->name ) >= 0 |
|---|
| 726 | - || $index == count( $_nav_menus ) - 1 ) { |
|---|
| 727 | - $nav_menu_selected_id = $_nav_menu->term_id; |
|---|
| 728 | - break; |
|---|
| 729 | - } |
|---|
| 730 | - } |
|---|
| 731 | - } |
|---|
| 732 | - unset( $delete_nav_menu, $deleted_nav_menu, $_nav_menus ); |
|---|
| 733 | + $deletion = _wp_delete_nav_menu( $nav_menu_selected_id ); |
|---|
| 734 | } else { |
|---|
| 735 | // Reset the selected menu |
|---|
| 736 | $nav_menu_selected_id = 0; |
|---|
| 737 | unset( $_REQUEST['menu'] ); |
|---|
| 738 | } |
|---|
| 739 | + |
|---|
| 740 | + if ( ! isset( $deletion ) ) |
|---|
| 741 | + break; |
|---|
| 742 | + |
|---|
| 743 | + if ( is_wp_error( $deletion ) ) |
|---|
| 744 | + $messages[] = '<div id="message" class="error"><p>' . $deletion->get_error_message() . '</p></div>'; |
|---|
| 745 | + else |
|---|
| 746 | + $messages[] = '<div id="message" class="updated"><p>' . __( 'The menu has been successfully deleted.' ) . '</p></div>'; |
|---|
| 747 | break; |
|---|
| 748 | |
|---|
| 749 | + case 'delete_menus': |
|---|
| 750 | + check_admin_referer( 'nav_menus_bulk_actions' ); |
|---|
| 751 | + foreach ( $_REQUEST['delete_menus'] as $menu_id_to_delete ) { |
|---|
| 752 | + if ( ! is_nav_menu( $menu_id_to_delete ) ) |
|---|
| 753 | + continue; |
|---|
| 754 | + |
|---|
| 755 | + $deletion = _wp_delete_nav_menu( $menu_id_to_delete ); |
|---|
| 756 | + if ( is_wp_error( $deletion ) ) { |
|---|
| 757 | + $messages[] = '<div id="message" class="error"><p>' . $deletion->get_error_message() . '</p></div>'; |
|---|
| 758 | + $deletion_error = true; |
|---|
| 759 | + } |
|---|
| 760 | + } |
|---|
| 761 | + |
|---|
| 762 | + if ( empty( $deletion_error ) ) |
|---|
| 763 | + $messages[] = '<div id="message" class="updated"><p>' . __( 'Selected menus have been successfully deleted.' ) . '</p></div>'; |
|---|
| 764 | + break; |
|---|
| 765 | + |
|---|
| 766 | case 'update': |
|---|
| 767 | check_admin_referer( 'update-nav_menu', 'update-nav-menu-nonce' ); |
|---|
| 768 | |
|---|
| 769 | // Update menu theme locations |
|---|
| 770 | - if ( isset( $_POST['menu-locations'] ) ) |
|---|
| 771 | + if ( isset( $_POST['menu-locations'] ) ) { |
|---|
| 772 | set_theme_mod( 'nav_menu_locations', array_map( 'absint', $_POST['menu-locations'] ) ); |
|---|
| 773 | + } else { |
|---|
| 774 | + // remove menu locations that have been unchecked |
|---|
| 775 | + $locations = get_registered_nav_menus(); |
|---|
| 776 | + $menu_locations = get_nav_menu_locations(); |
|---|
| 777 | + foreach ( $locations as $location => $description ) { |
|---|
| 778 | + if ( isset( $menu_locations[ $location ] ) && $menu_locations[ $location ] == $nav_menu_selected_id ) |
|---|
| 779 | + unset( $menu_locations[ $location ] ); |
|---|
| 780 | + } |
|---|
| 781 | + set_theme_mod( 'nav_menu_locations', array_map( 'absint', (array) $menu_locations ) ); |
|---|
| 782 | + } |
|---|
| 783 | |
|---|
| 784 | + |
|---|
| 785 | // Add Menu |
|---|
| 786 | if ( 0 == $nav_menu_selected_id ) { |
|---|
| 787 | $new_menu_title = trim( esc_html( $_POST['menu-name'] ) ); |
|---|
| 788 | @@ -278,7 +289,20 @@ |
|---|
| 789 | $_menu_object = wp_get_nav_menu_object( $_nav_menu_selected_id ); |
|---|
| 790 | $nav_menu_selected_id = $_nav_menu_selected_id; |
|---|
| 791 | $nav_menu_selected_title = $_menu_object->name; |
|---|
| 792 | - $messages[] = '<div id="message" class="updated"><p>' . sprintf( __('The <strong>%s</strong> menu has been successfully created.'), $nav_menu_selected_title ) . '</p></div>'; |
|---|
| 793 | + if ( isset( $_REQUEST['menu-item'] ) ) |
|---|
| 794 | + wp_save_nav_menu_items( $nav_menu_selected_id, $_REQUEST['menu-item'] ); |
|---|
| 795 | + if ( isset( $_REQUEST['zero-menu-state'] ) ) { |
|---|
| 796 | + // If there are menu items, add them |
|---|
| 797 | + wp_nav_menu_update_menu_items( $nav_menu_selected_id, $nav_menu_selected_title ); |
|---|
| 798 | + // Auto-save nav_menu_locations |
|---|
| 799 | + $locations = get_theme_mod( 'nav_menu_locations' ); |
|---|
| 800 | + foreach ( (array) $locations as $location => $menu_id ) { |
|---|
| 801 | + $locations[ $location ] = $nav_menu_selected_id; |
|---|
| 802 | + break; // There should only be 1 |
|---|
| 803 | + } |
|---|
| 804 | + set_theme_mod( 'nav_menu_locations', $locations ); |
|---|
| 805 | + } |
|---|
| 806 | + $messages[] = '<div id="message" class="updated"><p>' . sprintf( __('<strong>%s</strong> has been created.'), $nav_menu_selected_title ) . '</p></div>'; |
|---|
| 807 | } |
|---|
| 808 | } else { |
|---|
| 809 | $messages[] = '<div id="message" class="error"><p>' . __('Please enter a valid menu name.') . '</p></div>'; |
|---|
| 810 | @@ -309,66 +333,7 @@ |
|---|
| 811 | // Update menu items |
|---|
| 812 | |
|---|
| 813 | if ( ! is_wp_error( $_menu_object ) ) { |
|---|
| 814 | - $unsorted_menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array('orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID', 'post_status' => 'draft,publish') ); |
|---|
| 815 | - $menu_items = array(); |
|---|
| 816 | - // Index menu items by db ID |
|---|
| 817 | - foreach( $unsorted_menu_items as $_item ) |
|---|
| 818 | - $menu_items[$_item->db_id] = $_item; |
|---|
| 819 | - |
|---|
| 820 | - $post_fields = array( 'menu-item-db-id', 'menu-item-object-id', 'menu-item-object', 'menu-item-parent-id', 'menu-item-position', 'menu-item-type', 'menu-item-title', 'menu-item-url', 'menu-item-description', 'menu-item-attr-title', 'menu-item-target', 'menu-item-classes', 'menu-item-xfn' ); |
|---|
| 821 | - wp_defer_term_counting(true); |
|---|
| 822 | - // Loop through all the menu items' POST variables |
|---|
| 823 | - if ( ! empty( $_POST['menu-item-db-id'] ) ) { |
|---|
| 824 | - foreach( (array) $_POST['menu-item-db-id'] as $_key => $k ) { |
|---|
| 825 | - |
|---|
| 826 | - // Menu item title can't be blank |
|---|
| 827 | - if ( empty( $_POST['menu-item-title'][$_key] ) ) |
|---|
| 828 | - continue; |
|---|
| 829 | - |
|---|
| 830 | - $args = array(); |
|---|
| 831 | - foreach ( $post_fields as $field ) |
|---|
| 832 | - $args[$field] = isset( $_POST[$field][$_key] ) ? $_POST[$field][$_key] : ''; |
|---|
| 833 | - |
|---|
| 834 | - $menu_item_db_id = wp_update_nav_menu_item( $nav_menu_selected_id, ( $_POST['menu-item-db-id'][$_key] != $_key ? 0 : $_key ), $args ); |
|---|
| 835 | - |
|---|
| 836 | - if ( is_wp_error( $menu_item_db_id ) ) |
|---|
| 837 | - $messages[] = '<div id="message" class="error"><p>' . $menu_item_db_id->get_error_message() . '</p></div>'; |
|---|
| 838 | - elseif ( isset( $menu_items[$menu_item_db_id] ) ) |
|---|
| 839 | - unset( $menu_items[$menu_item_db_id] ); |
|---|
| 840 | - } |
|---|
| 841 | - } |
|---|
| 842 | - |
|---|
| 843 | - // Remove menu items from the menu that weren't in $_POST |
|---|
| 844 | - if ( ! empty( $menu_items ) ) { |
|---|
| 845 | - foreach ( array_keys( $menu_items ) as $menu_item_id ) { |
|---|
| 846 | - if ( is_nav_menu_item( $menu_item_id ) ) { |
|---|
| 847 | - wp_delete_post( $menu_item_id ); |
|---|
| 848 | - } |
|---|
| 849 | - } |
|---|
| 850 | - } |
|---|
| 851 | - |
|---|
| 852 | - // Store 'auto-add' pages. |
|---|
| 853 | - $auto_add = ! empty( $_POST['auto-add-pages'] ); |
|---|
| 854 | - $nav_menu_option = (array) get_option( 'nav_menu_options' ); |
|---|
| 855 | - if ( ! isset( $nav_menu_option['auto_add'] ) ) |
|---|
| 856 | - $nav_menu_option['auto_add'] = array(); |
|---|
| 857 | - if ( $auto_add ) { |
|---|
| 858 | - if ( ! in_array( $nav_menu_selected_id, $nav_menu_option['auto_add'] ) ) |
|---|
| 859 | - $nav_menu_option['auto_add'][] = $nav_menu_selected_id; |
|---|
| 860 | - } else { |
|---|
| 861 | - if ( false !== ( $key = array_search( $nav_menu_selected_id, $nav_menu_option['auto_add'] ) ) ) |
|---|
| 862 | - unset( $nav_menu_option['auto_add'][$key] ); |
|---|
| 863 | - } |
|---|
| 864 | - // Remove nonexistent/deleted menus |
|---|
| 865 | - $nav_menu_option['auto_add'] = array_intersect( $nav_menu_option['auto_add'], wp_get_nav_menus( array( 'fields' => 'ids' ) ) ); |
|---|
| 866 | - update_option( 'nav_menu_options', $nav_menu_option ); |
|---|
| 867 | - |
|---|
| 868 | - wp_defer_term_counting(false); |
|---|
| 869 | - |
|---|
| 870 | - do_action( 'wp_update_nav_menu', $nav_menu_selected_id ); |
|---|
| 871 | - |
|---|
| 872 | - $messages[] = '<div id="message" class="updated"><p>' . sprintf( __('The <strong>%s</strong> menu has been updated.'), $nav_menu_selected_title ) . '</p></div>'; |
|---|
| 873 | - unset( $menu_items, $unsorted_menu_items ); |
|---|
| 874 | + $messages = array_merge( $messages, wp_nav_menu_update_menu_items( $nav_menu_selected_id, $nav_menu_selected_title ) ); |
|---|
| 875 | } |
|---|
| 876 | } |
|---|
| 877 | break; |
|---|
| 878 | @@ -376,22 +341,33 @@ |
|---|
| 879 | |
|---|
| 880 | // Get all nav menus |
|---|
| 881 | $nav_menus = wp_get_nav_menus( array('orderby' => 'name') ); |
|---|
| 882 | +$menu_count = count( $nav_menus ); |
|---|
| 883 | |
|---|
| 884 | +// Are we on the add new screen? |
|---|
| 885 | +$add_new_screen = ( isset( $_GET['menu'] ) && 0 == $_GET['menu'] ) ? true : false; |
|---|
| 886 | + |
|---|
| 887 | +// If we have one theme location, and zero menus, we take them right into editing their first menu |
|---|
| 888 | +$one_theme_location_no_menus = ( 1 == count( get_registered_nav_menus() ) && ! $add_new_screen && empty($nav_menus) && 0 < count(get_pages()) ) ? true : false; |
|---|
| 889 | + |
|---|
| 890 | +// Redirect to add screen if there are no menus and this users has either zero, or more than 1 theme locations |
|---|
| 891 | +if ( 0 == $menu_count && ! $add_new_screen && ! $one_theme_location_no_menus ) |
|---|
| 892 | + wp_redirect( admin_url( 'nav-menus.php?action=edit&menu=0' ) ); |
|---|
| 893 | + |
|---|
| 894 | // Get recently edited nav menu |
|---|
| 895 | $recently_edited = (int) get_user_option( 'nav_menu_recently_edited' ); |
|---|
| 896 | - |
|---|
| 897 | -// If there was no recently edited menu, and $nav_menu_selected_id is a nav menu, update recently edited menu. |
|---|
| 898 | -if ( !$recently_edited && is_nav_menu( $nav_menu_selected_id ) ) { |
|---|
| 899 | +if ( !$recently_edited && is_nav_menu( $nav_menu_selected_id ) ) |
|---|
| 900 | $recently_edited = $nav_menu_selected_id; |
|---|
| 901 | |
|---|
| 902 | -// 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. |
|---|
| 903 | -} elseif ( 0 == $nav_menu_selected_id && ! isset( $_REQUEST['menu'] ) && is_nav_menu( $recently_edited ) ) { |
|---|
| 904 | +// Use $recently_edited if none are selected |
|---|
| 905 | +if ( 0 == $nav_menu_selected_id && ! isset( $_GET['menu'] ) && is_nav_menu( $recently_edited ) ) |
|---|
| 906 | $nav_menu_selected_id = $recently_edited; |
|---|
| 907 | |
|---|
| 908 | -// Else try to grab the first menu from the menus list |
|---|
| 909 | -} elseif ( 0 == $nav_menu_selected_id && ! isset( $_REQUEST['menu'] ) && ! empty($nav_menus) ) { |
|---|
| 910 | +// On deletion of menu, if another menu exists, show it |
|---|
| 911 | +if ( ! $add_new_screen && 0 < $menu_count && isset( $_GET['action'] ) && 'delete' == $_GET['action'] ) |
|---|
| 912 | $nav_menu_selected_id = $nav_menus[0]->term_id; |
|---|
| 913 | -} |
|---|
| 914 | + |
|---|
| 915 | +if ( $one_theme_location_no_menus ) |
|---|
| 916 | + $nav_menu_selected_id = 0; |
|---|
| 917 | |
|---|
| 918 | // Update the user's setting |
|---|
| 919 | if ( $nav_menu_selected_id != $recently_edited && is_nav_menu( $nav_menu_selected_id ) ) |
|---|
| 920 | @@ -418,8 +394,10 @@ |
|---|
| 921 | $_wp_nav_menu_max_depth = 0; |
|---|
| 922 | |
|---|
| 923 | // Calling wp_get_nav_menu_to_edit generates $_wp_nav_menu_max_depth |
|---|
| 924 | -if ( is_nav_menu( $nav_menu_selected_id ) ) |
|---|
| 925 | +if ( is_nav_menu( $nav_menu_selected_id ) ) { |
|---|
| 926 | + $menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array('post_status' => 'any') ); |
|---|
| 927 | $edit_markup = wp_get_nav_menu_to_edit( $nav_menu_selected_id ); |
|---|
| 928 | +} |
|---|
| 929 | |
|---|
| 930 | function wp_nav_menu_max_depth($classes) { |
|---|
| 931 | global $_wp_nav_menu_max_depth; |
|---|
| 932 | @@ -460,15 +438,31 @@ |
|---|
| 933 | ?> |
|---|
| 934 | <div class="wrap"> |
|---|
| 935 | <?php screen_icon(); ?> |
|---|
| 936 | - <h2><?php esc_html_e('Menus'); ?></h2> |
|---|
| 937 | + <h2>Menus <a href="<?php echo esc_url( add_query_arg( array( 'action' => 'edit', 'menu' => 0, ), admin_url( 'nav-menus.php' ) ) ); ?>" class="add-new-h2">Add New</a></h2> |
|---|
| 938 | <?php |
|---|
| 939 | foreach( $messages as $message ) : |
|---|
| 940 | echo $message . "\n"; |
|---|
| 941 | endforeach; |
|---|
| 942 | ?> |
|---|
| 943 | + <?php if ( 1 < $menu_count ) : ?> |
|---|
| 944 | + <div class="manage-menus"> |
|---|
| 945 | + <span><?php _e('Selected menu'); ?></span> |
|---|
| 946 | + <select> |
|---|
| 947 | + <?php |
|---|
| 948 | + foreach( (array) $nav_menus as $_nav_menu ) : ?> |
|---|
| 949 | + <option value="<?php echo esc_url(add_query_arg( array( 'action' => 'edit', 'menu' => $_nav_menu->term_id, ), admin_url( 'nav-menus.php' ) )); ?>" <?php if ( $nav_menu_selected_id == $_nav_menu->term_id ) echo 'selected="selected"'; ?>> |
|---|
| 950 | + <?php echo esc_html( $_nav_menu->truncated_name ); ?> |
|---|
| 951 | + </option> |
|---|
| 952 | + <?php endforeach; ?> |
|---|
| 953 | + </select> |
|---|
| 954 | + <span class="spinner"></span> |
|---|
| 955 | + </div> |
|---|
| 956 | + <?php endif; ?> |
|---|
| 957 | <div id="nav-menus-frame"> |
|---|
| 958 | - <div id="menu-settings-column" class="metabox-holder<?php if ( !$nav_menu_selected_id ) { echo ' metabox-holder-disabled'; } ?>"> |
|---|
| 959 | + <div id="menu-settings-column" class="metabox-holder<?php if ( isset( $_GET['menu'] ) && '0' == $_GET['menu'] ) { echo ' metabox-holder-disabled'; } ?>"> |
|---|
| 960 | |
|---|
| 961 | + <div class="clear"></div> |
|---|
| 962 | + |
|---|
| 963 | <form id="nav-menu-meta" action="<?php echo admin_url( 'nav-menus.php' ); ?>" class="nav-menu-meta" method="post" enctype="multipart/form-data"> |
|---|
| 964 | <input type="hidden" name="menu" id="nav-menu-meta-object-id" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" /> |
|---|
| 965 | <input type="hidden" name="action" value="add-menu-item" /> |
|---|
| 966 | @@ -479,129 +473,113 @@ |
|---|
| 967 | </div><!-- /#menu-settings-column --> |
|---|
| 968 | <div id="menu-management-liquid"> |
|---|
| 969 | <div id="menu-management"> |
|---|
| 970 | - <div id="select-nav-menu-container" class="hide-if-js"> |
|---|
| 971 | - <form id="select-nav-menu" action=""> |
|---|
| 972 | - <strong><label for="select-nav-menu"><?php esc_html_e( 'Select Menu:' ); ?></label></strong> |
|---|
| 973 | - <select class="select-nav-menu" name="menu"> |
|---|
| 974 | - <?php foreach( (array) $nav_menus as $_nav_menu ) : ?> |
|---|
| 975 | - <option value="<?php echo esc_attr($_nav_menu->term_id) ?>" <?php selected($nav_menu_selected_id, $_nav_menu->term_id); ?>> |
|---|
| 976 | - <?php echo esc_html( $_nav_menu->truncated_name ); ?> |
|---|
| 977 | - </option> |
|---|
| 978 | - <?php endforeach; ?> |
|---|
| 979 | - <option value="0"><?php esc_html_e('Add New Menu'); ?></option> |
|---|
| 980 | - </select> |
|---|
| 981 | - <input type="hidden" name="action" value="edit" /> |
|---|
| 982 | - <?php submit_button( __( 'Select' ), 'secondary', 'select_menu', false ); ?> |
|---|
| 983 | - </form> |
|---|
| 984 | - </div> |
|---|
| 985 | - <div class="nav-tabs-wrapper"> |
|---|
| 986 | - <div class="nav-tabs"> |
|---|
| 987 | - <?php |
|---|
| 988 | - foreach( (array) $nav_menus as $_nav_menu ) : |
|---|
| 989 | - if ( $nav_menu_selected_id == $_nav_menu->term_id ) : ?><span class="nav-tab nav-tab-active"> |
|---|
| 990 | - <?php echo esc_html( $_nav_menu->truncated_name ); ?> |
|---|
| 991 | - </span><?php else : ?><a href="<?php |
|---|
| 992 | - echo esc_url(add_query_arg( |
|---|
| 993 | - array( |
|---|
| 994 | - 'action' => 'edit', |
|---|
| 995 | - 'menu' => $_nav_menu->term_id, |
|---|
| 996 | - ), |
|---|
| 997 | - admin_url( 'nav-menus.php' ) |
|---|
| 998 | - )); |
|---|
| 999 | - ?>" class="nav-tab hide-if-no-js"> |
|---|
| 1000 | - <?php echo esc_html( $_nav_menu->truncated_name ); ?> |
|---|
| 1001 | - </a><?php endif; |
|---|
| 1002 | - endforeach; |
|---|
| 1003 | - if ( 0 == $nav_menu_selected_id ) : ?><span class="nav-tab menu-add-new nav-tab-active"> |
|---|
| 1004 | - <?php printf( '<abbr title="%s">+</abbr>', esc_html__( 'Add menu' ) ); ?> |
|---|
| 1005 | - </span><?php else : ?><a href="<?php |
|---|
| 1006 | - echo esc_url(add_query_arg( |
|---|
| 1007 | - array( |
|---|
| 1008 | - 'action' => 'edit', |
|---|
| 1009 | - 'menu' => 0, |
|---|
| 1010 | - ), |
|---|
| 1011 | - admin_url( 'nav-menus.php' ) |
|---|
| 1012 | - )); |
|---|
| 1013 | - ?>" class="nav-tab menu-add-new"> |
|---|
| 1014 | - <?php printf( '<abbr title="%s">+</abbr>', esc_html__( 'Add menu' ) ); ?> |
|---|
| 1015 | - </a><?php endif; ?> |
|---|
| 1016 | - </div> |
|---|
| 1017 | - </div> |
|---|
| 1018 | - <div class="menu-edit"> |
|---|
| 1019 | - <form id="update-nav-menu" action="<?php echo admin_url( 'nav-menus.php' ); ?>" method="post" enctype="multipart/form-data"> |
|---|
| 1020 | + <form id="update-nav-menu" action="<?php echo admin_url( 'nav-menus.php' ); ?>" method="post" enctype="multipart/form-data"> |
|---|
| 1021 | + <div class="menu-edit <?php if ( $add_new_screen ) echo 'blank-slate'; ?>"> |
|---|
| 1022 | + <?php |
|---|
| 1023 | + wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); |
|---|
| 1024 | + wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); |
|---|
| 1025 | + wp_nonce_field( 'update-nav_menu', 'update-nav-menu-nonce' ); |
|---|
| 1026 | + ?> |
|---|
| 1027 | + <?php if ( $one_theme_location_no_menus ) { ?> |
|---|
| 1028 | + <input type="hidden" name="zero-menu-state" value="true" /> |
|---|
| 1029 | + <?php } ?> |
|---|
| 1030 | + <input type="hidden" name="action" value="update" /> |
|---|
| 1031 | + <input type="hidden" name="menu" id="menu" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" /> |
|---|
| 1032 | <div id="nav-menu-header"> |
|---|
| 1033 | - <div id="submitpost" class="submitbox"> |
|---|
| 1034 | - <div class="major-publishing-actions"> |
|---|
| 1035 | - <label class="menu-name-label howto open-label" for="menu-name"> |
|---|
| 1036 | - <span><?php _e('Menu Name'); ?></span> |
|---|
| 1037 | - <input name="menu-name" id="menu-name" type="text" class="menu-name regular-text menu-item-textbox input-with-default-title" title="<?php esc_attr_e('Enter menu name here'); ?>" value="<?php echo esc_attr( $nav_menu_selected_title ); ?>" /> |
|---|
| 1038 | - </label> |
|---|
| 1039 | - <?php if ( !empty( $nav_menu_selected_id ) ) : |
|---|
| 1040 | - if ( ! isset( $auto_add ) ) { |
|---|
| 1041 | - $auto_add = get_option( 'nav_menu_options' ); |
|---|
| 1042 | - if ( ! isset( $auto_add['auto_add'] ) ) |
|---|
| 1043 | - $auto_add = false; |
|---|
| 1044 | - elseif ( false !== array_search( $nav_menu_selected_id, $auto_add['auto_add'] ) ) |
|---|
| 1045 | - $auto_add = true; |
|---|
| 1046 | - else |
|---|
| 1047 | - $auto_add = false; |
|---|
| 1048 | - } |
|---|
| 1049 | - ?> |
|---|
| 1050 | - <div class="auto-add-pages"> |
|---|
| 1051 | - <label class="howto"><input type="checkbox"<?php checked( $auto_add ); ?> name="auto-add-pages" value="1" /> <?php printf( __('Automatically add new top-level pages' ), esc_url( admin_url( 'edit.php?post_type=page' ) ) ); ?></label> |
|---|
| 1052 | - </div> |
|---|
| 1053 | + <div class="major-publishing-actions"> |
|---|
| 1054 | + <h2><?php if ( $one_theme_location_no_menus ) { _e('Menu 1'); } else { echo esc_attr( $nav_menu_selected_title ); } ?></h2> |
|---|
| 1055 | + <div class="publishing-action"> |
|---|
| 1056 | + <?php submit_button( empty( $nav_menu_selected_id ) ? __( 'Create Menu' ) : __( 'Save Menu' ), 'button-primary menu-save', 'save_menu', false, array( 'id' => 'save_menu_header' ) ); ?> |
|---|
| 1057 | + </div><!-- END .publishing-action --> |
|---|
| 1058 | + </div><!-- END .major-publishing-actions --> |
|---|
| 1059 | + </div><!-- END .nav-menu-header --> |
|---|
| 1060 | + <div id="post-body"> |
|---|
| 1061 | + <div id="post-body-content"> |
|---|
| 1062 | + <div class="menu-settings" <?php if ( $one_theme_location_no_menus ) { ?>style="display: none;"<?php } ?>> |
|---|
| 1063 | + <h3 class="settings-header"><?php _e('Settings'); ?></strong></h3> |
|---|
| 1064 | + <?php if ( $add_new_screen ) : ?> |
|---|
| 1065 | + <h3><?php _e('Add a new menu'); ?></strong></h3> |
|---|
| 1066 | + <p class="post-body-plain"><?php _e('Give your menu a name, then click Create Menu.'); ?></p> |
|---|
| 1067 | <?php endif; ?> |
|---|
| 1068 | - <br class="clear" /> |
|---|
| 1069 | - <div class="publishing-action"> |
|---|
| 1070 | - <?php submit_button( empty( $nav_menu_selected_id ) ? __( 'Create Menu' ) : __( 'Save Menu' ), 'button-primary menu-save', 'save_menu', false, array( 'id' => 'save_menu_header' ) ); ?> |
|---|
| 1071 | - </div><!-- END .publishing-action --> |
|---|
| 1072 | + <dl> |
|---|
| 1073 | + <dt class="howto"><label class="menu-name-label" for="menu-name"><?php _e('Menu Name'); ?></label></dt> |
|---|
| 1074 | + <dd> |
|---|
| 1075 | + <?php if ( $one_theme_location_no_menus ) { ?> |
|---|
| 1076 | + <input name="menu-name" id="menu-name" type="hidden" class="menu-name regular-text menu-item-textbox input-with-default-title" value="<?php _e('Menu 1'); ?>" /> |
|---|
| 1077 | + <?php } else { ?> |
|---|
| 1078 | + <input name="menu-name" id="menu-name" type="text" class="menu-name regular-text menu-item-textbox input-with-default-title" title="<?php esc_attr_e('Enter menu name here'); ?>" value="<?php echo esc_attr( $nav_menu_selected_title ); ?>" /> |
|---|
| 1079 | + <?php } ?> |
|---|
| 1080 | + </dd> |
|---|
| 1081 | + </dl> |
|---|
| 1082 | + <?php |
|---|
| 1083 | + if ( ! isset( $auto_add ) ) { |
|---|
| 1084 | + $auto_add = get_option( 'nav_menu_options' ); |
|---|
| 1085 | + if ( ! isset( $auto_add['auto_add'] ) ) |
|---|
| 1086 | + $auto_add = false; |
|---|
| 1087 | + elseif ( false !== array_search( $nav_menu_selected_id, $auto_add['auto_add'] ) ) |
|---|
| 1088 | + $auto_add = true; |
|---|
| 1089 | + else |
|---|
| 1090 | + $auto_add = false; |
|---|
| 1091 | + } ?> |
|---|
| 1092 | |
|---|
| 1093 | - <?php if ( ! empty( $nav_menu_selected_id ) ) : ?> |
|---|
| 1094 | - <div class="delete-action"> |
|---|
| 1095 | - <a class="submitdelete deletion menu-delete" href="<?php echo esc_url( wp_nonce_url( admin_url('nav-menus.php?action=delete&menu=' . $nav_menu_selected_id), 'delete-nav_menu-' . $nav_menu_selected_id ) ); ?>"><?php _e('Delete Menu'); ?></a> |
|---|
| 1096 | - </div><!-- END .delete-action --> |
|---|
| 1097 | + <dl class="auto-add-pages"> |
|---|
| 1098 | + <dt class="howto"><?php _e('Auto add pages'); ?></dt> |
|---|
| 1099 | + <dd class="checkbox-input"><input type="checkbox"<?php checked( $auto_add ); ?> name="auto-add-pages" id="auto-add-pages" value="1" /> <label for="auto-add-pages"><?php printf( __('Automatically add new top-level pages to this menu' ), esc_url( admin_url( 'edit.php?post_type=page' ) ) ); ?></label></dd> |
|---|
| 1100 | + </dl> |
|---|
| 1101 | + |
|---|
| 1102 | + <?php if ( current_theme_supports( 'menus' ) ) : |
|---|
| 1103 | + $locations = get_registered_nav_menus(); |
|---|
| 1104 | + $menu_locations = get_nav_menu_locations(); |
|---|
| 1105 | + ?> |
|---|
| 1106 | + |
|---|
| 1107 | + <dl class="menu-theme-locations"> |
|---|
| 1108 | + <dt class="howto"><?php _e( 'Theme locations' ); ?></dt> |
|---|
| 1109 | + <?php foreach ( $locations as $location => $description ) : ?> |
|---|
| 1110 | + <dd class="checkbox-input"> |
|---|
| 1111 | + <input type="checkbox"<?php checked( isset( $menu_locations[ $location ] ) && $menu_locations[ $location ] == $nav_menu_selected_id ); ?> name="menu-locations[<?php echo esc_attr( $location ); ?>]" id="locations-<?php echo esc_attr( $location ); ?>" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" /> <label for="locations-<?php echo esc_attr( $location ); ?>"><?php echo $description; ?></label> |
|---|
| 1112 | + <?php if ( isset( $menu_locations[ $location ] ) && $menu_locations[ $location ] != $nav_menu_selected_id ) : ?> |
|---|
| 1113 | + <span class="theme-location-set"><?php printf( __( "(Set to: %s)" ), wp_get_nav_menu_object( $menu_locations[ $location ] )->name ); ?></span> |
|---|
| 1114 | + <?php endif; ?> |
|---|
| 1115 | + </dd> |
|---|
| 1116 | + <?php endforeach; ?> |
|---|
| 1117 | + </dl> |
|---|
| 1118 | + |
|---|
| 1119 | <?php endif; ?> |
|---|
| 1120 | - </div><!-- END .major-publishing-actions --> |
|---|
| 1121 | - </div><!-- END #submitpost .submitbox --> |
|---|
| 1122 | - <?php |
|---|
| 1123 | - wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); |
|---|
| 1124 | - wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); |
|---|
| 1125 | - wp_nonce_field( 'update-nav_menu', 'update-nav-menu-nonce' ); |
|---|
| 1126 | - ?> |
|---|
| 1127 | - <input type="hidden" name="action" value="update" /> |
|---|
| 1128 | - <input type="hidden" name="menu" id="menu" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" /> |
|---|
| 1129 | - </div><!-- END #nav-menu-header --> |
|---|
| 1130 | - <div id="post-body"> |
|---|
| 1131 | - <div id="post-body-content"> |
|---|
| 1132 | + |
|---|
| 1133 | + </div> |
|---|
| 1134 | + <?php if ( ! $add_new_screen ) : ?> |
|---|
| 1135 | + <h3><?php _e('Menu Structure'); ?></strong></h3> |
|---|
| 1136 | + <?php $starter_copy = ( $one_theme_location_no_menus ) ? __("Edit your default menu by adding or removing items. Drag each item into the order you prefer. Click Create Menu to save your changes.") : __('Drag each item into the order you prefer. Click an item to reveal additional configuration options.') ; ?> |
|---|
| 1137 | + <div class="drag-instructions post-body-plain" <?php if ( isset( $menu_items ) && 0 == count( $menu_items ) ) { ?>style="display: none;"<?php } ?>> |
|---|
| 1138 | + <p><?php echo $starter_copy; ?></p> |
|---|
| 1139 | + </div> |
|---|
| 1140 | <?php |
|---|
| 1141 | - if ( isset( $edit_markup ) ) { |
|---|
| 1142 | - if ( ! is_wp_error( $edit_markup ) ) |
|---|
| 1143 | - echo $edit_markup; |
|---|
| 1144 | - } else if ( empty( $nav_menu_selected_id ) ) { |
|---|
| 1145 | - echo '<div class="post-body-plain">'; |
|---|
| 1146 | - echo '<p>' . __('To create a custom menu, give it a name above and click Create Menu. Then choose items like pages, categories or custom links from the left column to add to this menu.') . '</p>'; |
|---|
| 1147 | - echo '<p>' . __('After you have added your items, drag and drop to put them in the order you want. You can also click each item to reveal additional configuration options.') . '</p>'; |
|---|
| 1148 | - echo '<p>' . __('When you have finished building your custom menu, make sure you click the Save Menu button.') . '</p>'; |
|---|
| 1149 | - echo '</div>'; |
|---|
| 1150 | - } |
|---|
| 1151 | + if ( isset( $edit_markup ) && ! is_wp_error( $edit_markup ) ) { |
|---|
| 1152 | + echo $edit_markup; |
|---|
| 1153 | + } else { |
|---|
| 1154 | ?> |
|---|
| 1155 | + <ul class="menu" id="menu-to-edit"></ul> |
|---|
| 1156 | + <?php } ?> |
|---|
| 1157 | + <?php endif; ?> |
|---|
| 1158 | </div><!-- /#post-body-content --> |
|---|
| 1159 | </div><!-- /#post-body --> |
|---|
| 1160 | <div id="nav-menu-footer"> |
|---|
| 1161 | <div class="major-publishing-actions"> |
|---|
| 1162 | - <div class="publishing-action"> |
|---|
| 1163 | - <?php |
|---|
| 1164 | - if ( ! empty( $nav_menu_selected_id ) ) |
|---|
| 1165 | - submit_button( __( 'Save Menu' ), 'button-primary menu-save', 'save_menu', false, array( 'id' => 'save_menu_footer' ) ); |
|---|
| 1166 | - ?> |
|---|
| 1167 | - </div> |
|---|
| 1168 | - </div> |
|---|
| 1169 | + <?php if ( 0 != $menu_count && ! $add_new_screen ) : ?> |
|---|
| 1170 | + <span class="delete-action"> |
|---|
| 1171 | + <a class="submitdelete deletion menu-delete" href="<?php echo esc_url( wp_nonce_url( admin_url('nav-menus.php?action=delete&menu=' . $nav_menu_selected_id), 'delete-nav_menu-' . $nav_menu_selected_id ) ); ?>"><?php _e('Delete Menu'); ?></a> |
|---|
| 1172 | + </span><!-- END .delete-action --> |
|---|
| 1173 | + <?php endif; ?> |
|---|
| 1174 | + <div class="publishing-action"> |
|---|
| 1175 | + <?php submit_button( empty( $nav_menu_selected_id ) ? __( 'Create Menu' ) : __( 'Save Menu' ), 'button-primary menu-save', 'save_menu', false, array( 'id' => 'save_menu_header' ) ); ?> |
|---|
| 1176 | + </div><!-- END .publishing-action --> |
|---|
| 1177 | + </div><!-- END .major-publishing-actions --> |
|---|
| 1178 | </div><!-- /#nav-menu-footer --> |
|---|
| 1179 | - </form><!-- /#update-nav-menu --> |
|---|
| 1180 | - </div><!-- /.menu-edit --> |
|---|
| 1181 | + </div><!-- /.menu-edit --> |
|---|
| 1182 | + </form><!-- /#update-nav-menu --> |
|---|
| 1183 | </div><!-- /#menu-management --> |
|---|
| 1184 | </div><!-- /#menu-management-liquid --> |
|---|
| 1185 | </div><!-- /#nav-menus-frame --> |
|---|
| 1186 | </div><!-- /.wrap--> |
|---|
| 1187 | - |
|---|
| 1188 | -<?php include( './admin-footer.php' ); ?> |
|---|
| 1189 | +<script type="text/javascript">var oneThemeLocationNoMenus = <?php if ( $one_theme_location_no_menus ) { echo 'true'; } else { echo 'false'; } ?>;</script> |
|---|
| 1190 | +<?php include( './admin-footer.php' ); ?> |
|---|
| 1191 | \ No newline at end of file |
|---|
| 1192 | Index: wp-admin/css/wp-admin.css |
|---|
| 1193 | =================================================================== |
|---|
| 1194 | --- wp-admin/css/wp-admin.css (revision 23389) |
|---|
| 1195 | +++ wp-admin/css/wp-admin.css (working copy) |
|---|
| 1196 | @@ -2433,7 +2433,8 @@ |
|---|
| 1197 | .fixed .column-categories, |
|---|
| 1198 | .fixed .column-tags, |
|---|
| 1199 | .fixed .column-rel, |
|---|
| 1200 | -.fixed .column-role { |
|---|
| 1201 | +.fixed .column-role, |
|---|
| 1202 | +.fixed .column-count { |
|---|
| 1203 | width: 15%; |
|---|
| 1204 | } |
|---|
| 1205 | |
|---|
| 1206 | @@ -6760,8 +6761,17 @@ |
|---|
| 1207 | |
|---|
| 1208 | /* nav-menu */ |
|---|
| 1209 | |
|---|
| 1210 | +.nav-menus-php #message { |
|---|
| 1211 | + display: none; |
|---|
| 1212 | +} |
|---|
| 1213 | + |
|---|
| 1214 | +.nav-menus-php .nav-tab-wrapper { |
|---|
| 1215 | + margin-bottom: 20px; |
|---|
| 1216 | +} |
|---|
| 1217 | + |
|---|
| 1218 | #nav-menus-frame { |
|---|
| 1219 | margin-left: 300px; |
|---|
| 1220 | + margin-top: 20px; |
|---|
| 1221 | } |
|---|
| 1222 | |
|---|
| 1223 | #wpbody-content #menu-settings-column { |
|---|
| 1224 | @@ -6770,7 +6780,7 @@ |
|---|
| 1225 | margin-left: -300px; |
|---|
| 1226 | clear: both; |
|---|
| 1227 | float: left; |
|---|
| 1228 | - padding-top: 24px; |
|---|
| 1229 | + padding-top: 0; |
|---|
| 1230 | } |
|---|
| 1231 | |
|---|
| 1232 | .no-js #wpbody-content #menu-settings-column { |
|---|
| 1233 | @@ -6795,10 +6805,88 @@ |
|---|
| 1234 | position: relative; |
|---|
| 1235 | } |
|---|
| 1236 | |
|---|
| 1237 | +.blank-slate br { |
|---|
| 1238 | + display: none; |
|---|
| 1239 | +} |
|---|
| 1240 | + |
|---|
| 1241 | +.blank-slate .menu-name { |
|---|
| 1242 | + height: 2em; |
|---|
| 1243 | +} |
|---|
| 1244 | + |
|---|
| 1245 | +.is-submenu { |
|---|
| 1246 | + color: #999; |
|---|
| 1247 | + font-style: italic; |
|---|
| 1248 | + font-weight: normal; |
|---|
| 1249 | + margin-left: 4px; |
|---|
| 1250 | +} |
|---|
| 1251 | + |
|---|
| 1252 | +.manage-menus { |
|---|
| 1253 | + border: 1px solid #eee; |
|---|
| 1254 | + background: #fbfbfb; |
|---|
| 1255 | + margin-top: 13px; |
|---|
| 1256 | + padding: 10px; |
|---|
| 1257 | + overflow: hidden; |
|---|
| 1258 | + -webkit-border-radius: 3px; |
|---|
| 1259 | + border-radius: 3px; |
|---|
| 1260 | +} |
|---|
| 1261 | + |
|---|
| 1262 | +.manage-menus select { |
|---|
| 1263 | + float: left; |
|---|
| 1264 | + min-width: 180px; |
|---|
| 1265 | +} |
|---|
| 1266 | + |
|---|
| 1267 | +.manage-menus .spinner { |
|---|
| 1268 | + float: left; |
|---|
| 1269 | +} |
|---|
| 1270 | + |
|---|
| 1271 | +.manage-menus span { |
|---|
| 1272 | + float: left; |
|---|
| 1273 | + margin: 4px 6px 0 0; |
|---|
| 1274 | +} |
|---|
| 1275 | + |
|---|
| 1276 | +.menu-edit p { |
|---|
| 1277 | + margin: .3em 0 .6em; |
|---|
| 1278 | +} |
|---|
| 1279 | + |
|---|
| 1280 | +.menu-settings { |
|---|
| 1281 | + overflow: hidden; |
|---|
| 1282 | +} |
|---|
| 1283 | + |
|---|
| 1284 | +.menu-settings dl { |
|---|
| 1285 | + margin: 0 0 10px; |
|---|
| 1286 | + overflow: hidden; |
|---|
| 1287 | + position: relative; |
|---|
| 1288 | +} |
|---|
| 1289 | + |
|---|
| 1290 | +.menu-settings dd { |
|---|
| 1291 | + float: left; |
|---|
| 1292 | + margin: 0; |
|---|
| 1293 | + width: 60%; |
|---|
| 1294 | + padding-left: 170px; |
|---|
| 1295 | +} |
|---|
| 1296 | + |
|---|
| 1297 | +.menu-settings dt { |
|---|
| 1298 | + clear: both; |
|---|
| 1299 | + display: inline; |
|---|
| 1300 | + float: left; |
|---|
| 1301 | + padding: 3px 0 0; |
|---|
| 1302 | + position: absolute; |
|---|
| 1303 | +} |
|---|
| 1304 | + |
|---|
| 1305 | +.menu-edit .checkbox-input { |
|---|
| 1306 | + margin-top: 4px; |
|---|
| 1307 | +} |
|---|
| 1308 | + |
|---|
| 1309 | +.theme-location-set { |
|---|
| 1310 | + color: #999; |
|---|
| 1311 | + font-size: 11px; |
|---|
| 1312 | +} |
|---|
| 1313 | + |
|---|
| 1314 | /* Menu Container */ |
|---|
| 1315 | #menu-management-liquid { |
|---|
| 1316 | float: left; |
|---|
| 1317 | min-width: 100%; |
|---|
| 1318 | + margin-top: 3px; |
|---|
| 1319 | } |
|---|
| 1320 | |
|---|
| 1321 | #menu-management { |
|---|
| 1322 | @@ -6812,8 +6900,12 @@ |
|---|
| 1323 | margin-bottom: 20px; |
|---|
| 1324 | } |
|---|
| 1325 | |
|---|
| 1326 | +#menu-management p.search-box { |
|---|
| 1327 | + margin: 5px 0; |
|---|
| 1328 | +} |
|---|
| 1329 | + |
|---|
| 1330 | .nav-menus-php #post-body { |
|---|
| 1331 | - padding: 10px; |
|---|
| 1332 | + padding: 0 10px; |
|---|
| 1333 | border-width: 1px 0; |
|---|
| 1334 | border-style: solid; |
|---|
| 1335 | } |
|---|
| 1336 | @@ -6827,6 +6919,14 @@ |
|---|
| 1337 | border-bottom: 1px solid; |
|---|
| 1338 | } |
|---|
| 1339 | |
|---|
| 1340 | +#nav-menu-header h2 { |
|---|
| 1341 | + float: left; |
|---|
| 1342 | + line-height: 18px; |
|---|
| 1343 | + margin: 0; |
|---|
| 1344 | + padding: 6px 0 0 0; |
|---|
| 1345 | + font-size: 18px; |
|---|
| 1346 | +} |
|---|
| 1347 | + |
|---|
| 1348 | #nav-menu-footer { |
|---|
| 1349 | border-top: 1px solid; |
|---|
| 1350 | } |
|---|
| 1351 | @@ -6845,55 +6945,6 @@ |
|---|
| 1352 | font-weight:bold; |
|---|
| 1353 | } |
|---|
| 1354 | |
|---|
| 1355 | -/* Menu Tabs */ |
|---|
| 1356 | - |
|---|
| 1357 | -#menu-management .nav-tabs-nav { |
|---|
| 1358 | - margin: 0 20px; |
|---|
| 1359 | -} |
|---|
| 1360 | - |
|---|
| 1361 | -#menu-management .nav-tabs-arrow { |
|---|
| 1362 | - width: 10px; |
|---|
| 1363 | - padding: 0 5px 4px; |
|---|
| 1364 | - cursor: pointer; |
|---|
| 1365 | - position: absolute; |
|---|
| 1366 | - top: 0; |
|---|
| 1367 | - line-height: 22px; |
|---|
| 1368 | - font-size: 18px; |
|---|
| 1369 | - text-shadow: 0 1px 0 #fff; |
|---|
| 1370 | -} |
|---|
| 1371 | - |
|---|
| 1372 | -#menu-management .nav-tabs-arrow-left { |
|---|
| 1373 | - left: 0; |
|---|
| 1374 | -} |
|---|
| 1375 | - |
|---|
| 1376 | -#menu-management .nav-tabs-arrow-right { |
|---|
| 1377 | - right: 0; |
|---|
| 1378 | - text-align: right; |
|---|
| 1379 | -} |
|---|
| 1380 | - |
|---|
| 1381 | -#menu-management .nav-tabs-wrapper { |
|---|
| 1382 | - width: 100%; |
|---|
| 1383 | - height: 28px; |
|---|
| 1384 | - margin-bottom: -1px; |
|---|
| 1385 | - overflow: hidden; |
|---|
| 1386 | -} |
|---|
| 1387 | - |
|---|
| 1388 | -#menu-management .nav-tabs { |
|---|
| 1389 | - padding-left: 20px; |
|---|
| 1390 | - padding-right: 10px; |
|---|
| 1391 | -} |
|---|
| 1392 | - |
|---|
| 1393 | -.js #menu-management .nav-tabs { |
|---|
| 1394 | - float: left; |
|---|
| 1395 | - margin-left: 0px; |
|---|
| 1396 | - margin-right: -400px; |
|---|
| 1397 | -} |
|---|
| 1398 | - |
|---|
| 1399 | -#menu-management .nav-tab { |
|---|
| 1400 | - margin-bottom: 0; |
|---|
| 1401 | - font-size: 14px; |
|---|
| 1402 | -} |
|---|
| 1403 | - |
|---|
| 1404 | #select-nav-menu-container { |
|---|
| 1405 | text-align: right; |
|---|
| 1406 | padding: 0 10px 3px 10px; |
|---|
| 1407 | @@ -7090,7 +7141,8 @@ |
|---|
| 1408 | } |
|---|
| 1409 | |
|---|
| 1410 | #menu-to-edit { |
|---|
| 1411 | - padding: 1em 0; |
|---|
| 1412 | + margin: 0; |
|---|
| 1413 | + padding: 0.1em 0; |
|---|
| 1414 | } |
|---|
| 1415 | |
|---|
| 1416 | .menu ul { |
|---|
| 1417 | @@ -7106,7 +7158,7 @@ |
|---|
| 1418 | clear:both; |
|---|
| 1419 | line-height:1.5em; |
|---|
| 1420 | position:relative; |
|---|
| 1421 | - margin: 13px 0 0 0; |
|---|
| 1422 | + margin-top: 9px; |
|---|
| 1423 | } |
|---|
| 1424 | |
|---|
| 1425 | .menu-item-handle { |
|---|
| 1426 | @@ -7333,34 +7385,24 @@ |
|---|
| 1427 | text-align: right; |
|---|
| 1428 | float: right; |
|---|
| 1429 | line-height: 23px; |
|---|
| 1430 | - margin: 5px 0 1px; |
|---|
| 1431 | + margin: 2px 0 1px; |
|---|
| 1432 | } |
|---|
| 1433 | |
|---|
| 1434 | -.nav-menus-php .major-publishing-actions .delete-action { |
|---|
| 1435 | - vertical-align: middle; |
|---|
| 1436 | - text-align: left; |
|---|
| 1437 | - float: left; |
|---|
| 1438 | - padding-right: 15px; |
|---|
| 1439 | - margin-top: 5px; |
|---|
| 1440 | +.nav-menus-php .blank-slate .auto-add-pages, |
|---|
| 1441 | +.nav-menus-php .blank-slate .settings-header, |
|---|
| 1442 | +.nav-menus-php .blank-slate dt, |
|---|
| 1443 | +.nav-menus-php .blank-slate .auto-add-pages, |
|---|
| 1444 | +.nav-menus-php .blank-slate .menu-theme-locations { |
|---|
| 1445 | + display: none; |
|---|
| 1446 | } |
|---|
| 1447 | |
|---|
| 1448 | -.menu-name-label span, |
|---|
| 1449 | -.auto-add-pages label { |
|---|
| 1450 | - font-size: 12px; |
|---|
| 1451 | - font-style: normal; |
|---|
| 1452 | +.nav-menus-php .blank-slate dd { |
|---|
| 1453 | + padding: 0; |
|---|
| 1454 | } |
|---|
| 1455 | |
|---|
| 1456 | -.menu-name-label { |
|---|
| 1457 | - margin-right: 15px; |
|---|
| 1458 | -} |
|---|
| 1459 | - |
|---|
| 1460 | -.auto-add-pages input { |
|---|
| 1461 | - margin-top: 0; |
|---|
| 1462 | -} |
|---|
| 1463 | - |
|---|
| 1464 | -.auto-add-pages { |
|---|
| 1465 | - margin-top: 4px; |
|---|
| 1466 | +.nav-menus-php .delete-action { |
|---|
| 1467 | float: left; |
|---|
| 1468 | + margin-top: 2px; |
|---|
| 1469 | } |
|---|
| 1470 | |
|---|
| 1471 | .nav-menus-php .submitbox .submitcancel { |
|---|