Make WordPress Core


Ignore:
Timestamp:
03/22/2010 07:56:16 PM (15 years ago)
Author:
nacin
Message:

Various bug fixes and improvements to menu management. props ptahdunbar, see #11817.

File:
1 edited

Legend:

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

    r13733 r13802  
    99
    1010/**
    11  * Returns a Navigation Menu object
     11 * Returns a navigation menu object.
    1212 *
    1313 * @since 3.0.0
    1414 *
    1515 * @param string $menu Menu id
    16  * @return mixed $menu|false
     16 * @return mixed $menu|false Or WP_Error
    1717 */
    1818function wp_get_nav_menu_object( $menu ) {
     
    2121
    2222/**
    23  * Check if Menu exists.
     23 * Check if navigation menu exists.
    2424 *
    2525 * Returns the menu object, or false if the term doesn't exist.
     
    2828 *
    2929 * @param int|string $menu The menu to check
    30  * @return mixed Menu Object, if exists.
     30 * @return mixed Menu Object, if it exists. Else, false or WP_Error
    3131 */
    3232function is_nav_menu( $menu ) {
     
    5050
    5151/**
    52  * Creates a navigation menu.
     52 * Create a Navigation Menu.
    5353 *
    5454 * Optional args:
     
    5959 * @param string $menu_name Menu Name
    6060 * @param string $args Optional.
    61  * @return mixed Menu object|WP_Error
     61 * @return mixed Menu object on sucess|WP_Error on failure
    6262 */
    6363function wp_create_nav_menu( $menu_name, $args = array() ) {
     
    6565
    6666    if ( $menu_exists )
    67         return new WP_Error( 'menu_exists', sprintf( __('A menu named “%s” already exists; please try another name.'), esc_html( $menu_exists->name ) ) );
     67        return new WP_Error( 'menu_exists', sprintf( __('A menu named <strong>%s</strong> already exists; please try another name.'), esc_html( $menu_exists->name ) ) );
    6868
    6969    if ( isset($args['slug']) )
     
    7777        return $menu;
    7878
    79     return get_term( $menu['term_id'], 'nav_menu') ;
    80 }
    81 
    82 /**
    83  * Deletes a navigation menu.
     79    $result = get_term( $menu['term_id'], 'nav_menu' );
     80   
     81    if ( $result && !is_wp_error($result) ) {
     82        do_action( 'wp_create_nav_menu', $menu['term_id'] );
     83        return $result;
     84    } else {
     85        return $result;
     86    }
     87}
     88
     89/**
     90 * Delete a Navigation Menu.
    8491 *
    8592 * @since 3.0.0
    8693 *
    8794 * @param string $menu name|id|slug
    88  * @return bool true on success, else false.
     95 * @return mixed Menu object on sucess|WP_Error on failure
    8996 */
    9097function wp_delete_nav_menu( $menu ) {
     
    99106        }
    100107    }
    101     wp_delete_term( $menu->term_id, 'nav_menu' );
    102 }
    103 
    104 /**
    105  * Returns all Navigation Menu objects.
     108   
     109    $result = wp_delete_term( $menu->term_id, 'nav_menu' );
     110   
     111    if ( $result && !is_wp_error($result) ) {
     112        do_action( 'wp_delete_nav_menu', $menu->term_id );
     113        return $result;
     114    } else {
     115        return $result;
     116    }
     117}
     118
     119/**
     120 * Returns all navigation menu objects.
    106121 *
    107122 * @since 3.0.0
     
    154169
    155170/**
    156  * Adds all the nav menu properties to the $menu_item.
     171 * Retrieve the HTML list content for nav menu items.
     172 *
     173 * @uses Walker_Nav_Menu to create HTML list content.
     174 * @since 2.1.0
     175 * @see Walker::walk() for parameters and return description.
     176 */
     177function walk_nav_menu_tree( $items, $depth, $r ) {
     178    $walker = ( empty($r->walker) ) ? new Walker_Nav_Menu : $r->walker;
     179    $args = array( $items, $depth, $r );
     180   
     181    return call_user_func_array(array(&$walker, 'walk'), $args);
     182}
     183
     184/**
     185 * Adds all the navigation menu properties to the menu item.
    157186 *
    158187 * @since 3.0.0
    159188 *
    160189 * @param string $menu_item The menu item to modify
    161  * @param string $menu_item_type The menu item type (template, custom, post_type, taxonomy).
     190 * @param string $menu_item_type The menu item type (frontend, custom, post_type, taxonomy).
    162191 * @param string $menu_item_object Optional. The menu item object type (post type or taxonomy).
    163  * @return object $menu_item The modtified menu item.
     192 * @return object $menu_item The modified menu item.
    164193 */
    165194function wp_setup_nav_menu_item( $menu_item, $menu_item_type = null, $menu_item_object = '' ) {
    166     global $wp_query;
    167 
    168195    switch ( $menu_item_type ) {
    169196        case 'frontend':
    170197            $menu_item->db_id = (int) $menu_item->ID;
    171             $menu_item->object_id = get_post_meta( $menu_item->ID, 'menu_item_object_id', true );
    172             $menu_item->parent_id = (int) $menu_item->post_parent;
    173             $menu_item->type = get_post_meta( $menu_item->ID, 'menu_item_type', true );
    174 
    175             $menu_item->append = get_post_meta( $menu_item->ID, 'menu_item_append', true );
    176 
     198            $menu_item->object_id = get_post_meta( $menu_item->ID, '_menu_item_object_id', true );
     199            $menu_item->object = get_post_meta( $menu_item->ID, '_menu_item_object', true );
     200            $menu_item->type = get_post_meta( $menu_item->ID, '_menu_item_type', true );
     201           
     202            if ( 'post_type' == $menu_item->type ) {
     203                $object = get_post_type_object( $menu_item->object );
     204                $menu_item->append = $object->singular_label;
     205               
     206            } elseif ( 'taxonomy' == $menu_item->type ) {
     207                $object = get_taxonomy( $menu_item->object );
     208                $menu_item->append = $object->singular_label;
     209               
     210            } else {
     211                $menu_item->append = __('Custom');
     212            }
     213           
    177214            $menu_item->title = $menu_item->post_title;
    178             $menu_item->url = get_post_meta( $menu_item->ID, 'menu_item_url', true );
    179             $menu_item->target = get_post_meta( $menu_item->ID, 'menu_item_target', true );
     215            $menu_item->url = get_post_meta( $menu_item->ID, '_menu_item_url', true );
     216            $menu_item->target = get_post_meta( $menu_item->ID, '_menu_item_target', true );
    180217
    181218            $menu_item->attr_title = strip_tags( $menu_item->post_excerpt );
    182219            $menu_item->description = strip_tags( $menu_item->post_content );
    183220
    184             $menu_item->classes = get_post_meta( $menu_item->ID, 'menu_item_classes', true );;
    185             $menu_item->xfn = get_post_meta( $menu_item->ID, 'menu_item_xfn', true );
    186             $menu_item->li_class = ( $menu_item->object_id == $wp_query->get_queried_object_id() ) ? ' current_page_item' : '';
     221            $menu_item->classes = get_post_meta( $menu_item->ID, '_menu_item_classes', true );;
     222            $menu_item->xfn = get_post_meta( $menu_item->ID, '_menu_item_xfn', true );
    187223            break;
    188224
    189225        case 'custom':
    190             $menu_item->db_id = (int) $menu_item->ID;
     226            $menu_item->db_id = 0;
    191227            $menu_item->object_id = (int) $menu_item->ID;
    192             $menu_item->parent_id = (int) $menu_item->post_parent;
    193             $menu_item->type = 'custom'; //$menu_item_type
    194             $menu_item->append = 'custom';
     228            $menu_item->object = 'custom';
     229            $menu_item->type = 'custom';
     230            $menu_item->append = __('custom');
    195231
    196232            $menu_item->attr_title = strip_tags( $menu_item->post_excerpt );
     
    198234
    199235            $menu_item->title = $menu_item->post_title;
    200             $menu_item->url = get_post_meta( $menu_item->ID, 'menu_item_url', true );
    201             $menu_item->target = get_post_meta( $menu_item->ID, 'menu_item_target', true );
     236            $menu_item->url = get_post_meta( $menu_item->ID, '_menu_item_url', true );
     237            $menu_item->target = get_post_meta( $menu_item->ID, '_menu_item_target', true );
     238            $menu_item->classes = '';
     239            $menu_item->xfn = '';
    202240            break;
    203241
     
    205243            $menu_item->db_id = 0;
    206244            $menu_item->object_id = (int) $menu_item->ID;
    207             $menu_item->parent_id = (int) $menu_item->post_parent;
    208245            $menu_item->type = $menu_item_type;
    209246
    210247            $object = get_post_type_object( $menu_item_object );
    211             $menu_item->append = $object->name;
     248            $menu_item->object = $object->name;
     249            $menu_item->append = strtolower( $object->singular_label );
    212250
    213251            $menu_item->title = $menu_item->post_title;
     
    217255            $menu_item->attr_title = '';
    218256            $menu_item->description = strip_tags( $menu_item->post_content );
     257            $menu_item->classes = '';
     258            $menu_item->xfn = '';
    219259            break;
    220260
     
    223263            $menu_item->db_id = 0;
    224264            $menu_item->object_id = (int) $menu_item->term_id;
    225             $menu_item->parent_id = (int) $menu_item->parent;
     265            $menu_item->post_parent = (int) $menu_item->parent;
    226266            $menu_item->type = $menu_item_type;
    227267
    228268            $object = get_taxonomy( $menu_item_object );
    229             $menu_item->append = $object->name;
     269            $menu_item->object = $object->name;
     270            $menu_item->append = strtolower( $object->singular_label );
    230271
    231272            $menu_item->title = $menu_item->name;
     
    234275            $menu_item->attr_title = '';
    235276            $menu_item->description = strip_tags( $menu_item->description );
    236             break;
    237     }
    238 
    239     $menu_item->classes = get_post_meta( $menu_item->ID, 'menu_item_classes', true );
    240     $menu_item->xfn = get_post_meta( $menu_item->ID, 'menu_item_xfn', true );
    241 
     277            $menu_item->classes = '';
     278            $menu_item->xfn = '';
     279            break;
     280    }   
    242281    return $menu_item;
    243282}
Note: See TracChangeset for help on using the changeset viewer.