Make WordPress Core


Ignore:
Timestamp:
02/28/2010 08:00:49 PM (16 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.