wp_get_nav_menu_items( int|string|WP_Term $menu, array $args = array() )
Retrieves all menu items of a navigation menu.
Description Description
Note: Most arguments passed to the $args
parameter – save for ‘output_key’ – are specifically for retrieving nav_menu_item posts from get_posts() and may only indirectly affect the ultimate ordering and content of the resulting nav menu items that get returned from this function.
Parameters Parameters
- $menu
-
(int|string|WP_Term) (Required) Menu ID, slug, name, or object.
- $args
-
(array) (Optional) Arguments to pass to get_posts().
- 'order'
(string) How to order nav menu items as queried with get_posts(). Will be ignored if 'output' is ARRAY_A. Default 'ASC'. - 'orderby'
(string) Field to order menu items by as retrieved from get_posts(). Supply an orderby field via 'output_key' to affect the output order of nav menu items. Default 'menu_order'. - 'post_type'
(string) Menu items post type. Default 'nav_menu_item'. - 'post_status'
(string) Menu items post status. Default 'publish'. - 'output'
(string) How to order outputted menu items. Default ARRAY_A. - 'output_key'
(string) Key to use for ordering the actual menu items that get returned. Note that that is not a get_posts() argument and will only affect output of menu items processed in this function. Default 'menu_order'. - 'nopaging'
(bool) Whether to retrieve all menu items (true) or paginate (false). Default true.
Default value: array()
- 'order'
Return Return
(false|array) $items Array of menu items, otherwise false.
Source Source
File: wp-includes/nav-menu.php
function wp_get_nav_menu_items( $menu, $args = array() ) { $menu = wp_get_nav_menu_object( $menu ); if ( ! $menu ) { return false; } static $fetched = array(); $items = get_objects_in_term( $menu->term_id, 'nav_menu' ); if ( is_wp_error( $items ) ) { return false; } $defaults = array( 'order' => 'ASC', 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item', 'post_status' => 'publish', 'output' => ARRAY_A, 'output_key' => 'menu_order', 'nopaging' => true, ); $args = wp_parse_args( $args, $defaults ); $args['include'] = $items; if ( ! empty( $items ) ) { $items = get_posts( $args ); } else { $items = array(); } // Get all posts and terms at once to prime the caches if ( empty( $fetched[ $menu->term_id ] ) && ! wp_using_ext_object_cache() ) { $fetched[ $menu->term_id ] = true; $posts = array(); $terms = array(); foreach ( $items as $item ) { $object_id = get_post_meta( $item->ID, '_menu_item_object_id', true ); $object = get_post_meta( $item->ID, '_menu_item_object', true ); $type = get_post_meta( $item->ID, '_menu_item_type', true ); if ( 'post_type' == $type ) { $posts[ $object ][] = $object_id; } elseif ( 'taxonomy' == $type ) { $terms[ $object ][] = $object_id; } } if ( ! empty( $posts ) ) { foreach ( array_keys( $posts ) as $post_type ) { get_posts( array( 'post__in' => $posts[ $post_type ], 'post_type' => $post_type, 'nopaging' => true, 'update_post_term_cache' => false, ) ); } } unset( $posts ); if ( ! empty( $terms ) ) { foreach ( array_keys( $terms ) as $taxonomy ) { get_terms( array( 'taxonomy' => $taxonomy, 'include' => $terms[ $taxonomy ], 'hierarchical' => false, ) ); } } unset( $terms ); } $items = array_map( 'wp_setup_nav_menu_item', $items ); if ( ! is_admin() ) { // Remove invalid items only in front end $items = array_filter( $items, '_is_valid_nav_menu_item' ); } if ( ARRAY_A == $args['output'] ) { $items = wp_list_sort( $items, array( $args['output_key'] => 'ASC', ) ); $i = 1; foreach ( $items as $k => $item ) { $items[ $k ]->{$args['output_key']} = $i++; } } /** * Filters the navigation menu items being returned. * * @since 3.0.0 * * @param array $items An array of menu item post objects. * @param object $menu The menu object. * @param array $args An array of arguments used to retrieve menu item objects. */ return apply_filters( 'wp_get_nav_menu_items', $items, $menu, $args ); }
Expand full source code Collapse full source code View on Trac
Changelog Changelog
Version | Description |
---|---|
3.0.0 | Introduced. |
User Contributed Notes User Contributed Notes
You must log in before being able to contribute a note or feedback.
Building bootstrap 3 menu with submenu items without use WP_nav_walker (boostrap)! (Require bootstrap.css and bootstrap.js)
Expand full source codeCollapse full source code
Building menu list with children (submenus) and selecting the menu by it’s location:
Expand full source codeCollapse full source code
Building simple menu list
Expand full source codeCollapse full source code
Get simple array of menu.
Expand full source codeCollapse full source code
Feedback
A simplified and more ‘JSON Friendly’ take:
— By charlyripp —
I have tested this menu , it supports sub menu , submenu will have arrow , also current page parent and menu item will have active class.
Expand full source codeCollapse full source code