Diff: STRATO-apps/wordpress_03/app/wp-admin/nav-menus.php

Keine Baseline-Datei – Diff nur gegen leer.
Zur Liste
1 -
1 + <?php
2 + /**
3 + * WordPress Administration for Navigation Menus
4 + * Interface functions
5 + *
6 + * @version 2.0.0
7 + *
8 + * @package WordPress
9 + * @subpackage Administration
10 + */
11 +
12 + /** Load WordPress Administration Bootstrap */
13 + require_once __DIR__ . '/admin.php';
14 +
15 + // Load all the nav menu interface functions.
16 + require_once ABSPATH . 'wp-admin/includes/nav-menu.php';
17 +
18 + if ( ! current_theme_supports( 'menus' ) && ! current_theme_supports( 'widgets' ) ) {
19 + wp_die( __( 'Your theme does not support navigation menus or widgets.' ) );
20 + }
21 +
22 + // Permissions check.
23 + if ( ! current_user_can( 'edit_theme_options' ) ) {
24 + wp_die(
25 + '<h1>' . __( 'You need a higher level of permission.' ) . '</h1>' .
26 + '<p>' . __( 'Sorry, you are not allowed to edit theme options on this site.' ) . '</p>',
27 + 403
28 + );
29 + }
30 +
31 + // Used in the HTML title tag.
32 + $title = __( 'Menus' );
33 +
34 + wp_enqueue_script( 'nav-menu' );
35 +
36 + if ( wp_is_mobile() ) {
37 + wp_enqueue_script( 'jquery-touch-punch' );
38 + }
39 +
40 + // Container for any messages displayed to the user.
41 + $messages = array();
42 +
43 + // Container that stores the name of the active menu.
44 + $nav_menu_selected_title = '';
45 +
46 + // The menu id of the current menu being edited.
47 + $nav_menu_selected_id = isset( $_REQUEST['menu'] ) ? (int) $_REQUEST['menu'] : 0;
48 +
49 + // Get existing menu locations assignments.
50 + $locations = get_registered_nav_menus();
51 + $menu_locations = get_nav_menu_locations();
52 + $num_locations = count( array_keys( $locations ) );
53 +
54 + // Allowed actions: add, update, delete.
55 + $action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : 'edit';
56 +
57 + /*
58 + * If a JSON blob of navigation menu data is found, expand it and inject it
59 + * into `$_POST` to avoid PHP `max_input_vars` limitations. See #14134.
60 + */
61 + _wp_expand_nav_menu_post_data();
62 +
63 + switch ( $action ) {
64 + case 'add-menu-item':
65 + check_admin_referer( 'add-menu_item', 'menu-settings-column-nonce' );
66 +
67 + if ( isset( $_REQUEST['nav-menu-locations'] ) ) {
68 + set_theme_mod( 'nav_menu_locations', array_map( 'absint', $_REQUEST['menu-locations'] ) );
69 + } elseif ( isset( $_REQUEST['menu-item'] ) ) {
70 + wp_save_nav_menu_items( $nav_menu_selected_id, $_REQUEST['menu-item'] );
71 + }
72 +
73 + break;
74 +
75 + case 'move-down-menu-item':
76 + // Moving down a menu item is the same as moving up the next in order.
77 + check_admin_referer( 'move-menu_item' );
78 +
79 + $menu_item_id = isset( $_REQUEST['menu-item'] ) ? (int) $_REQUEST['menu-item'] : 0;
80 +
81 + if ( is_nav_menu_item( $menu_item_id ) ) {
82 + $menus = isset( $_REQUEST['menu'] ) ? array( (int) $_REQUEST['menu'] ) : wp_get_object_terms( $menu_item_id, 'nav_menu', array( 'fields' => 'ids' ) );
83 +
84 + if ( ! is_wp_error( $menus ) && ! empty( $menus[0] ) ) {
85 + $menu_id = (int) $menus[0];
86 + $ordered_menu_items = wp_get_nav_menu_items( $menu_id );
87 + $menu_item_data = (array) wp_setup_nav_menu_item( get_post( $menu_item_id ) );
88 +
89 + // Set up the data we need in one pass through the array of menu items.
90 + $dbids_to_orders = array();
91 + $orders_to_dbids = array();
92 +
93 + foreach ( (array) $ordered_menu_items as $ordered_menu_item_object ) {
94 + if ( isset( $ordered_menu_item_object->ID ) ) {
95 + if ( isset( $ordered_menu_item_object->menu_order ) ) {
96 + $dbids_to_orders[ $ordered_menu_item_object->ID ] = $ordered_menu_item_object->menu_order;
97 + $orders_to_dbids[ $ordered_menu_item_object->menu_order ] = $ordered_menu_item_object->ID;
98 + }
99 + }
100 + }
101 +
102 + // Get next in order.
103 + if ( isset( $orders_to_dbids[ $dbids_to_orders[ $menu_item_id ] + 1 ] ) ) {
104 + $next_item_id = $orders_to_dbids[ $dbids_to_orders[ $menu_item_id ] + 1 ];
105 + $next_item_data = (array) wp_setup_nav_menu_item( get_post( $next_item_id ) );
106 +
107 + // If not siblings of same parent, bubble menu item up but keep order.
108 + if ( ! empty( $menu_item_data['menu_item_parent'] )
109 + && ( empty( $next_item_data['menu_item_parent'] )
110 + || (int) $next_item_data['menu_item_parent'] !== (int) $menu_item_data['menu_item_parent'] )
111 + ) {
112 + if ( in_array( (int) $menu_item_data['menu_item_parent'], $orders_to_dbids, true ) ) {
113 + $parent_db_id = (int) $menu_item_data['menu_item_parent'];
114 + } else {
115 + $parent_db_id = 0;
116 + }
117 +
118 + $parent_object = wp_setup_nav_menu_item( get_post( $parent_db_id ) );
119 +
120 + if ( ! is_wp_error( $parent_object ) ) {
121 + $parent_data = (array) $parent_object;
122 + $menu_item_data['menu_item_parent'] = $parent_data['menu_item_parent'];
123 +
124 + // Reset invalid `menu_item_parent`.
125 + $menu_item_data = _wp_reset_invalid_menu_item_parent( $menu_item_data );
126 +
127 + update_post_meta( $menu_item_data['ID'], '_menu_item_menu_item_parent', (int) $menu_item_data['menu_item_parent'] );
128 + }
129 +
130 + // Make menu item a child of its next sibling.
131 + } else {
132 + $next_item_data['menu_order'] = $next_item_data['menu_order'] - 1;
133 + $menu_item_data['menu_order'] = $menu_item_data['menu_order'] + 1;
134 +
135 + $menu_item_data['menu_item_parent'] = $next_item_data['ID'];
136 +
137 + // Reset invalid `menu_item_parent`.
138 + $menu_item_data = _wp_reset_invalid_menu_item_parent( $menu_item_data );
139 +
140 + update_post_meta( $menu_item_data['ID'], '_menu_item_menu_item_parent', (int) $menu_item_data['menu_item_parent'] );
141 +
142 + wp_update_post( $menu_item_data );
143 + wp_update_post( $next_item_data );
144 + }
145 +
146 + // The item is last but still has a parent, so bubble up.
147 + } elseif ( ! empty( $menu_item_data['menu_item_parent'] )
148 + && in_array( (int) $menu_item_data['menu_item_parent'], $orders_to_dbids, true )
149 + ) {
150 + $menu_item_data['menu_item_parent'] = (int) get_post_meta( $menu_item_data['menu_item_parent'], '_menu_item_menu_item_parent', true );
151 +
152 + // Reset invalid `menu_item_parent`.
153 + $menu_item_data = _wp_reset_invalid_menu_item_parent( $menu_item_data );
154 +
155 + update_post_meta( $menu_item_data['ID'], '_menu_item_menu_item_parent', (int) $menu_item_data['menu_item_parent'] );
156 + }
157 + }
158 + }
159 +
160 + break;
161 +
162 + case 'move-up-menu-item':
163 + check_admin_referer( 'move-menu_item' );
164 +
165 + $menu_item_id = isset( $_REQUEST['menu-item'] ) ? (int) $_REQUEST['menu-item'] : 0;
166 +
167 + if ( is_nav_menu_item( $menu_item_id ) ) {
168 + if ( isset( $_REQUEST['menu'] ) ) {
169 + $menus = array( (int) $_REQUEST['menu'] );
170 + } else {
171 + $menus = wp_get_object_terms( $menu_item_id, 'nav_menu', array( 'fields' => 'ids' ) );
172 + }
173 +
174 + if ( ! is_wp_error( $menus ) && ! empty( $menus[0] ) ) {
175 + $menu_id = (int) $menus[0];
176 + $ordered_menu_items = wp_get_nav_menu_items( $menu_id );
177 + $menu_item_data = (array) wp_setup_nav_menu_item( get_post( $menu_item_id ) );
178 +
179 + // Set up the data we need in one pass through the array of menu items.
180 + $dbids_to_orders = array();
181 + $orders_to_dbids = array();
182 +
183 + foreach ( (array) $ordered_menu_items as $ordered_menu_item_object ) {
184 + if ( isset( $ordered_menu_item_object->ID ) ) {
185 + if ( isset( $ordered_menu_item_object->menu_order ) ) {
186 + $dbids_to_orders[ $ordered_menu_item_object->ID ] = $ordered_menu_item_object->menu_order;
187 + $orders_to_dbids[ $ordered_menu_item_object->menu_order ] = $ordered_menu_item_object->ID;
188 + }
189 + }
190 + }
191 +
192 + // If this menu item is not first.
193 + if ( ! empty( $dbids_to_orders[ $menu_item_id ] )
194 + && ! empty( $orders_to_dbids[ $dbids_to_orders[ $menu_item_id ] - 1 ] )
195 + ) {
196 +
197 + // If this menu item is a child of the previous.
198 + if ( ! empty( $menu_item_data['menu_item_parent'] )
199 + && in_array( (int) $menu_item_data['menu_item_parent'], array_keys( $dbids_to_orders ), true )
200 + && isset( $orders_to_dbids[ $dbids_to_orders[ $menu_item_id ] - 1 ] )
201 + && ( (int) $menu_item_data['menu_item_parent'] === $orders_to_dbids[ $dbids_to_orders[ $menu_item_id ] - 1 ] )
202 + ) {
203 + if ( in_array( (int) $menu_item_data['menu_item_parent'], $orders_to_dbids, true ) ) {
204 + $parent_db_id = (int) $menu_item_data['menu_item_parent'];
205 + } else {
206 + $parent_db_id = 0;
207 + }
208 +
209 + $parent_object = wp_setup_nav_menu_item( get_post( $parent_db_id ) );
210 +
211 + if ( ! is_wp_error( $parent_object ) ) {
212 + $parent_data = (array) $parent_object;
213 +
214 + /*
215 + * If there is something before the parent and parent a child of it,
216 + * make menu item a child also of it.
217 + */
218 + if ( ! empty( $dbids_to_orders[ $parent_db_id ] )
219 + && ! empty( $orders_to_dbids[ $dbids_to_orders[ $parent_db_id ] - 1 ] )
220 + && ! empty( $parent_data['menu_item_parent'] )
221 + ) {
222 + $menu_item_data['menu_item_parent'] = $parent_data['menu_item_parent'];
223 +
224 + /*
225 + * Else if there is something before parent and parent not a child of it,
226 + * make menu item a child of that something's parent
227 + */
228 + } elseif ( ! empty( $dbids_to_orders[ $parent_db_id ] )
229 + && ! empty( $orders_to_dbids[ $dbids_to_orders[ $parent_db_id ] - 1 ] )
230 + ) {
231 + $_possible_parent_id = (int) get_post_meta( $orders_to_dbids[ $dbids_to_orders[ $parent_db_id ] - 1 ], '_menu_item_menu_item_parent', true );
232 +
233 + if ( in_array( $_possible_parent_id, array_keys( $dbids_to_orders ), true ) ) {
234 + $menu_item_data['menu_item_parent'] = $_possible_parent_id;
235 + } else {
236 + $menu_item_data['menu_item_parent'] = 0;
237 + }
238 +
239 + // Else there isn't something before the parent.
240 + } else {
241 + $menu_item_data['menu_item_parent'] = 0;
242 + }
243 +
244 + // Set former parent's [menu_order] to that of menu-item's.
245 + $parent_data['menu_order'] = $parent_data['menu_order'] + 1;
246 +
247 + // Set menu-item's [menu_order] to that of former parent.
248 + $menu_item_data['menu_order'] = $menu_item_data['menu_order'] - 1;
249 +
250 + // Save changes.
251 + update_post_meta( $menu_item_data['ID'], '_menu_item_menu_item_parent', (int) $menu_item_data['menu_item_parent'] );
252 + wp_update_post( $menu_item_data );
253 + wp_update_post( $parent_data );
254 + }
255 +
256 + // Else this menu item is not a child of the previous.
257 + } elseif ( empty( $menu_item_data['menu_order'] )
258 + || empty( $menu_item_data['menu_item_parent'] )
259 + || ! in_array( (int) $menu_item_data['menu_item_parent'], array_keys( $dbids_to_orders ), true )
260 + || empty( $orders_to_dbids[ $dbids_to_orders[ $menu_item_id ] - 1 ] )
261 + || $orders_to_dbids[ $dbids_to_orders[ $menu_item_id ] - 1 ] !== (int) $menu_item_data['menu_item_parent']
262 + ) {
263 + // Just make it a child of the previous; keep the order.
264 + $menu_item_data['menu_item_parent'] = (int) $orders_to_dbids[ $dbids_to_orders[ $menu_item_id ] - 1 ];
265 +
266 + // Reset invalid `menu_item_parent`.
267 + $menu_item_data = _wp_reset_invalid_menu_item_parent( $menu_item_data );
268 +
269 + update_post_meta( $menu_item_data['ID'], '_menu_item_menu_item_parent', (int) $menu_item_data['menu_item_parent'] );
270 + wp_update_post( $menu_item_data );
271 + }
272 + }
273 + }
274 + }
275 +
276 + break;
277 +
278 + case 'delete-menu-item':
279 + $menu_item_id = (int) $_REQUEST['menu-item'];
280 +
281 + check_admin_referer( 'delete-menu_item_' . $menu_item_id );
282 +
283 + if ( is_nav_menu_item( $menu_item_id ) && wp_delete_post( $menu_item_id, true ) ) {
284 + $messages[] = wp_get_admin_notice(
285 + __( 'The menu item has been successfully deleted.' ),
286 + array(
287 + 'id' => 'message',
288 + 'additional_classes' => array( 'updated' ),
289 + 'dismissible' => true,
290 + )
291 + );
292 + }
293 +
294 + break;
295 +
296 + case 'delete':
297 + check_admin_referer( 'delete-nav_menu-' . $nav_menu_selected_id );
298 +
299 + if ( is_nav_menu( $nav_menu_selected_id ) ) {
300 + $deletion = wp_delete_nav_menu( $nav_menu_selected_id );
301 + } else {
302 + // Reset the selected menu.
303 + $nav_menu_selected_id = 0;
304 + unset( $_REQUEST['menu'] );
305 + }
306 +
307 + if ( ! isset( $deletion ) ) {
308 + break;
309 + }
310 +
311 + if ( is_wp_error( $deletion ) ) {
312 + $messages[] = wp_get_admin_notice(
313 + $deletion->get_error_message(),
314 + array(
315 + 'id' => 'message',
316 + 'additional_classes' => array( 'error' ),
317 + 'dismissible' => true,
318 + )
319 + );
320 + } else {
321 + $messages[] = wp_get_admin_notice(
322 + __( 'The menu has been successfully deleted.' ),
323 + array(
324 + 'id' => 'message',
325 + 'additional_classes' => array( 'updated' ),
326 + 'dismissible' => true,
327 + )
328 + );
329 + }
330 +
331 + break;
332 +
333 + case 'delete_menus':
334 + check_admin_referer( 'nav_menus_bulk_actions' );
335 +
336 + foreach ( $_REQUEST['delete_menus'] as $menu_id_to_delete ) {
337 + if ( ! is_nav_menu( $menu_id_to_delete ) ) {
338 + continue;
339 + }
340 +
341 + $deletion = wp_delete_nav_menu( $menu_id_to_delete );
342 +
343 + if ( is_wp_error( $deletion ) ) {
344 + $messages[] = wp_get_admin_notice(
345 + $deletion->get_error_message(),
346 + array(
347 + 'id' => 'message',
348 + 'additional_classes' => array( 'error' ),
349 + 'dismissible' => true,
350 + )
351 + );
352 + $deletion_error = true;
353 + }
354 + }
355 +
356 + if ( empty( $deletion_error ) ) {
357 + $messages[] = wp_get_admin_notice(
358 + __( 'Selected menus have been successfully deleted.' ),
359 + array(
360 + 'id' => 'message',
361 + 'additional_classes' => array( 'updated' ),
362 + 'dismissible' => true,
363 + )
364 + );
365 + }
366 +
367 + break;
368 +
369 + case 'update':
370 + check_admin_referer( 'update-nav_menu', 'update-nav-menu-nonce' );
371 +
372 + // Merge new and existing menu locations if any new ones are set.
373 + $new_menu_locations = array();
374 + if ( isset( $_POST['menu-locations'] ) ) {
375 + $new_menu_locations = array_map( 'absint', $_POST['menu-locations'] );
376 + $menu_locations = array_merge( $menu_locations, $new_menu_locations );
377 + }
378 +
379 + // Add Menu.
380 + if ( 0 === $nav_menu_selected_id ) {
381 + $new_menu_title = trim( esc_html( $_POST['menu-name'] ) );
382 +
383 + if ( $new_menu_title ) {
384 + $_nav_menu_selected_id = wp_update_nav_menu_object( 0, array( 'menu-name' => $new_menu_title ) );
385 +
386 + if ( is_wp_error( $_nav_menu_selected_id ) ) {
387 + $messages[] = wp_get_admin_notice(
388 + $_nav_menu_selected_id->get_error_message(),
389 + array(
390 + 'id' => 'message',
391 + 'additional_classes' => array( 'error' ),
392 + 'dismissible' => true,
393 + )
394 + );
395 + } else {
396 + $_menu_object = wp_get_nav_menu_object( $_nav_menu_selected_id );
397 + $nav_menu_selected_id = $_nav_menu_selected_id;
398 + $nav_menu_selected_title = $_menu_object->name;
399 +
400 + if ( isset( $_REQUEST['menu-item'] ) ) {
401 + wp_save_nav_menu_items( $nav_menu_selected_id, absint( $_REQUEST['menu-item'] ) );
402 + }
403 +
404 + if ( isset( $_REQUEST['zero-menu-state'] ) || ! empty( $_POST['auto-add-pages'] ) ) {
405 + // If there are menu items, add them.
406 + wp_nav_menu_update_menu_items( $nav_menu_selected_id, $nav_menu_selected_title );
407 + }
408 +
409 + if ( isset( $_REQUEST['zero-menu-state'] ) ) {
410 + // Auto-save nav_menu_locations.
411 + $locations = get_nav_menu_locations();
412 +
413 + foreach ( $locations as $location => $menu_id ) {
414 + $locations[ $location ] = $nav_menu_selected_id;
415 + break; // There should only be 1.
416 + }
417 +
418 + set_theme_mod( 'nav_menu_locations', $locations );
419 + } elseif ( count( $new_menu_locations ) > 0 ) {
420 + // If locations have been selected for the new menu, save those.
421 + $locations = get_nav_menu_locations();
422 +
423 + foreach ( array_keys( $new_menu_locations ) as $location ) {
424 + $locations[ $location ] = $nav_menu_selected_id;
425 + }
426 +
427 + set_theme_mod( 'nav_menu_locations', $locations );
428 + }
429 +
430 + if ( isset( $_REQUEST['use-location'] ) ) {
431 + $locations = get_registered_nav_menus();
432 + $menu_locations = get_nav_menu_locations();
433 +
434 + if ( isset( $locations[ $_REQUEST['use-location'] ] ) ) {
435 + $menu_locations[ $_REQUEST['use-location'] ] = $nav_menu_selected_id;
436 + }
437 +
438 + set_theme_mod( 'nav_menu_locations', $menu_locations );
439 + }
440 +
441 + wp_redirect( admin_url( 'nav-menus.php?menu=' . $_nav_menu_selected_id ) );
442 + exit;
443 + }
444 + } else {
445 + $messages[] = wp_get_admin_notice(
446 + __( 'Please enter a valid menu name.' ),
447 + array(
448 + 'id' => 'message',
449 + 'additional_classes' => array( 'error' ),
450 + 'dismissible' => true,
451 + )
452 + );
453 + }
454 +
455 + // Update existing menu.
456 + } else {
457 + // Remove menu locations that have been unchecked.
458 + foreach ( $locations as $location => $description ) {
459 + if ( ( empty( $_POST['menu-locations'] ) || empty( $_POST['menu-locations'][ $location ] ) )
460 + && isset( $menu_locations[ $location ] ) && $menu_locations[ $location ] === $nav_menu_selected_id
461 + ) {
462 + unset( $menu_locations[ $location ] );
463 + }
464 + }
465 +
466 + // Set menu locations.
467 + set_theme_mod( 'nav_menu_locations', $menu_locations );
468 +
469 + $_menu_object = wp_get_nav_menu_object( $nav_menu_selected_id );
470 +
471 + $menu_title = trim( esc_html( $_POST['menu-name'] ) );
472 +
473 + if ( ! $menu_title ) {
474 + $messages[] = wp_get_admin_notice(
475 + __( 'Please enter a valid menu name.' ),
476 + array(
477 + 'id' => 'message',
478 + 'additional_classes' => array( 'error' ),
479 + 'dismissible' => true,
480 + )
481 + );
482 + $menu_title = $_menu_object->name;
483 + }
484 +
485 + if ( ! is_wp_error( $_menu_object ) ) {
486 + $_nav_menu_selected_id = wp_update_nav_menu_object( $nav_menu_selected_id, array( 'menu-name' => $menu_title ) );
487 +
488 + if ( is_wp_error( $_nav_menu_selected_id ) ) {
489 + $_menu_object = $_nav_menu_selected_id;
490 + $messages[] = wp_get_admin_notice(
491 + $_nav_menu_selected_id->get_error_message(),
492 + array(
493 + 'id' => 'message',
494 + 'additional_classes' => array( 'error' ),
495 + 'dismissible' => true,
496 + )
497 + );
498 + } else {
499 + $_menu_object = wp_get_nav_menu_object( $_nav_menu_selected_id );
500 + $nav_menu_selected_title = $_menu_object->name;
501 + }
502 + }
503 +
504 + // Update menu items.
505 + if ( ! is_wp_error( $_menu_object ) ) {
506 + $messages = array_merge( $messages, wp_nav_menu_update_menu_items( $_nav_menu_selected_id, $nav_menu_selected_title ) );
507 +
508 + // If the menu ID changed, redirect to the new URL.
509 + if ( $nav_menu_selected_id !== $_nav_menu_selected_id ) {
510 + wp_redirect( admin_url( 'nav-menus.php?menu=' . (int) $_nav_menu_selected_id ) );
511 + exit;
512 + }
513 + }
514 + }
515 +
516 + break;
517 +
518 + case 'locations':
519 + if ( ! $num_locations ) {
520 + wp_redirect( admin_url( 'nav-menus.php' ) );
521 + exit;
522 + }
523 +
524 + add_filter( 'screen_options_show_screen', '__return_false' );
525 +
526 + if ( isset( $_POST['menu-locations'] ) ) {
527 + check_admin_referer( 'save-menu-locations' );
528 +
529 + $new_menu_locations = array_map( 'absint', $_POST['menu-locations'] );
530 + $menu_locations = array_merge( $menu_locations, $new_menu_locations );
531 + // Set menu locations.
532 + set_theme_mod( 'nav_menu_locations', $menu_locations );
533 +
534 + $messages[] = wp_get_admin_notice(
535 + __( 'Menu locations updated.' ),
536 + array(
537 + 'id' => 'message',
538 + 'additional_classes' => array( 'updated' ),
539 + 'dismissible' => true,
540 + )
541 + );
542 + }
543 +
544 + break;
545 + }
546 +
547 + // Get all nav menus.
548 + $nav_menus = wp_get_nav_menus();
549 + $menu_count = count( $nav_menus );
550 +
551 + // Are we on the add new screen?
552 + $add_new_screen = ( isset( $_GET['menu'] ) && 0 === (int) $_GET['menu'] ) ? true : false;
553 +
554 + $locations_screen = ( isset( $_GET['action'] ) && 'locations' === $_GET['action'] ) ? true : false;
555 +
556 + $page_count = wp_count_posts( 'page' );
557 +
558 + /*
559 + * If we have one theme location, and zero menus, we take them right
560 + * into editing their first menu.
561 + */
562 + if ( 1 === count( get_registered_nav_menus() ) && ! $add_new_screen
563 + && empty( $nav_menus ) && ! empty( $page_count->publish )
564 + ) {
565 + $one_theme_location_no_menus = true;
566 + } else {
567 + $one_theme_location_no_menus = false;
568 + }
569 +
570 + $nav_menus_l10n = array(
571 + 'oneThemeLocationNoMenus' => $one_theme_location_no_menus,
572 + 'moveUp' => __( 'Move up one' ),
573 + 'moveDown' => __( 'Move down one' ),
574 + 'moveToTop' => __( 'Move to the top' ),
575 + /* translators: %s: Previous item name. */
576 + 'moveUnder' => __( 'Move under %s' ),
577 + /* translators: %s: Previous item name. */
578 + 'moveOutFrom' => __( 'Move out from under %s' ),
579 + /* translators: %s: Previous item name. */
580 + 'under' => __( 'Under %s' ),
581 + /* translators: %s: Previous item name. */
582 + 'outFrom' => __( 'Out from under %s' ),
583 + /* translators: 1: Item name, 2: Item type, 3: Item index, 4: Total items. */
584 + 'menuFocus' => __( 'Edit %1$s (%2$s, %3$d of %4$d)' ),
585 + /* translators: 1: Item name, 2: Item type, 3: Item index, 4: Total items, 5: Item parent. */
586 + 'subMenuFocus' => __( 'Edit %1$s (%2$s, sub-item %3$d of %4$d under %5$s)' ),
587 + /* translators: 1: Item name, 2: Item type, 3: Item index, 4: Total items, 5: Item parent, 6: Item depth. */
588 + 'subMenuMoreDepthFocus' => __( 'Edit %1$s (%2$s, sub-item %3$d of %4$d under %5$s, level %6$d)' ),
589 + /* translators: %s: Item name. */
590 + 'menuItemDeletion' => __( 'item %s' ),
591 + /* translators: %s: Item name. */
592 + 'itemsDeleted' => __( 'Deleted menu item: %s.' ),
593 + 'itemAdded' => __( 'Menu item added' ),
594 + 'itemRemoved' => __( 'Menu item removed' ),
595 + 'movedUp' => __( 'Menu item moved up' ),
596 + 'movedDown' => __( 'Menu item moved down' ),
597 + 'movedTop' => __( 'Menu item moved to the top' ),
598 + 'movedLeft' => __( 'Menu item moved out of submenu' ),
599 + 'movedRight' => __( 'Menu item is now a sub-item' ),
600 + 'parentUpdated' => __( 'Menu parent updated' ),
601 + 'orderUpdated' => __( 'Menu order updated' ),
602 + );
603 + wp_localize_script( 'nav-menu', 'menus', $nav_menus_l10n );
604 +
605 + /*
606 + * Redirect to add screen if there are no menus and this users has either zero,
607 + * or more than 1 theme locations.
608 + */
609 + if ( 0 === $menu_count && ! $add_new_screen && ! $one_theme_location_no_menus ) {
610 + wp_redirect( admin_url( 'nav-menus.php?action=edit&menu=0' ) );
611 + }
612 +
613 + // Get recently edited nav menu.
614 + $recently_edited = absint( get_user_option( 'nav_menu_recently_edited' ) );
615 + if ( empty( $recently_edited ) && is_nav_menu( $nav_menu_selected_id ) ) {
616 + $recently_edited = $nav_menu_selected_id;
617 + }
618 +
619 + // Use $recently_edited if none are selected.
620 + if ( empty( $nav_menu_selected_id ) && ! isset( $_GET['menu'] ) && is_nav_menu( $recently_edited ) ) {
621 + $nav_menu_selected_id = $recently_edited;
622 + }
623 +
624 + // On deletion of menu, if another menu exists, show it.
625 + if ( ! $add_new_screen && $menu_count > 0 && isset( $_GET['action'] ) && 'delete' === $_GET['action'] ) {
626 + $nav_menu_selected_id = $nav_menus[0]->term_id;
627 + }
628 +
629 + // Set $nav_menu_selected_id to 0 if no menus.
630 + if ( $one_theme_location_no_menus ) {
631 + $nav_menu_selected_id = 0;
632 + } elseif ( empty( $nav_menu_selected_id ) && ! empty( $nav_menus ) && ! $add_new_screen ) {
633 + // If we have no selection yet, and we have menus, set to the first one in the list.
634 + $nav_menu_selected_id = $nav_menus[0]->term_id;
635 + }
636 +
637 + // Update the user's setting.
638 + if ( $nav_menu_selected_id !== $recently_edited && is_nav_menu( $nav_menu_selected_id ) ) {
639 + update_user_meta( $current_user->ID, 'nav_menu_recently_edited', $nav_menu_selected_id );
640 + }
641 +
642 + // If there's a menu, get its name.
643 + if ( ! $nav_menu_selected_title && is_nav_menu( $nav_menu_selected_id ) ) {
644 + $_menu_object = wp_get_nav_menu_object( $nav_menu_selected_id );
645 + $nav_menu_selected_title = ! is_wp_error( $_menu_object ) ? $_menu_object->name : '';
646 + }
647 +
648 + // Generate truncated menu names.
649 + foreach ( (array) $nav_menus as $key => $_nav_menu ) {
650 + $nav_menus[ $key ]->truncated_name = wp_html_excerpt( $_nav_menu->name, 40, '&hellip;' );
651 + }
652 +
653 + // Retrieve menu locations.
654 + if ( current_theme_supports( 'menus' ) ) {
655 + $locations = get_registered_nav_menus();
656 + $menu_locations = get_nav_menu_locations();
657 + }
658 +
659 + /*
660 + * Ensure the user will be able to scroll horizontally
661 + * by adding a class for the max menu depth.
662 + *
663 + * @global int $_wp_nav_menu_max_depth
664 + */
665 + global $_wp_nav_menu_max_depth;
666 + $_wp_nav_menu_max_depth = 0;
667 +
668 + // Calling wp_get_nav_menu_to_edit generates $_wp_nav_menu_max_depth.
669 + if ( is_nav_menu( $nav_menu_selected_id ) ) {
670 + $menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array( 'post_status' => 'any' ) );
671 + $edit_markup = wp_get_nav_menu_to_edit( $nav_menu_selected_id );
672 + }
673 +
674 + /**
675 + * @since 3.0.0
676 + *
677 + * @global int $_wp_nav_menu_max_depth
678 + *
679 + * @param string $classes
680 + * @return string
681 + */
682 + function wp_nav_menu_max_depth( $classes ) {
683 + global $_wp_nav_menu_max_depth;
684 + return "$classes menu-max-depth-$_wp_nav_menu_max_depth";
685 + }
686 +
687 + add_filter( 'admin_body_class', 'wp_nav_menu_max_depth' );
688 +
689 + wp_nav_menu_setup();
690 + wp_initial_nav_menu_meta_boxes();
691 +
692 + if ( ! current_theme_supports( 'menus' ) && ! $num_locations ) {
693 + $message_no_theme_support = sprintf(
694 + /* translators: %s: URL to Widgets screen. */
695 + __( 'Your theme does not natively support menus, but you can use them in sidebars by adding a &#8220;Navigation Menu&#8221; widget on the <a href="%s">Widgets</a> screen.' ),
696 + admin_url( 'widgets.php' )
697 + );
698 + $messages[] = wp_get_admin_notice(
699 + $message_no_theme_support,
700 + array(
701 + 'id' => 'message',
702 + 'additional_classes' => array( 'updated' ),
703 + 'dismissible' => true,
704 + )
705 + );
706 + }
707 +
708 + if ( ! $locations_screen ) : // Main tab.
709 + $overview = '<p>' . __( 'This screen is used for managing your navigation menus.' ) . '</p>';
710 + $overview .= '<p>' . sprintf(
711 + /* translators: 1: URL to Widgets screen, 2 and 3: The names of the default themes. */
712 + __( 'Menus can be displayed in locations defined by your theme, even used in sidebars by adding a &#8220;Navigation Menu&#8221; widget on the <a href="%1$s">Widgets</a> screen. If your theme does not support the navigation menus feature (the default themes, %2$s and %3$s, do), you can learn about adding this support by following the documentation link to the side.' ),
713 + admin_url( 'widgets.php' ),
714 + 'Twenty Twenty',
715 + 'Twenty Twenty-One'
716 + ) . '</p>';
717 + $overview .= '<p>' . __( 'From this screen you can:' ) . '</p>';
718 + $overview .= '<ul><li>' . __( 'Create, edit, and delete menus' ) . '</li>';
719 + $overview .= '<li>' . __( 'Add, organize, and modify individual menu items' ) . '</li></ul>';
720 +
721 + get_current_screen()->add_help_tab(
722 + array(
723 + 'id' => 'overview',
724 + 'title' => __( 'Overview' ),
725 + 'content' => $overview,
726 + )
727 + );
728 +
729 + $menu_management = '<p>' . __( 'The menu management box at the top of the screen is used to control which menu is opened in the editor below.' ) . '</p>';
730 + $menu_management .= '<ul><li>' . __( 'To edit an existing menu, <strong>choose a menu from the dropdown and click Select</strong>' ) . '</li>';
731 + $menu_management .= '<li>' . __( 'If you have not yet created any menus, <strong>click the &#8217;create a new menu&#8217; link</strong> to get started' ) . '</li></ul>';
732 + $menu_management .= '<p>' . __( 'You can assign theme locations to individual menus by <strong>selecting the desired settings</strong> at the bottom of the menu editor. To assign menus to all theme locations at once, <strong>visit the Manage Locations tab</strong> at the top of the screen.' ) . '</p>';
733 +
734 + get_current_screen()->add_help_tab(
735 + array(
736 + 'id' => 'menu-management',
737 + 'title' => __( 'Menu Management' ),
738 + 'content' => $menu_management,
739 + )
740 + );
741 +
742 + $editing_menus = '<p>' . __( 'Each navigation menu may contain a mix of links to pages, categories, custom URLs or other content types. Menu links are added by selecting items from the expanding boxes in the left-hand column below.' ) . '</p>';
743 + $editing_menus .= '<p>' . __( '<strong>Clicking the arrow to the right of any menu item</strong> in the editor will reveal a standard group of settings. Additional settings such as link target, CSS classes, link relationships, and link descriptions can be enabled and disabled via the Screen Options tab.' ) . '</p>';
744 + $editing_menus .= '<ul><li>' . __( 'Add one or several items at once by <strong>selecting the checkbox next to each item and clicking Add to Menu</strong>' ) . '</li>';
745 + $editing_menus .= '<li>' . __( 'To add a custom link, <strong>expand the Custom Links section, enter a URL and link text, and click Add to Menu</strong>' ) . '</li>';
746 + $editing_menus .= '<li>' . __( 'To reorganize menu items, <strong>drag and drop items with your mouse or use your keyboard</strong>. Drag or move a menu item a little to the right to make it a submenu' ) . '</li>';
747 + $editing_menus .= '<li>' . __( 'Delete a menu item by <strong>expanding it and clicking the Remove link</strong>' ) . '</li></ul>';
748 +
749 + get_current_screen()->add_help_tab(
750 + array(
751 + 'id' => 'editing-menus',
752 + 'title' => __( 'Editing Menus' ),
753 + 'content' => $editing_menus,
754 + )
755 + );
756 + else : // Locations tab.
757 + $locations_overview = '<p>' . __( 'This screen is used for globally assigning menus to locations defined by your theme.' ) . '</p>';
758 + $locations_overview .= '<ul><li>' . __( 'To assign menus to one or more theme locations, <strong>select a menu from each location&#8217;s dropdown</strong>. When you are finished, <strong>click Save Changes</strong>' ) . '</li>';
759 + $locations_overview .= '<li>' . __( 'To edit a menu currently assigned to a theme location, <strong>click the adjacent &#8217;Edit&#8217; link</strong>' ) . '</li>';
760 + $locations_overview .= '<li>' . __( 'To add a new menu instead of assigning an existing one, <strong>click the &#8217;Use new menu&#8217; link</strong>. Your new menu will be automatically assigned to that theme location' ) . '</li></ul>';
761 +
762 + get_current_screen()->add_help_tab(
763 + array(
764 + 'id' => 'locations-overview',
765 + 'title' => __( 'Overview' ),
766 + 'content' => $locations_overview,
767 + )
768 + );
769 + endif;
770 +
771 + get_current_screen()->set_help_sidebar(
772 + '<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
773 + '<p>' . __( '<a href="https://wordpress.org/documentation/article/appearance-menus-screen/">Documentation on Menus</a>' ) . '</p>' .
774 + '<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>'
775 + );
776 +
777 + // Get the admin header.
778 + require_once ABSPATH . 'wp-admin/admin-header.php';
779 + ?>
780 + <div class="wrap">
781 + <h1 class="wp-heading-inline"><?php esc_html_e( 'Menus' ); ?></h1>
782 + <?php
783 + if ( current_user_can( 'customize' ) ) :
784 + $focus = $locations_screen ? array( 'section' => 'menu_locations' ) : array( 'panel' => 'nav_menus' );
785 + printf(
786 + ' <a class="page-title-action hide-if-no-customize" href="%1$s">%2$s</a>',
787 + esc_url(
788 + add_query_arg(
789 + array(
790 + array( 'autofocus' => $focus ),
791 + 'return' => urlencode( remove_query_arg( wp_removable_query_args(), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ),
792 + ),
793 + admin_url( 'customize.php' )
794 + )
795 + ),
796 + __( 'Manage with Live Preview' )
797 + );
798 + endif;
799 +
800 + $nav_tab_active_class = '';
801 + $nav_aria_current = '';
802 +
803 + if ( ! isset( $_GET['action'] ) || isset( $_GET['action'] ) && 'locations' !== $_GET['action'] ) {
804 + $nav_tab_active_class = ' nav-tab-active';
805 + $nav_aria_current = ' aria-current="page"';
806 + }
807 + ?>
808 +
809 + <hr class="wp-header-end">
810 +
811 + <nav class="nav-tab-wrapper wp-clearfix" aria-label="<?php esc_attr_e( 'Secondary menu' ); ?>">
812 + <a href="<?php echo esc_url( admin_url( 'nav-menus.php' ) ); ?>" class="nav-tab<?php echo $nav_tab_active_class; ?>"<?php echo $nav_aria_current; ?>><?php esc_html_e( 'Edit Menus' ); ?></a>
813 + <?php
814 + if ( $num_locations && $menu_count ) {
815 + $active_tab_class = '';
816 + $aria_current = '';
817 +
818 + if ( $locations_screen ) {
819 + $active_tab_class = ' nav-tab-active';
820 + $aria_current = ' aria-current="page"';
821 + }
822 + ?>
823 + <a href="<?php echo esc_url( add_query_arg( array( 'action' => 'locations' ), admin_url( 'nav-menus.php' ) ) ); ?>" class="nav-tab<?php echo $active_tab_class; ?>"<?php echo $aria_current; ?>><?php esc_html_e( 'Manage Locations' ); ?></a>
824 + <?php
825 + }
826 + ?>
827 + </nav>
828 + <?php
829 + foreach ( $messages as $message ) :
830 + echo $message . "\n";
831 + endforeach;
832 + ?>
833 + <?php
834 + if ( $locations_screen ) :
835 + if ( 1 === $num_locations ) {
836 + echo '<p>' . __( 'Your theme supports one menu. Select which menu you would like to use.' ) . '</p>';
837 + } else {
838 + echo '<p>' . sprintf(
839 + /* translators: %s: Number of menus. */
840 + _n(
841 + 'Your theme supports %s menu. Select which menu appears in each location.',
842 + 'Your theme supports %s menus. Select which menu appears in each location.',
843 + $num_locations
844 + ),
845 + number_format_i18n( $num_locations )
846 + ) . '</p>';
847 + }
848 + ?>
849 + <div id="menu-locations-wrap">
850 + <form method="post" action="<?php echo esc_url( add_query_arg( array( 'action' => 'locations' ), admin_url( 'nav-menus.php' ) ) ); ?>">
851 + <table class="widefat fixed" id="menu-locations-table">
852 + <thead>
853 + <tr>
854 + <th scope="col" class="manage-column column-locations"><?php _e( 'Theme Location' ); ?></th>
855 + <th scope="col" class="manage-column column-menus"><?php _e( 'Assigned Menu' ); ?></th>
856 + </tr>
857 + </thead>
858 + <tbody class="menu-locations">
859 + <?php foreach ( $locations as $_location => $_name ) { ?>
860 + <tr class="menu-locations-row">
861 + <td class="menu-location-title"><label for="locations-<?php echo $_location; ?>"><?php echo $_name; ?></label></td>
862 + <td class="menu-location-menus">
863 + <select name="menu-locations[<?php echo $_location; ?>]" id="locations-<?php echo $_location; ?>">
864 + <option value="0"><?php printf( '&mdash; %s &mdash;', esc_html__( 'Select a Menu' ) ); ?></option>
865 + <?php
866 + foreach ( $nav_menus as $menu ) :
867 + $data_orig = '';
868 + $selected = isset( $menu_locations[ $_location ] ) && $menu_locations[ $_location ] === $menu->term_id;
869 +
870 + if ( $selected ) {
871 + $data_orig = 'data-orig="true"';
872 + }
873 + ?>
874 + <option <?php echo $data_orig; ?> <?php selected( $selected ); ?> value="<?php echo $menu->term_id; ?>">
875 + <?php echo wp_html_excerpt( $menu->name, 40, '&hellip;' ); ?>
876 + </option>
877 + <?php endforeach; ?>
878 + </select>
879 + <div class="locations-row-links">
880 + <?php if ( isset( $menu_locations[ $_location ] ) && 0 !== $menu_locations[ $_location ] ) : ?>
881 + <span class="locations-edit-menu-link">
882 + <?php
883 + printf(
884 + '<a href="%1$s">
885 + <span aria-hidden="true">%2$s</span>
886 + <span class="screen-reader-text">%3$s</span>
887 + </a>',
888 + esc_url(
889 + add_query_arg(
890 + array(
891 + 'action' => 'edit',
892 + 'menu' => $menu_locations[ $_location ],
893 + ),
894 + admin_url( 'nav-menus.php' )
895 + )
896 + ),
897 + _x( 'Edit', 'menu' ),
898 + /* translators: Hidden accessibility text. */
899 + __( 'Edit selected menu' )
900 + );
901 + ?>
902 + </span>
903 + <?php endif; ?>
904 + <span class="locations-add-menu-link">
905 + <?php
906 + printf(
907 + '<a href="%1$s">%2$s</a>',
908 + esc_url(
909 + add_query_arg(
910 + array(
911 + 'action' => 'edit',
912 + 'menu' => 0,
913 + 'use-location' => $_location,
914 + ),
915 + admin_url( 'nav-menus.php' )
916 + )
917 + ),
918 + _x( 'Use new menu', 'menu' )
919 + );
920 + ?>
921 + </span>
922 + </div><!-- .locations-row-links -->
923 + </td><!-- .menu-location-menus -->
924 + </tr><!-- .menu-locations-row -->
925 + <?php } // End foreach. ?>
926 + </tbody>
927 + </table>
928 + <p class="button-controls wp-clearfix"><?php submit_button( __( 'Save Changes' ), 'primary left', 'nav-menu-locations', false ); ?></p>
929 + <?php wp_nonce_field( 'save-menu-locations' ); ?>
930 + <input type="hidden" name="menu" id="nav-menu-meta-object-id" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" />
931 + </form>
932 + </div><!-- #menu-locations-wrap -->
933 + <?php
934 + /**
935 + * Fires after the menu locations table is displayed.
936 + *
937 + * @since 3.6.0
938 + */
939 + do_action( 'after_menu_locations_table' );
940 + ?>
941 + <?php else : ?>
942 + <div class="manage-menus">
943 + <?php if ( $menu_count < 1 ) : ?>
944 + <span class="first-menu-message">
945 + <?php _e( 'Create your first menu below.' ); ?>
946 + <span class="screen-reader-text">
947 + <?php
948 + /* translators: Hidden accessibility text. */
949 + _e( 'Fill in the Menu Name and click the Create Menu button to create your first menu.' );
950 + ?>
951 + </span>
952 + </span><!-- /first-menu-message -->
953 + <?php elseif ( $menu_count < 2 ) : ?>
954 + <span class="add-edit-menu-action">
955 + <?php
956 + printf(
957 + /* translators: %s: URL to create a new menu. */
958 + __( 'Edit your menu below, or <a href="%s">create a new menu</a>. Do not forget to save your changes!' ),
959 + esc_url(
960 + add_query_arg(
961 + array(
962 + 'action' => 'edit',
963 + 'menu' => 0,
964 + ),
965 + admin_url( 'nav-menus.php' )
966 + )
967 + )
968 + );
969 + ?>
970 + <span class="screen-reader-text">
971 + <?php
972 + /* translators: Hidden accessibility text. */
973 + _e( 'Click the Save Menu button to save your changes.' );
974 + ?>
975 + </span>
976 + </span><!-- /add-edit-menu-action -->
977 + <?php else : ?>
978 + <form method="get" action="<?php echo esc_url( admin_url( 'nav-menus.php' ) ); ?>">
979 + <input type="hidden" name="action" value="edit" />
980 + <label for="select-menu-to-edit" class="selected-menu"><?php _e( 'Select a menu to edit:' ); ?></label>
981 + <select name="menu" id="select-menu-to-edit">
982 + <?php if ( $add_new_screen ) : ?>
983 + <option value="0" selected="selected"><?php _e( '&mdash; Select &mdash;' ); ?></option>
984 + <?php endif; ?>
985 + <?php foreach ( (array) $nav_menus as $_nav_menu ) : ?>
986 + <option value="<?php echo esc_attr( $_nav_menu->term_id ); ?>" <?php selected( $_nav_menu->term_id, $nav_menu_selected_id ); ?>>
987 + <?php
988 + echo esc_html( $_nav_menu->truncated_name );
989 +
990 + if ( ! empty( $menu_locations ) && in_array( $_nav_menu->term_id, $menu_locations, true ) ) {
991 + $locations_assigned_to_this_menu = array();
992 +
993 + foreach ( array_keys( $menu_locations, $_nav_menu->term_id, true ) as $menu_location_key ) {
994 + if ( isset( $locations[ $menu_location_key ] ) ) {
995 + $locations_assigned_to_this_menu[] = $locations[ $menu_location_key ];
996 + }
997 + }
998 +
999 + /**
1000 + * Filters the number of locations listed per menu in the drop-down select.
1001 + *
1002 + * @since 3.6.0
1003 + *
1004 + * @param int $locations Number of menu locations to list. Default 3.
1005 + */
1006 + $locations_listed_per_menu = absint( apply_filters( 'wp_nav_locations_listed_per_menu', 3 ) );
1007 +
1008 + $assigned_locations = array_slice( $locations_assigned_to_this_menu, 0, $locations_listed_per_menu );
1009 +
1010 + // Adds ellipses following the number of locations defined in $assigned_locations.
1011 + if ( ! empty( $assigned_locations ) ) {
1012 + printf(
1013 + ' (%1$s%2$s)',
1014 + implode( ', ', $assigned_locations ),
1015 + count( $locations_assigned_to_this_menu ) > count( $assigned_locations ) ? ' &hellip;' : ''
1016 + );
1017 + }
1018 + }
1019 + ?>
1020 + </option>
1021 + <?php endforeach; ?>
1022 + </select>
1023 + <span class="submit-btn"><input type="submit" class="button" value="<?php esc_attr_e( 'Select' ); ?>"></span>
1024 + <span class="add-new-menu-action">
1025 + <?php
1026 + printf(
1027 + /* translators: %s: URL to create a new menu. */
1028 + __( 'or <a href="%s">create a new menu</a>. Do not forget to save your changes!' ),
1029 + esc_url(
1030 + add_query_arg(
1031 + array(
1032 + 'action' => 'edit',
1033 + 'menu' => 0,
1034 + ),
1035 + admin_url( 'nav-menus.php' )
1036 + )
1037 + )
1038 + );
1039 + ?>
1040 + <span class="screen-reader-text">
1041 + <?php
1042 + /* translators: Hidden accessibility text. */
1043 + _e( 'Click the Save Menu button to save your changes.' );
1044 + ?>
1045 + </span>
1046 + </span><!-- /add-new-menu-action -->
1047 + </form>
1048 + <?php
1049 + endif;
1050 +
1051 + $metabox_holder_disabled_class = '';
1052 +
1053 + if ( isset( $_GET['menu'] ) && 0 === (int) $_GET['menu'] ) {
1054 + $metabox_holder_disabled_class = ' metabox-holder-disabled';
1055 + }
1056 + ?>
1057 + </div><!-- /manage-menus -->
1058 + <div id="nav-menus-frame" class="wp-clearfix">
1059 + <div id="menu-settings-column" class="metabox-holder<?php echo $metabox_holder_disabled_class; ?>">
1060 +
1061 + <div class="clear"></div>
1062 +
1063 + <form id="nav-menu-meta" class="nav-menu-meta" method="post" enctype="multipart/form-data">
1064 + <input type="hidden" name="menu" id="nav-menu-meta-object-id" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" />
1065 + <input type="hidden" name="action" value="add-menu-item" />
1066 + <?php wp_nonce_field( 'add-menu_item', 'menu-settings-column-nonce' ); ?>
1067 + <h2><?php _e( 'Add menu items' ); ?></h2>
1068 + <?php do_accordion_sections( 'nav-menus', 'side', null ); ?>
1069 + </form>
1070 +
1071 + </div><!-- /#menu-settings-column -->
1072 + <div id="menu-management-liquid">
1073 + <div id="menu-management">
1074 + <form id="update-nav-menu" method="post" enctype="multipart/form-data">
1075 + <h2><?php _e( 'Menu structure' ); ?></h2>
1076 + <div class="menu-edit">
1077 + <input type="hidden" name="nav-menu-data">
1078 + <?php
1079 + wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
1080 + wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
1081 + wp_nonce_field( 'update-nav_menu', 'update-nav-menu-nonce' );
1082 +
1083 + $menu_name_aria_desc = $add_new_screen ? ' aria-describedby="menu-name-desc"' : '';
1084 +
1085 + if ( $one_theme_location_no_menus ) {
1086 + $menu_name_val = 'value="' . esc_attr__( 'Menu 1' ) . '"';
1087 + ?>
1088 + <input type="hidden" name="zero-menu-state" value="true" />
1089 + <?php
1090 + } else {
1091 + $menu_name_val = 'value="' . esc_attr( $nav_menu_selected_title ) . '"';
1092 + }
1093 + ?>
1094 + <input type="hidden" name="action" value="update" />
1095 + <input type="hidden" name="menu" id="menu" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" />
1096 + <div id="nav-menu-header">
1097 + <div class="major-publishing-actions wp-clearfix">
1098 + <label class="menu-name-label" for="menu-name"><?php _e( 'Menu Name' ); ?></label>
1099 + <input name="menu-name" id="menu-name" type="text" class="menu-name regular-text menu-item-textbox form-required" required="required" <?php echo $menu_name_val . $menu_name_aria_desc; ?> />
1100 + <div class="publishing-action">
1101 + <?php submit_button( empty( $nav_menu_selected_id ) ? __( 'Create Menu' ) : __( 'Save Menu' ), 'primary large menu-save', 'save_menu', false, array( 'id' => 'save_menu_header' ) ); ?>
1102 + </div><!-- END .publishing-action -->
1103 + </div><!-- END .major-publishing-actions -->
1104 + </div><!-- END .nav-menu-header -->
1105 + <div id="post-body">
1106 + <div id="post-body-content" class="wp-clearfix">
1107 + <?php if ( ! $add_new_screen ) : ?>
1108 + <?php
1109 + $hide_style = '';
1110 +
1111 + if ( isset( $menu_items ) && 0 === count( $menu_items ) ) {
1112 + $hide_style = 'style="display: none;"';
1113 + }
1114 +
1115 + if ( $one_theme_location_no_menus ) {
1116 + $starter_copy = __( 'Edit your default menu by adding or removing items. Drag the items into the order you prefer. Click Create Menu to save your changes.' );
1117 + } else {
1118 + $starter_copy = __( 'Drag the items into the order you prefer. Click the arrow on the right of the item to reveal additional configuration options.' );
1119 + }
1120 + ?>
1121 + <div class="drag-instructions post-body-plain" <?php echo $hide_style; ?>>
1122 + <p><?php echo $starter_copy; ?></p>
1123 + </div>
1124 +
1125 + <div id="nav-menu-bulk-actions-top" class="bulk-actions" <?php echo $hide_style; ?>>
1126 + <label class="bulk-select-button" for="bulk-select-switcher-top">
1127 + <input type="checkbox" id="bulk-select-switcher-top" name="bulk-select-switcher-top" class="bulk-select-switcher">
1128 + <span class="bulk-select-button-label"><?php _e( 'Bulk Select' ); ?></span>
1129 + </label>
1130 + </div>
1131 +
1132 + <?php
1133 + if ( isset( $edit_markup ) && ! is_wp_error( $edit_markup ) ) {
1134 + echo $edit_markup;
1135 + } else {
1136 + ?>
1137 + <ul class="menu" id="menu-to-edit"></ul>
1138 + <?php } ?>
1139 +
1140 + <?php endif; ?>
1141 +
1142 + <?php if ( $add_new_screen ) : ?>
1143 + <p class="post-body-plain" id="menu-name-desc"><?php _e( 'Give your menu a name, then click Create Menu.' ); ?></p>
1144 + <?php if ( isset( $_GET['use-location'] ) ) : ?>
1145 + <input type="hidden" name="use-location" value="<?php echo esc_attr( $_GET['use-location'] ); ?>" />
1146 + <?php endif; ?>
1147 +
1148 + <?php
1149 + endif;
1150 +
1151 + $no_menus_style = '';
1152 +
1153 + if ( $one_theme_location_no_menus ) {
1154 + $no_menus_style = 'style="display: none;"';
1155 + }
1156 + ?>
1157 +
1158 + <?php if ( ! $add_new_screen ) : ?>
1159 + <div id="nav-menu-bulk-actions-bottom" class="bulk-actions" <?php echo $hide_style; ?>>
1160 + <label class="bulk-select-button" for="bulk-select-switcher-bottom">
1161 + <input type="checkbox" id="bulk-select-switcher-bottom" name="bulk-select-switcher-top" class="bulk-select-switcher">
1162 + <span class="bulk-select-button-label"><?php _e( 'Bulk Select' ); ?></span>
1163 + </label>
1164 + <input type="button" class="deletion menu-items-delete disabled" value="<?php esc_attr_e( 'Remove Selected Items' ); ?>">
1165 + <div id="pending-menu-items-to-delete">
1166 + <p><?php _e( 'List of menu items selected for deletion:' ); ?></p>
1167 + <ul></ul>
1168 + </div>
1169 + </div>
1170 + <?php endif; ?>
1171 +
1172 + <div class="menu-settings" <?php echo $no_menus_style; ?>>
1173 + <h3><?php _e( 'Menu Settings' ); ?></h3>
1174 + <?php
1175 + if ( ! isset( $auto_add ) ) {
1176 + $auto_add = get_option( 'nav_menu_options' );
1177 +
1178 + if ( ! isset( $auto_add['auto_add'] ) ) {
1179 + $auto_add = false;
1180 + } elseif ( false !== array_search( $nav_menu_selected_id, $auto_add['auto_add'], true ) ) {
1181 + $auto_add = true;
1182 + } else {
1183 + $auto_add = false;
1184 + }
1185 + }
1186 + ?>
1187 +
1188 + <fieldset class="menu-settings-group auto-add-pages">
1189 + <legend class="menu-settings-group-name howto"><?php _e( 'Auto add pages' ); ?></legend>
1190 + <div class="menu-settings-input checkbox-input">
1191 + <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>
1192 + </div>
1193 + </fieldset>
1194 +
1195 + <?php if ( current_theme_supports( 'menus' ) ) : ?>
1196 +
1197 + <fieldset class="menu-settings-group menu-theme-locations">
1198 + <legend class="menu-settings-group-name howto"><?php _e( 'Display location' ); ?></legend>
1199 + <?php
1200 + foreach ( $locations as $location => $description ) :
1201 + $checked = false;
1202 +
1203 + if ( isset( $menu_locations[ $location ] )
1204 + && 0 !== $nav_menu_selected_id
1205 + && $menu_locations[ $location ] === $nav_menu_selected_id
1206 + ) {
1207 + $checked = true;
1208 + }
1209 + ?>
1210 + <div class="menu-settings-input checkbox-input">
1211 + <input type="checkbox"<?php checked( $checked ); ?> name="menu-locations[<?php echo esc_attr( $location ); ?>]" id="locations-<?php echo esc_attr( $location ); ?>" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" />
1212 + <label for="locations-<?php echo esc_attr( $location ); ?>"><?php echo $description; ?></label>
1213 + <?php if ( ! empty( $menu_locations[ $location ] ) && $menu_locations[ $location ] !== $nav_menu_selected_id ) : ?>
1214 + <span class="theme-location-set">
1215 + <?php
1216 + printf(
1217 + /* translators: %s: Menu name. */
1218 + _x( '(Currently set to: %s)', 'menu location' ),
1219 + wp_get_nav_menu_object( $menu_locations[ $location ] )->name
1220 + );
1221 + ?>
1222 + </span>
1223 + <?php endif; ?>
1224 + </div>
1225 + <?php endforeach; ?>
1226 + </fieldset>
1227 +
1228 + <?php endif; ?>
1229 +
1230 + </div>
1231 + </div><!-- /#post-body-content -->
1232 + </div><!-- /#post-body -->
1233 + <div id="nav-menu-footer">
1234 + <div class="major-publishing-actions">
1235 + <div class="publishing-action">
1236 + <?php submit_button( empty( $nav_menu_selected_id ) ? __( 'Create Menu' ) : __( 'Save Menu' ), 'primary large menu-save', 'save_menu', false, array( 'id' => 'save_menu_footer' ) ); ?>
1237 + </div><!-- END .publishing-action -->
1238 + <?php if ( $menu_count > 0 ) : ?>
1239 +
1240 + <?php if ( $add_new_screen ) : ?>
1241 + <span class="cancel-action">
1242 + <?php
1243 + printf(
1244 + '<a class="submitcancel cancellation menu-cancel" href="%1$s">%2$s</a>',
1245 + esc_url( admin_url( 'nav-menus.php' ) ),
1246 + __( 'Cancel' )
1247 + );
1248 + ?>
1249 + </span><!-- END .cancel-action -->
1250 + <?php else : ?>
1251 + <span class="delete-action">
1252 + <?php
1253 + printf(
1254 + '<a class="submitdelete deletion menu-delete" href="%1$s">%2$s</a>',
1255 + esc_url(
1256 + wp_nonce_url(
1257 + add_query_arg(
1258 + array(
1259 + 'action' => 'delete',
1260 + 'menu' => $nav_menu_selected_id,
1261 + ),
1262 + admin_url( 'nav-menus.php' )
1263 + ),
1264 + 'delete-nav_menu-' . $nav_menu_selected_id
1265 + )
1266 + ),
1267 + __( 'Delete Menu' )
1268 + );
1269 + ?>
1270 + </span><!-- END .delete-action -->
1271 + <?php endif; ?>
1272 +
1273 + <?php endif; ?>
1274 + </div><!-- END .major-publishing-actions -->
1275 + </div><!-- /#nav-menu-footer -->
1276 + </div><!-- /.menu-edit -->
1277 + </form><!-- /#update-nav-menu -->
1278 + </div><!-- /#menu-management -->
1279 + </div><!-- /#menu-management-liquid -->
1280 + </div><!-- /#nav-menus-frame -->
1281 + <?php endif; ?>
1282 + </div><!-- /.wrap-->
1283 + <?php require_once ABSPATH . 'wp-admin/admin-footer.php'; ?>
1284 +