Make WordPress Core


Ignore:
Timestamp:
02/28/2010 08:00:49 PM (17 years ago)
Author:
ryan
Message:

Menu enhancements. Props ptahdunbar. fixes #11817

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/nav-menu.php

    r13473 r13512  
    88 */
    99
    10 // Deletes a nav menu
    11 function wp_delete_nav_menu( $menu_id ) {
    12         $menu_id = (int) $menu_id;
    13         if ( !$menu_id  )
     10/**
     11 * Returns a Navigation Menu object
     12 *
     13 * @since 3.0.0
     14 *
     15 * @param string $menu Menu id
     16 * @return mixed $menu|false
     17 */
     18function wp_get_nav_menu_object( $menu ) {
     19        return is_nav_menu( $menu );
     20}
     21
     22/**
     23 * Check if Menu exists.
     24 *
     25 * Returns the menu object, or false if the term doesn't exist.
     26 *
     27 * @since 3.0.0
     28 *
     29 * @param int|string $menu The menu to check
     30 * @return mixed Menu Object, if exists.
     31 */
     32function is_nav_menu( $menu ) {
     33        if ( $menu ) {
     34                $menu = get_term( $menu, 'nav_menu' );
     35        } elseif ( !$menu ) {
     36                $menu = get_term_by( 'slug', $menu, 'nav_menu' );
     37        } elseif( !$menu ) {
     38                $menu = get_term_by( 'name', $menu, 'nav_menu' );
     39        } else {
     40                $menu = false;
     41        }
     42               
     43        return $menu;
     44}
     45
     46/**
     47 * Returns all Navigation Menu objects.
     48 *
     49 * @since 3.0.0
     50 *
     51 * @return array menu objects
     52 */
     53function wp_get_nav_menus() {
     54        return get_terms( 'nav_menu', array( 'hide_empty' => false, 'orderby' => 'id' ) );
     55}
     56
     57/**
     58 * Creates a navigation menu.
     59 *
     60 * Optional args:
     61 * slug - the url friendly version of the nav menu.
     62 *
     63 * @since 3.0.0
     64 *
     65 * @param string $menu_name Menu Name
     66 * @param string $args Optional.
     67 * @return mixed Menu object|WP_Error
     68 */
     69function wp_create_nav_menu( $menu_name, $args = array() ) {
     70        $menu_exists = get_term_by( 'name', $menu_name, 'nav_menu' );
     71
     72        if ( $menu_exists )
     73                return new WP_Error( 'menu_exists', sprintf( __('A menu named “%s” already exists; please try another name.'), esc_html( $menu_exists->name ) ) );
     74
     75        if ( isset($args['slug']) )
     76                $slug = $args['slug'];
     77        else
     78                $slug = $menu_name;
     79
     80        $menu = wp_insert_term( $menu_name, 'nav_menu', array('slug' => $slug) );
     81
     82        if ( is_wp_error($menu) )
     83                return $menu;
     84
     85        return get_term( $menu['term_id'], 'nav_menu') ;
     86}
     87
     88/**
     89 * Deletes a navigation menu.
     90 *
     91 * @since 3.0.0
     92 *
     93 * @param string $menu name|id|slug
     94 * @return bool true on success, else false.
     95 */
     96function wp_delete_nav_menu( $menu ) {
     97        $menu = wp_get_nav_menu_object( $menu );
     98        if ( !$menu  )
    1499                return false;
    15100
    16         $menu_objects = get_objects_in_term( $menu_id, 'nav_menu' );
     101        $menu_objects = get_objects_in_term( $menu->term_id, 'nav_menu' );
    17102        if ( !empty( $menu_objects ) ) {
    18103                foreach ( $menu_objects as $item ) {
     
    23108}
    24109
    25 // Creates a new nav menu
    26 function wp_create_nav_menu( $menu_name, $args = array() ) {
    27         $menu_exists = get_term_by( 'name', $menu_name, 'nav_menu' );
    28 
    29         if ( $menu_exists )
    30                 return new WP_Error( 'menu_exists', sprintf( __('A menu named “%s” already exists; please try another name.'), esc_html( $menu_exists->name ) ) );
    31 
    32         if ( isset($args['slug']) )
    33                 $slug = $args['slug'];
    34         else
    35                 $slug = $menu_name;
    36 
    37         $menu = wp_insert_term( $menu_name, 'nav_menu', array('slug' => $slug) );
    38 
    39         if ( is_wp_error($menu) )
    40                 return $menu;
    41 
    42         return get_term( $menu['term_id'], 'nav_menu');
    43 }
    44 
    45 // Creates a default menu if none exists
     110/**
     111 * Creates a nav menu named 'Menu 1'.
     112 *
     113 * This function is called if the user doesn't have any nav menus.
     114 * It grabs the first 14 pages, and creates a new default menu.
     115 *
     116 * @since 3.0.0
     117 */
    46118function wp_create_default_nav_menu() {
    47119        $menu = wp_create_nav_menu( __('Menu 1'), array('slug' => 'menu-1') );
     
    62134}
    63135
    64 // Get nav menu by id
    65 function wp_get_nav_menu( $menu ) {
    66         return get_term( (int) $menu, 'nav_menu' );
    67 }
    68 
    69 // Get all nav menus
    70 function wp_get_nav_menus() {
    71         return get_terms( 'nav_menu', array( 'hide_empty' => false, 'orderby' => 'id' ) );
    72 }
    73 
    74 // Get the nav menu items
     136/**
     137 * Returns the menu items of a navigation menu.
     138 *
     139 * @since 3.0.0
     140 *
     141 * @param string $menu menu name, id, or slug
     142 * @param string $args
     143 * @return mixed $items array of menu items, else false.
     144 */
    75145function wp_get_nav_menu_items( $menu, $args = array() ) {
    76         $items = get_objects_in_term( (int) $menu, 'nav_menu' );
     146        $menu = wp_get_nav_menu_object( $menu );
     147       
     148        if ( !$menu )
     149                return false;
     150       
     151        $items = get_objects_in_term( $menu->term_id, 'nav_menu' );
    77152
    78153        if ( ! empty( $items ) ) {
    79154                $defaults = array( 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item', 'post_status' => 'publish', 'output' => ARRAY_A, 'output_key' => 'menu_order' );
    80                 $args = wp_parse_args($args, $defaults);
     155                $args = wp_parse_args( $args, $defaults );
    81156                if ( count( $items ) > 1 )     
    82157                        $args['include'] = implode( ',', $items );
     
    91166                                $output[$item->$args['output_key']] = $item;
    92167                        }
    93                         unset($items);
    94                         ksort($output);
     168                        unset( $items );
     169                        ksort( $output );
    95170                        return $output;
    96171                }
     
    99174}
    100175
    101 // wp_setup_nav_menu_item()
    102 function wp_setup_nav_menu_item($menu_item, $type = 'item', $position = 0) {
     176/**
     177 * Returns a menu item with all it's nessecary data populated.
     178 *
     179 * @since 3.0.0
     180 *
     181 * @param string $menu_item Menu item.
     182 * @param string $type item|category|page.
     183 * @param string $position position of the menu item.
     184 * @return $menu_item
     185 */
     186function wp_setup_nav_menu_item( $menu_item, $type = 'item', $position = 0 ) {
    103187        global $parent_menu_order;
    104188
    105189        if ( 'item' == $type ) {
    106                 $menu_item->type = get_post_meta($menu_item->ID, 'menu_type', true);
    107                 $menu_item->object_id = get_post_meta($menu_item->ID, 'object_id', true);
     190                $menu_item->type = get_post_meta( $menu_item->ID, 'menu_type', true );
     191                $menu_item->object_id = get_post_meta( $menu_item->ID, 'object_id', true );
    108192                $menu_item->target = ( get_post_meta( $menu_item->ID, 'menu_new_window', true ) ) ? 'target="_blank"' : '';
    109193                if ( isset( $parent_menu_order[ $menu_item->post_parent ] ) )
     
    166250        $menu_item->li_class = '';
    167251        global $wp_query;
    168         if ( $menu_item->ID == $wp_query->get_queried_object_id() )
    169                 $menu_item->li_class = 'class="current_page_item"';
     252       
     253        if ( $menu_item->object_id == $wp_query->get_queried_object_id() )
     254                $menu_item->li_class = ' current_page_item';
    170255
    171256        $menu_item->anchor_title = '';
     
    196281        return $menu_item;
    197282}
    198 
    199283?>
Note: See TracChangeset for help on using the changeset viewer.