10 /** |
10 /** |
11 * Returns a navigation menu object. |
11 * Returns a navigation menu object. |
12 * |
12 * |
13 * @since 3.0.0 |
13 * @since 3.0.0 |
14 * |
14 * |
15 * @uses get_term |
15 * @param string $menu Menu ID, slug, or name. |
16 * @uses get_term_by |
|
17 * |
|
18 * @param string $menu Menu id, slug or name |
|
19 * @return mixed false if $menu param isn't supplied or term does not exist, menu object if successful. |
16 * @return mixed false if $menu param isn't supplied or term does not exist, menu object if successful. |
20 */ |
17 */ |
21 function wp_get_nav_menu_object( $menu ) { |
18 function wp_get_nav_menu_object( $menu ) { |
22 if ( ! $menu ) |
19 if ( ! $menu ) |
23 return false; |
20 return false; |
41 * |
38 * |
42 * Returns true if it is; false otherwise. |
39 * Returns true if it is; false otherwise. |
43 * |
40 * |
44 * @since 3.0.0 |
41 * @since 3.0.0 |
45 * |
42 * |
46 * @param int|string $menu The menu to check (id, slug, or name) |
43 * @param int|string $menu The menu to check (ID, slug, or name). |
47 * @return bool Whether the menu exists. |
44 * @return bool Whether the menu exists. |
48 */ |
45 */ |
49 function is_nav_menu( $menu ) { |
46 function is_nav_menu( $menu ) { |
50 if ( ! $menu ) |
47 if ( ! $menu ) |
51 return false; |
48 return false; |
79 } |
76 } |
80 |
77 |
81 /** |
78 /** |
82 * Unregisters a navigation menu for a theme. |
79 * Unregisters a navigation menu for a theme. |
83 * |
80 * |
84 * @param array $location the menu location identifier |
81 * @param string $location The menu location identifier. |
85 * |
|
86 * @return bool True on success, false on failure. |
82 * @return bool True on success, false on failure. |
87 */ |
83 */ |
88 function unregister_nav_menu( $location ) { |
84 function unregister_nav_menu( $location ) { |
89 global $_wp_registered_nav_menus; |
85 global $_wp_registered_nav_menus; |
90 |
86 |
91 if ( is_array( $_wp_registered_nav_menus ) && isset( $_wp_registered_nav_menus[$location] ) ) { |
87 if ( is_array( $_wp_registered_nav_menus ) && isset( $_wp_registered_nav_menus[$location] ) ) { |
92 unset( $_wp_registered_nav_menus[$location] ); |
88 unset( $_wp_registered_nav_menus[$location] ); |
|
89 if ( empty( $_wp_registered_nav_menus ) ) { |
|
90 _remove_theme_support( 'menus' ); |
|
91 } |
93 return true; |
92 return true; |
94 } |
93 } |
95 return false; |
94 return false; |
96 } |
95 } |
97 |
96 |
137 * @since 3.0.0 |
136 * @since 3.0.0 |
138 * @param string $location Menu location identifier. |
137 * @param string $location Menu location identifier. |
139 * @return bool Whether location has a menu. |
138 * @return bool Whether location has a menu. |
140 */ |
139 */ |
141 function has_nav_menu( $location ) { |
140 function has_nav_menu( $location ) { |
|
141 $registered_nav_menus = get_registered_nav_menus(); |
|
142 if ( ! isset( $registered_nav_menus[ $location ] ) ) { |
|
143 return false; |
|
144 } |
|
145 |
142 $locations = get_nav_menu_locations(); |
146 $locations = get_nav_menu_locations(); |
143 return ( ! empty( $locations[ $location ] ) ); |
147 return ( ! empty( $locations[ $location ] ) ); |
144 } |
148 } |
145 |
149 |
146 /** |
150 /** |
158 /** |
162 /** |
159 * Create a Navigation Menu. |
163 * Create a Navigation Menu. |
160 * |
164 * |
161 * @since 3.0.0 |
165 * @since 3.0.0 |
162 * |
166 * |
163 * @param string $menu_name Menu Name |
167 * @param string $menu_name Menu name. |
164 * @return mixed Menu object on success|WP_Error on failure |
168 * @return int|WP_Error Menu ID on success, WP_Error object on failure. |
165 */ |
169 */ |
166 function wp_create_nav_menu( $menu_name ) { |
170 function wp_create_nav_menu( $menu_name ) { |
167 return wp_update_nav_menu_object( 0, array( 'menu-name' => $menu_name ) ); |
171 return wp_update_nav_menu_object( 0, array( 'menu-name' => $menu_name ) ); |
168 } |
172 } |
169 |
173 |
170 /** |
174 /** |
171 * Delete a Navigation Menu. |
175 * Delete a Navigation Menu. |
172 * |
176 * |
173 * @since 3.0.0 |
177 * @since 3.0.0 |
174 * |
178 * |
175 * @param string $menu name|id|slug |
179 * @param string $menu Menu ID, slug, or name. |
176 * @return mixed Menu object on success|WP_Error on failure |
180 * @return bool|WP_Error True on success, false or WP_Error object on failure. |
177 */ |
181 */ |
178 function wp_delete_nav_menu( $menu ) { |
182 function wp_delete_nav_menu( $menu ) { |
179 $menu = wp_get_nav_menu_object( $menu ); |
183 $menu = wp_get_nav_menu_object( $menu ); |
180 if ( ! $menu ) |
184 if ( ! $menu ) |
181 return false; |
185 return false; |
196 $locations[ $location ] = 0; |
200 $locations[ $location ] = 0; |
197 } |
201 } |
198 set_theme_mod( 'nav_menu_locations', $locations ); |
202 set_theme_mod( 'nav_menu_locations', $locations ); |
199 |
203 |
200 if ( $result && !is_wp_error($result) ) |
204 if ( $result && !is_wp_error($result) ) |
|
205 |
|
206 /** |
|
207 * Fires after a navigation menu has been successfully deleted. |
|
208 * |
|
209 * @since 3.0.0 |
|
210 * |
|
211 * @param int $term_id ID of the deleted menu. |
|
212 */ |
201 do_action( 'wp_delete_nav_menu', $menu->term_id ); |
213 do_action( 'wp_delete_nav_menu', $menu->term_id ); |
202 |
214 |
203 return $result; |
215 return $result; |
204 } |
216 } |
205 |
217 |
208 * |
220 * |
209 * @since 3.0.0 |
221 * @since 3.0.0 |
210 * |
222 * |
211 * @param int $menu_id The ID of the menu or "0" to create a new menu. |
223 * @param int $menu_id The ID of the menu or "0" to create a new menu. |
212 * @param array $menu_data The array of menu data. |
224 * @param array $menu_data The array of menu data. |
213 * @return int|error object The menu's ID or WP_Error object. |
225 * @return int|WP_Error Menu ID on success, WP_Error object on failure. |
214 */ |
226 */ |
215 function wp_update_nav_menu_object( $menu_id = 0, $menu_data = array() ) { |
227 function wp_update_nav_menu_object( $menu_id = 0, $menu_data = array() ) { |
216 $menu_id = (int) $menu_id; |
228 $menu_id = (int) $menu_id; |
217 |
229 |
218 $_menu = wp_get_nav_menu_object( $menu_id ); |
230 $_menu = wp_get_nav_menu_object( $menu_id ); |
244 $_menu = wp_insert_term( $menu_data['menu-name'], 'nav_menu', $args ); |
256 $_menu = wp_insert_term( $menu_data['menu-name'], 'nav_menu', $args ); |
245 |
257 |
246 if ( is_wp_error( $_menu ) ) |
258 if ( is_wp_error( $_menu ) ) |
247 return $_menu; |
259 return $_menu; |
248 |
260 |
|
261 /** |
|
262 * Fires after a navigation menu is successfully created. |
|
263 * |
|
264 * @since 3.0.0 |
|
265 * |
|
266 * @param int $term_id ID of the new menu. |
|
267 * @param array $menu_data An array of menu data. |
|
268 */ |
249 do_action( 'wp_create_nav_menu', $_menu['term_id'], $menu_data ); |
269 do_action( 'wp_create_nav_menu', $_menu['term_id'], $menu_data ); |
250 |
270 |
251 return (int) $_menu['term_id']; |
271 return (int) $_menu['term_id']; |
252 } |
272 } |
253 |
273 |
259 $update_response = wp_update_term( $menu_id, 'nav_menu', $args ); |
279 $update_response = wp_update_term( $menu_id, 'nav_menu', $args ); |
260 |
280 |
261 if ( is_wp_error( $update_response ) ) |
281 if ( is_wp_error( $update_response ) ) |
262 return $update_response; |
282 return $update_response; |
263 |
283 |
|
284 /** |
|
285 * Fires after a navigation menu has been successfully updated. |
|
286 * |
|
287 * @since 3.0.0 |
|
288 * |
|
289 * @param int $menu_id ID of the updated menu. |
|
290 * @param array $menu_data An array of menu data. |
|
291 */ |
264 do_action( 'wp_update_nav_menu', $menu_id, $menu_data ); |
292 do_action( 'wp_update_nav_menu', $menu_id, $menu_data ); |
265 return $menu_id; |
293 return $menu_id; |
266 } |
294 } |
267 |
295 |
268 /** |
296 /** |
271 * @since 3.0.0 |
299 * @since 3.0.0 |
272 * |
300 * |
273 * @param int $menu_id The ID of the menu. Required. If "0", makes the menu item a draft orphan. |
301 * @param int $menu_id The ID of the menu. Required. If "0", makes the menu item a draft orphan. |
274 * @param int $menu_item_db_id The ID of the menu item. If "0", creates a new menu item. |
302 * @param int $menu_item_db_id The ID of the menu item. If "0", creates a new menu item. |
275 * @param array $menu_item_data The menu item's data. |
303 * @param array $menu_item_data The menu item's data. |
276 * @return int The menu item's database ID or WP_Error object on failure. |
304 * @return int|WP_Error The menu item's database ID or WP_Error object on failure. |
277 */ |
305 */ |
278 function wp_update_nav_menu_item( $menu_id = 0, $menu_item_db_id = 0, $menu_item_data = array() ) { |
306 function wp_update_nav_menu_item( $menu_id = 0, $menu_item_db_id = 0, $menu_item_data = array() ) { |
279 $menu_id = (int) $menu_id; |
307 $menu_id = (int) $menu_id; |
280 $menu_item_db_id = (int) $menu_item_db_id; |
308 $menu_item_db_id = (int) $menu_item_db_id; |
281 |
309 |
282 // make sure that we don't convert non-nav_menu_item objects into nav_menu_item objects |
310 // make sure that we don't convert non-nav_menu_item objects into nav_menu_item objects |
283 if ( ! empty( $menu_item_db_id ) && ! is_nav_menu_item( $menu_item_db_id ) ) |
311 if ( ! empty( $menu_item_db_id ) && ! is_nav_menu_item( $menu_item_db_id ) ) |
284 return new WP_Error('update_nav_menu_item_failed', __('The given object ID is not that of a menu item.')); |
312 return new WP_Error( 'update_nav_menu_item_failed', __( 'The given object ID is not that of a menu item.' ) ); |
285 |
313 |
286 $menu = wp_get_nav_menu_object( $menu_id ); |
314 $menu = wp_get_nav_menu_object( $menu_id ); |
287 |
315 |
288 if ( ( ! $menu && 0 !== $menu_id ) || is_wp_error( $menu ) ) |
316 if ( ! $menu && 0 !== $menu_id ) { |
|
317 return new WP_Error( 'invalid_menu_id', __( 'Invalid menu ID.' ) ); |
|
318 } |
|
319 |
|
320 if ( is_wp_error( $menu ) ) { |
289 return $menu; |
321 return $menu; |
|
322 } |
290 |
323 |
291 $defaults = array( |
324 $defaults = array( |
292 'menu-item-db-id' => $menu_item_db_id, |
325 'menu-item-db-id' => $menu_item_db_id, |
293 'menu-item-object-id' => 0, |
326 'menu-item-object-id' => 0, |
294 'menu-item-object' => '', |
327 'menu-item-object' => '', |
355 'post_type' => 'nav_menu_item', |
388 'post_type' => 'nav_menu_item', |
356 ); |
389 ); |
357 |
390 |
358 $update = 0 != $menu_item_db_id; |
391 $update = 0 != $menu_item_db_id; |
359 |
392 |
360 // Only set the menu term if it isn't set to avoid unnecessary wp_get_object_terms() |
|
361 if ( $menu_id && ( ! $update || ! is_object_in_term( $menu_item_db_id, 'nav_menu', (int) $menu->term_id ) ) ) |
|
362 $post['tax_input'] = array( 'nav_menu' => array( intval( $menu->term_id ) ) ); |
|
363 |
|
364 // New menu item. Default is draft status |
393 // New menu item. Default is draft status |
365 if ( ! $update ) { |
394 if ( ! $update ) { |
366 $post['ID'] = 0; |
395 $post['ID'] = 0; |
367 $post['post_status'] = 'publish' == $args['menu-item-status'] ? 'publish' : 'draft'; |
396 $post['post_status'] = 'publish' == $args['menu-item-status'] ? 'publish' : 'draft'; |
368 $menu_item_db_id = wp_insert_post( $post ); |
397 $menu_item_db_id = wp_insert_post( $post ); |
369 if ( ! $menu_item_db_id || is_wp_error( $menu_item_db_id ) ) |
398 if ( ! $menu_item_db_id || is_wp_error( $menu_item_db_id ) ) |
370 return $menu_item_db_id; |
399 return $menu_item_db_id; |
371 } |
400 } |
372 |
401 |
|
402 // Associate the menu item with the menu term |
|
403 // Only set the menu term if it isn't set to avoid unnecessary wp_get_object_terms() |
|
404 if ( $menu_id && ( ! $update || ! is_object_in_term( $menu_item_db_id, 'nav_menu', (int) $menu->term_id ) ) ) { |
|
405 wp_set_object_terms( $menu_item_db_id, array( $menu->term_id ), 'nav_menu' ); |
|
406 } |
|
407 |
373 if ( 'custom' == $args['menu-item-type'] ) { |
408 if ( 'custom' == $args['menu-item-type'] ) { |
374 $args['menu-item-object-id'] = $menu_item_db_id; |
409 $args['menu-item-object-id'] = $menu_item_db_id; |
375 $args['menu-item-object'] = 'custom'; |
410 $args['menu-item-object'] = 'custom'; |
376 } |
411 } |
377 |
412 |
399 $post['ID'] = $menu_item_db_id; |
434 $post['ID'] = $menu_item_db_id; |
400 $post['post_status'] = 'draft' == $args['menu-item-status'] ? 'draft' : 'publish'; |
435 $post['post_status'] = 'draft' == $args['menu-item-status'] ? 'draft' : 'publish'; |
401 wp_update_post( $post ); |
436 wp_update_post( $post ); |
402 } |
437 } |
403 |
438 |
404 do_action('wp_update_nav_menu_item', $menu_id, $menu_item_db_id, $args ); |
439 /** |
|
440 * Fires after a navigation menu item has been updated. |
|
441 * |
|
442 * @since 3.0.0 |
|
443 * |
|
444 * @see wp_update_nav_menu_item() |
|
445 * |
|
446 * @param int $menu_id ID of the updated menu. |
|
447 * @param int $menu_item_db_id ID of the updated menu item. |
|
448 * @param array $args An array of arguments used to update a menu item. |
|
449 */ |
|
450 do_action( 'wp_update_nav_menu_item', $menu_id, $menu_item_db_id, $args ); |
405 |
451 |
406 return $menu_item_db_id; |
452 return $menu_item_db_id; |
407 } |
453 } |
408 |
454 |
409 /** |
455 /** |
410 * Returns all navigation menu objects. |
456 * Returns all navigation menu objects. |
411 * |
457 * |
412 * @since 3.0.0 |
458 * @since 3.0.0 |
413 * |
459 * @since 4.1.0 Default value of the 'orderby' argument was changed from 'none' |
414 * @param array $args Array of arguments passed on to get_terms(). |
460 * to 'name'. |
415 * @return array menu objects |
461 * |
|
462 * @param array $args Optional. Array of arguments passed on to {@see get_terms()}. |
|
463 * Default empty array. |
|
464 * @return array Menu objects. |
416 */ |
465 */ |
417 function wp_get_nav_menus( $args = array() ) { |
466 function wp_get_nav_menus( $args = array() ) { |
418 $defaults = array( 'hide_empty' => false, 'orderby' => 'none' ); |
467 $defaults = array( 'hide_empty' => false, 'orderby' => 'name' ); |
419 $args = wp_parse_args( $args, $defaults ); |
468 $args = wp_parse_args( $args, $defaults ); |
|
469 |
|
470 /** |
|
471 * Filter the navigation menu objects being returned. |
|
472 * |
|
473 * @since 3.0.0 |
|
474 * |
|
475 * @see get_terms() |
|
476 * |
|
477 * @param array $menus An array of menu objects. |
|
478 * @param array $args An array of arguments used to retrieve menu objects. |
|
479 */ |
420 return apply_filters( 'wp_get_nav_menus', get_terms( 'nav_menu', $args), $args ); |
480 return apply_filters( 'wp_get_nav_menus', get_terms( 'nav_menu', $args), $args ); |
421 } |
481 } |
422 |
482 |
423 /** |
483 /** |
424 * Sort menu items by the desired key. |
484 * Sort menu items by the desired key. |
449 else |
509 else |
450 return strcmp( $a->$_menu_item_sort_prop, $b->$_menu_item_sort_prop ); |
510 return strcmp( $a->$_menu_item_sort_prop, $b->$_menu_item_sort_prop ); |
451 } |
511 } |
452 |
512 |
453 /** |
513 /** |
454 * Returns if a menu item is valid. Bug #13958 |
514 * Return if a menu item is valid. |
|
515 * |
|
516 * @link https://core.trac.wordpress.org/ticket/13958 |
455 * |
517 * |
456 * @since 3.2.0 |
518 * @since 3.2.0 |
457 * @access private |
519 * @access private |
458 * |
520 * |
459 * @param object $menu_item The menu item to check |
521 * @param object $item The menu item to check. |
460 * @return bool false if invalid, else true. |
522 * @return bool False if invalid, otherwise true. |
461 */ |
523 */ |
462 function _is_valid_nav_menu_item( $item ) { |
524 function _is_valid_nav_menu_item( $item ) { |
463 if ( ! empty( $item->_invalid ) ) |
525 if ( ! empty( $item->_invalid ) ) |
464 return false; |
526 return false; |
465 |
527 |
466 return true; |
528 return true; |
467 } |
529 } |
468 |
530 |
469 /** |
531 /** |
470 * Returns all menu items of a navigation menu. |
532 * Return all menu items of a navigation menu. |
471 * |
533 * |
472 * @since 3.0.0 |
534 * @since 3.0.0 |
473 * |
535 * |
474 * @param string $menu menu name, id, or slug |
536 * @param string $menu Menu name, ID, or slug. |
475 * @param string $args |
537 * @param array $args Optional. Arguments to pass to {@see get_posts()}. |
476 * @return mixed $items array of menu items, else false. |
538 * @return mixed $items Array of menu items, otherwise false. |
477 */ |
539 */ |
478 function wp_get_nav_menu_items( $menu, $args = array() ) { |
540 function wp_get_nav_menu_items( $menu, $args = array() ) { |
479 $menu = wp_get_nav_menu_object( $menu ); |
541 $menu = wp_get_nav_menu_object( $menu ); |
480 |
542 |
481 if ( ! $menu ) |
543 if ( ! $menu ) |
489 return $items; |
551 return $items; |
490 |
552 |
491 $defaults = array( 'order' => 'ASC', 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item', |
553 $defaults = array( 'order' => 'ASC', 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item', |
492 'post_status' => 'publish', 'output' => ARRAY_A, 'output_key' => 'menu_order', 'nopaging' => true ); |
554 'post_status' => 'publish', 'output' => ARRAY_A, 'output_key' => 'menu_order', 'nopaging' => true ); |
493 $args = wp_parse_args( $args, $defaults ); |
555 $args = wp_parse_args( $args, $defaults ); |
494 if ( count( $items ) > 1 ) |
556 $args['include'] = $items; |
495 $args['include'] = implode( ',', $items ); |
|
496 else |
|
497 $args['include'] = $items[0]; |
|
498 |
557 |
499 $items = get_posts( $args ); |
558 $items = get_posts( $args ); |
500 |
559 |
501 if ( is_wp_error( $items ) || ! is_array( $items ) ) |
560 if ( is_wp_error( $items ) || ! is_array( $items ) ) |
502 return false; |
561 return false; |
544 foreach( $items as $k => $item ) { |
603 foreach( $items as $k => $item ) { |
545 $items[$k]->$args['output_key'] = $i++; |
604 $items[$k]->$args['output_key'] = $i++; |
546 } |
605 } |
547 } |
606 } |
548 |
607 |
|
608 /** |
|
609 * Filter the navigation menu items being returned. |
|
610 * |
|
611 * @since 3.0.0 |
|
612 * |
|
613 * @param array $items An array of menu item post objects. |
|
614 * @param object $menu The menu object. |
|
615 * @param array $args An array of arguments used to retrieve menu item objects. |
|
616 */ |
549 return apply_filters( 'wp_get_nav_menu_items', $items, $menu, $args ); |
617 return apply_filters( 'wp_get_nav_menu_items', $items, $menu, $args ); |
550 } |
618 } |
551 |
619 |
552 /** |
620 /** |
553 * Decorates a menu item object with the shared navigation menu item properties. |
621 * Decorates a menu item object with the shared navigation menu item properties. |
593 |
661 |
594 $menu_item->url = get_permalink( $menu_item->object_id ); |
662 $menu_item->url = get_permalink( $menu_item->object_id ); |
595 |
663 |
596 $original_object = get_post( $menu_item->object_id ); |
664 $original_object = get_post( $menu_item->object_id ); |
597 $original_title = $original_object->post_title; |
665 $original_title = $original_object->post_title; |
|
666 |
|
667 if ( '' === $original_title ) { |
|
668 $original_title = sprintf( __( '#%d (no title)' ), $original_object->ID ); |
|
669 } |
|
670 |
598 $menu_item->title = '' == $menu_item->post_title ? $original_title : $menu_item->post_title; |
671 $menu_item->title = '' == $menu_item->post_title ? $original_title : $menu_item->post_title; |
599 |
672 |
600 } elseif ( 'taxonomy' == $menu_item->type ) { |
673 } elseif ( 'taxonomy' == $menu_item->type ) { |
601 $object = get_taxonomy( $menu_item->object ); |
674 $object = get_taxonomy( $menu_item->object ); |
602 if ( $object ) { |
675 if ( $object ) { |
613 if ( is_wp_error( $original_title ) ) |
686 if ( is_wp_error( $original_title ) ) |
614 $original_title = false; |
687 $original_title = false; |
615 $menu_item->title = '' == $menu_item->post_title ? $original_title : $menu_item->post_title; |
688 $menu_item->title = '' == $menu_item->post_title ? $original_title : $menu_item->post_title; |
616 |
689 |
617 } else { |
690 } else { |
618 $menu_item->type_label = __('Custom'); |
691 $menu_item->type_label = __('Custom Link'); |
619 $menu_item->title = $menu_item->post_title; |
692 $menu_item->title = $menu_item->post_title; |
620 $menu_item->url = empty( $menu_item->url ) ? get_post_meta( $menu_item->ID, '_menu_item_url', true ) : $menu_item->url; |
693 $menu_item->url = empty( $menu_item->url ) ? get_post_meta( $menu_item->ID, '_menu_item_url', true ) : $menu_item->url; |
621 } |
694 } |
622 |
695 |
623 $menu_item->target = empty( $menu_item->target ) ? get_post_meta( $menu_item->ID, '_menu_item_target', true ) : $menu_item->target; |
696 $menu_item->target = empty( $menu_item->target ) ? get_post_meta( $menu_item->ID, '_menu_item_target', true ) : $menu_item->target; |
624 |
697 |
|
698 /** |
|
699 * Filter a navigation menu item's title attribute. |
|
700 * |
|
701 * @since 3.0.0 |
|
702 * |
|
703 * @param string $item_title The menu item title attribute. |
|
704 */ |
625 $menu_item->attr_title = empty( $menu_item->attr_title ) ? apply_filters( 'nav_menu_attr_title', $menu_item->post_excerpt ) : $menu_item->attr_title; |
705 $menu_item->attr_title = empty( $menu_item->attr_title ) ? apply_filters( 'nav_menu_attr_title', $menu_item->post_excerpt ) : $menu_item->attr_title; |
626 |
706 |
627 if ( empty( $menu_item->description ) ) |
707 if ( empty( $menu_item->description ) ) { |
628 $menu_item->description = apply_filters( 'nav_menu_description', wp_trim_words( $menu_item->post_content, 200 ) ); |
708 /** |
|
709 * Filter a navigation menu item's description. |
|
710 * |
|
711 * @since 3.0.0 |
|
712 * |
|
713 * @param string $description The menu item description. |
|
714 */ |
|
715 $menu_item->description = apply_filters( 'nav_menu_description', wp_trim_words( $menu_item->post_content, 200 ) ); |
|
716 } |
629 |
717 |
630 $menu_item->classes = empty( $menu_item->classes ) ? (array) get_post_meta( $menu_item->ID, '_menu_item_classes', true ) : $menu_item->classes; |
718 $menu_item->classes = empty( $menu_item->classes ) ? (array) get_post_meta( $menu_item->ID, '_menu_item_classes', true ) : $menu_item->classes; |
631 $menu_item->xfn = empty( $menu_item->xfn ) ? get_post_meta( $menu_item->ID, '_menu_item_xfn', true ) : $menu_item->xfn; |
719 $menu_item->xfn = empty( $menu_item->xfn ) ? get_post_meta( $menu_item->ID, '_menu_item_xfn', true ) : $menu_item->xfn; |
632 } else { |
720 } else { |
633 $menu_item->db_id = 0; |
721 $menu_item->db_id = 0; |
644 |
732 |
645 $menu_item->title = $menu_item->post_title; |
733 $menu_item->title = $menu_item->post_title; |
646 $menu_item->url = get_permalink( $menu_item->ID ); |
734 $menu_item->url = get_permalink( $menu_item->ID ); |
647 $menu_item->target = ''; |
735 $menu_item->target = ''; |
648 |
736 |
|
737 /** This filter is documented in wp-includes/nav-menu.php */ |
649 $menu_item->attr_title = apply_filters( 'nav_menu_attr_title', '' ); |
738 $menu_item->attr_title = apply_filters( 'nav_menu_attr_title', '' ); |
|
739 |
|
740 /** This filter is documented in wp-includes/nav-menu.php */ |
650 $menu_item->description = apply_filters( 'nav_menu_description', '' ); |
741 $menu_item->description = apply_filters( 'nav_menu_description', '' ); |
651 $menu_item->classes = array(); |
742 $menu_item->classes = array(); |
652 $menu_item->xfn = ''; |
743 $menu_item->xfn = ''; |
653 } |
744 } |
654 } elseif ( isset( $menu_item->taxonomy ) ) { |
745 } elseif ( isset( $menu_item->taxonomy ) ) { |
671 $menu_item->classes = array(); |
762 $menu_item->classes = array(); |
672 $menu_item->xfn = ''; |
763 $menu_item->xfn = ''; |
673 |
764 |
674 } |
765 } |
675 |
766 |
|
767 /** |
|
768 * Filter a navigation menu item object. |
|
769 * |
|
770 * @since 3.0.0 |
|
771 * |
|
772 * @param object $menu_item The menu item object. |
|
773 */ |
676 return apply_filters( 'wp_setup_nav_menu_item', $menu_item ); |
774 return apply_filters( 'wp_setup_nav_menu_item', $menu_item ); |
677 } |
775 } |
678 |
776 |
679 /** |
777 /** |
680 * Get the menu items associated with a particular object. |
778 * Get the menu items associated with a particular object. |
700 'posts_per_page' => -1, |
798 'posts_per_page' => -1, |
701 ) |
799 ) |
702 ); |
800 ); |
703 foreach( (array) $menu_items as $menu_item ) { |
801 foreach( (array) $menu_items as $menu_item ) { |
704 if ( isset( $menu_item->ID ) && is_nav_menu_item( $menu_item->ID ) ) { |
802 if ( isset( $menu_item->ID ) && is_nav_menu_item( $menu_item->ID ) ) { |
705 if ( get_post_meta( $menu_item->ID, '_menu_item_type', true ) !== $object_type || |
803 $menu_item_type = get_post_meta( $menu_item->ID, '_menu_item_type', true ); |
706 get_post_meta( $menu_item->ID, '_menu_item_object', true ) !== $taxonomy ) |
804 if ( |
707 continue; |
805 'post_type' == $object_type && |
708 |
806 'post_type' == $menu_item_type |
709 $menu_item_ids[] = (int) $menu_item->ID; |
807 ) { |
|
808 $menu_item_ids[] = (int) $menu_item->ID; |
|
809 } elseif ( |
|
810 'taxonomy' == $object_type && |
|
811 'taxonomy' == $menu_item_type && |
|
812 get_post_meta( $menu_item->ID, '_menu_item_object', true ) == $taxonomy |
|
813 ) { |
|
814 $menu_item_ids[] = (int) $menu_item->ID; |
|
815 } |
710 } |
816 } |
711 } |
817 } |
712 |
818 |
713 return array_unique( $menu_item_ids ); |
819 return array_unique( $menu_item_ids ); |
714 } |
820 } |