|
1 <?php |
|
2 /** |
|
3 * Navigation Menu API: Walker_Nav_Menu_Edit class |
|
4 * |
|
5 * @package WordPress |
|
6 * @subpackage Administration |
|
7 * @since 4.4.0 |
|
8 */ |
|
9 |
|
10 /** |
|
11 * Create HTML list of nav menu input items. |
|
12 * |
|
13 * @since 3.0.0 |
|
14 * |
|
15 * @see Walker_Nav_Menu |
|
16 */ |
|
17 class Walker_Nav_Menu_Edit extends Walker_Nav_Menu { |
|
18 /** |
|
19 * Starts the list before the elements are added. |
|
20 * |
|
21 * @see Walker_Nav_Menu::start_lvl() |
|
22 * |
|
23 * @since 3.0.0 |
|
24 * |
|
25 * @param string $output Passed by reference. |
|
26 * @param int $depth Depth of menu item. Used for padding. |
|
27 * @param array $args Not used. |
|
28 */ |
|
29 public function start_lvl( &$output, $depth = 0, $args = array() ) {} |
|
30 |
|
31 /** |
|
32 * Ends the list of after the elements are added. |
|
33 * |
|
34 * @see Walker_Nav_Menu::end_lvl() |
|
35 * |
|
36 * @since 3.0.0 |
|
37 * |
|
38 * @param string $output Passed by reference. |
|
39 * @param int $depth Depth of menu item. Used for padding. |
|
40 * @param array $args Not used. |
|
41 */ |
|
42 public function end_lvl( &$output, $depth = 0, $args = array() ) {} |
|
43 |
|
44 /** |
|
45 * Start the element output. |
|
46 * |
|
47 * @see Walker_Nav_Menu::start_el() |
|
48 * @since 3.0.0 |
|
49 * |
|
50 * @global int $_wp_nav_menu_max_depth |
|
51 * |
|
52 * @param string $output Used to append additional content (passed by reference). |
|
53 * @param object $item Menu item data object. |
|
54 * @param int $depth Depth of menu item. Used for padding. |
|
55 * @param array $args Not used. |
|
56 * @param int $id Not used. |
|
57 */ |
|
58 public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { |
|
59 global $_wp_nav_menu_max_depth; |
|
60 $_wp_nav_menu_max_depth = $depth > $_wp_nav_menu_max_depth ? $depth : $_wp_nav_menu_max_depth; |
|
61 |
|
62 ob_start(); |
|
63 $item_id = esc_attr( $item->ID ); |
|
64 $removed_args = array( |
|
65 'action', |
|
66 'customlink-tab', |
|
67 'edit-menu-item', |
|
68 'menu-item', |
|
69 'page-tab', |
|
70 '_wpnonce', |
|
71 ); |
|
72 |
|
73 $original_title = false; |
|
74 if ( 'taxonomy' == $item->type ) { |
|
75 $original_title = get_term_field( 'name', $item->object_id, $item->object, 'raw' ); |
|
76 if ( is_wp_error( $original_title ) ) |
|
77 $original_title = false; |
|
78 } elseif ( 'post_type' == $item->type ) { |
|
79 $original_object = get_post( $item->object_id ); |
|
80 $original_title = get_the_title( $original_object->ID ); |
|
81 } elseif ( 'post_type_archive' == $item->type ) { |
|
82 $original_object = get_post_type_object( $item->object ); |
|
83 if ( $original_object ) { |
|
84 $original_title = $original_object->labels->archives; |
|
85 } |
|
86 } |
|
87 |
|
88 $classes = array( |
|
89 'menu-item menu-item-depth-' . $depth, |
|
90 'menu-item-' . esc_attr( $item->object ), |
|
91 'menu-item-edit-' . ( ( isset( $_GET['edit-menu-item'] ) && $item_id == $_GET['edit-menu-item'] ) ? 'active' : 'inactive'), |
|
92 ); |
|
93 |
|
94 $title = $item->title; |
|
95 |
|
96 if ( ! empty( $item->_invalid ) ) { |
|
97 $classes[] = 'menu-item-invalid'; |
|
98 /* translators: %s: title of menu item which is invalid */ |
|
99 $title = sprintf( __( '%s (Invalid)' ), $item->title ); |
|
100 } elseif ( isset( $item->post_status ) && 'draft' == $item->post_status ) { |
|
101 $classes[] = 'pending'; |
|
102 /* translators: %s: title of menu item in draft status */ |
|
103 $title = sprintf( __('%s (Pending)'), $item->title ); |
|
104 } |
|
105 |
|
106 $title = ( ! isset( $item->label ) || '' == $item->label ) ? $title : $item->label; |
|
107 |
|
108 $submenu_text = ''; |
|
109 if ( 0 == $depth ) |
|
110 $submenu_text = 'style="display: none;"'; |
|
111 |
|
112 ?> |
|
113 <li id="menu-item-<?php echo $item_id; ?>" class="<?php echo implode(' ', $classes ); ?>"> |
|
114 <div class="menu-item-bar"> |
|
115 <div class="menu-item-handle"> |
|
116 <span class="item-title"><span class="menu-item-title"><?php echo esc_html( $title ); ?></span> <span class="is-submenu" <?php echo $submenu_text; ?>><?php _e( 'sub item' ); ?></span></span> |
|
117 <span class="item-controls"> |
|
118 <span class="item-type"><?php echo esc_html( $item->type_label ); ?></span> |
|
119 <span class="item-order hide-if-js"> |
|
120 <a href="<?php |
|
121 echo wp_nonce_url( |
|
122 add_query_arg( |
|
123 array( |
|
124 'action' => 'move-up-menu-item', |
|
125 'menu-item' => $item_id, |
|
126 ), |
|
127 remove_query_arg($removed_args, admin_url( 'nav-menus.php' ) ) |
|
128 ), |
|
129 'move-menu_item' |
|
130 ); |
|
131 ?>" class="item-move-up" aria-label="<?php esc_attr_e( 'Move up' ) ?>">↑</a> |
|
132 | |
|
133 <a href="<?php |
|
134 echo wp_nonce_url( |
|
135 add_query_arg( |
|
136 array( |
|
137 'action' => 'move-down-menu-item', |
|
138 'menu-item' => $item_id, |
|
139 ), |
|
140 remove_query_arg($removed_args, admin_url( 'nav-menus.php' ) ) |
|
141 ), |
|
142 'move-menu_item' |
|
143 ); |
|
144 ?>" class="item-move-down" aria-label="<?php esc_attr_e( 'Move down' ) ?>">↓</a> |
|
145 </span> |
|
146 <a class="item-edit" id="edit-<?php echo $item_id; ?>" href="<?php |
|
147 echo ( isset( $_GET['edit-menu-item'] ) && $item_id == $_GET['edit-menu-item'] ) ? admin_url( 'nav-menus.php' ) : add_query_arg( 'edit-menu-item', $item_id, remove_query_arg( $removed_args, admin_url( 'nav-menus.php#menu-item-settings-' . $item_id ) ) ); |
|
148 ?>" aria-label="<?php esc_attr_e( 'Edit menu item' ); ?>"><span class="screen-reader-text"><?php _e( 'Edit' ); ?></span></a> |
|
149 </span> |
|
150 </div> |
|
151 </div> |
|
152 |
|
153 <div class="menu-item-settings wp-clearfix" id="menu-item-settings-<?php echo $item_id; ?>"> |
|
154 <?php if ( 'custom' == $item->type ) : ?> |
|
155 <p class="field-url description description-wide"> |
|
156 <label for="edit-menu-item-url-<?php echo $item_id; ?>"> |
|
157 <?php _e( 'URL' ); ?><br /> |
|
158 <input type="text" id="edit-menu-item-url-<?php echo $item_id; ?>" class="widefat code edit-menu-item-url" name="menu-item-url[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->url ); ?>" /> |
|
159 </label> |
|
160 </p> |
|
161 <?php endif; ?> |
|
162 <p class="description description-wide"> |
|
163 <label for="edit-menu-item-title-<?php echo $item_id; ?>"> |
|
164 <?php _e( 'Navigation Label' ); ?><br /> |
|
165 <input type="text" id="edit-menu-item-title-<?php echo $item_id; ?>" class="widefat edit-menu-item-title" name="menu-item-title[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->title ); ?>" /> |
|
166 </label> |
|
167 </p> |
|
168 <p class="field-title-attribute field-attr-title description description-wide"> |
|
169 <label for="edit-menu-item-attr-title-<?php echo $item_id; ?>"> |
|
170 <?php _e( 'Title Attribute' ); ?><br /> |
|
171 <input type="text" id="edit-menu-item-attr-title-<?php echo $item_id; ?>" class="widefat edit-menu-item-attr-title" name="menu-item-attr-title[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->post_excerpt ); ?>" /> |
|
172 </label> |
|
173 </p> |
|
174 <p class="field-link-target description"> |
|
175 <label for="edit-menu-item-target-<?php echo $item_id; ?>"> |
|
176 <input type="checkbox" id="edit-menu-item-target-<?php echo $item_id; ?>" value="_blank" name="menu-item-target[<?php echo $item_id; ?>]"<?php checked( $item->target, '_blank' ); ?> /> |
|
177 <?php _e( 'Open link in a new tab' ); ?> |
|
178 </label> |
|
179 </p> |
|
180 <p class="field-css-classes description description-thin"> |
|
181 <label for="edit-menu-item-classes-<?php echo $item_id; ?>"> |
|
182 <?php _e( 'CSS Classes (optional)' ); ?><br /> |
|
183 <input type="text" id="edit-menu-item-classes-<?php echo $item_id; ?>" class="widefat code edit-menu-item-classes" name="menu-item-classes[<?php echo $item_id; ?>]" value="<?php echo esc_attr( implode(' ', $item->classes ) ); ?>" /> |
|
184 </label> |
|
185 </p> |
|
186 <p class="field-xfn description description-thin"> |
|
187 <label for="edit-menu-item-xfn-<?php echo $item_id; ?>"> |
|
188 <?php _e( 'Link Relationship (XFN)' ); ?><br /> |
|
189 <input type="text" id="edit-menu-item-xfn-<?php echo $item_id; ?>" class="widefat code edit-menu-item-xfn" name="menu-item-xfn[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->xfn ); ?>" /> |
|
190 </label> |
|
191 </p> |
|
192 <p class="field-description description description-wide"> |
|
193 <label for="edit-menu-item-description-<?php echo $item_id; ?>"> |
|
194 <?php _e( 'Description' ); ?><br /> |
|
195 <textarea id="edit-menu-item-description-<?php echo $item_id; ?>" class="widefat edit-menu-item-description" rows="3" cols="20" name="menu-item-description[<?php echo $item_id; ?>]"><?php echo esc_html( $item->description ); // textarea_escaped ?></textarea> |
|
196 <span class="description"><?php _e('The description will be displayed in the menu if the current theme supports it.'); ?></span> |
|
197 </label> |
|
198 </p> |
|
199 |
|
200 <fieldset class="field-move hide-if-no-js description description-wide"> |
|
201 <span class="field-move-visual-label" aria-hidden="true"><?php _e( 'Move' ); ?></span> |
|
202 <button type="button" class="button-link menus-move menus-move-up" data-dir="up"><?php _e( 'Up one' ); ?></button> |
|
203 <button type="button" class="button-link menus-move menus-move-down" data-dir="down"><?php _e( 'Down one' ); ?></button> |
|
204 <button type="button" class="button-link menus-move menus-move-left" data-dir="left"></button> |
|
205 <button type="button" class="button-link menus-move menus-move-right" data-dir="right"></button> |
|
206 <button type="button" class="button-link menus-move menus-move-top" data-dir="top"><?php _e( 'To the top' ); ?></button> |
|
207 </fieldset> |
|
208 |
|
209 <div class="menu-item-actions description-wide submitbox"> |
|
210 <?php if ( 'custom' != $item->type && $original_title !== false ) : ?> |
|
211 <p class="link-to-original"> |
|
212 <?php printf( __('Original: %s'), '<a href="' . esc_attr( $item->url ) . '">' . esc_html( $original_title ) . '</a>' ); ?> |
|
213 </p> |
|
214 <?php endif; ?> |
|
215 <a class="item-delete submitdelete deletion" id="delete-<?php echo $item_id; ?>" href="<?php |
|
216 echo wp_nonce_url( |
|
217 add_query_arg( |
|
218 array( |
|
219 'action' => 'delete-menu-item', |
|
220 'menu-item' => $item_id, |
|
221 ), |
|
222 admin_url( 'nav-menus.php' ) |
|
223 ), |
|
224 'delete-menu_item_' . $item_id |
|
225 ); ?>"><?php _e( 'Remove' ); ?></a> <span class="meta-sep hide-if-no-js"> | </span> <a class="item-cancel submitcancel hide-if-no-js" id="cancel-<?php echo $item_id; ?>" href="<?php echo esc_url( add_query_arg( array( 'edit-menu-item' => $item_id, 'cancel' => time() ), admin_url( 'nav-menus.php' ) ) ); |
|
226 ?>#menu-item-settings-<?php echo $item_id; ?>"><?php _e('Cancel'); ?></a> |
|
227 </div> |
|
228 |
|
229 <input class="menu-item-data-db-id" type="hidden" name="menu-item-db-id[<?php echo $item_id; ?>]" value="<?php echo $item_id; ?>" /> |
|
230 <input class="menu-item-data-object-id" type="hidden" name="menu-item-object-id[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->object_id ); ?>" /> |
|
231 <input class="menu-item-data-object" type="hidden" name="menu-item-object[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->object ); ?>" /> |
|
232 <input class="menu-item-data-parent-id" type="hidden" name="menu-item-parent-id[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->menu_item_parent ); ?>" /> |
|
233 <input class="menu-item-data-position" type="hidden" name="menu-item-position[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->menu_order ); ?>" /> |
|
234 <input class="menu-item-data-type" type="hidden" name="menu-item-type[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->type ); ?>" /> |
|
235 </div><!-- .menu-item-settings--> |
|
236 <ul class="menu-item-transport"></ul> |
|
237 <?php |
|
238 $output .= ob_get_clean(); |
|
239 } |
|
240 |
|
241 } // Walker_Nav_Menu_Edit |