WordPress.org

Make WordPress Core


Ignore:
Timestamp:
03/15/2010 04:26:46 PM (12 years ago)
Author:
ryan
Message:

Menus rework. Props ptahdunbar. see #11817

File:
1 edited

Legend:

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

    r13580 r13704  
    4747
    4848    return $menu_obj;
    49 }
    50 
    51 /**
    52  * Returns all Navigation Menu objects.
    53  *
    54  * @since 3.0.0
    55  *
    56  * @return array menu objects
    57  */
    58 function wp_get_nav_menus() {
    59     return get_terms( 'nav_menu', array( 'hide_empty' => false, 'orderby' => 'id' ) );
    6049}
    6150
     
    114103
    115104/**
    116  * Creates a nav menu named 'Menu 1'.
    117  *
    118  * This function is called if the user doesn't have any nav menus.
    119  * It grabs the first 14 pages, and creates a new default menu.
    120  *
    121  * @since 3.0.0
    122  */
    123 function wp_create_default_nav_menu() {
    124     $menu = wp_create_nav_menu( __('Menu 1'), array('slug' => 'menu-1') );
    125 
    126     if ( is_wp_error($menu) )
    127         return;
    128 
    129     $pages = get_pages( array('parent' => 0, 'number' => 15) );
    130     $counter = 1;
    131     foreach ( $pages as $page ) {
    132         $item = array( 'post_status' => 'publish', 'post_type' => 'nav_menu_item', 'menu_order' => $counter, 'tax_input' => array( 'nav_menu' => $menu->name), 'post_title' => addslashes($page->post_title) );
    133         $item_id = wp_insert_post($item, true);
    134         update_post_meta( $item_id, 'menu_type', 'page' );
    135         update_post_meta( $item_id, 'object_id', $page->ID );
    136         update_post_meta( $item_id, 'menu_new_window', 0 );
    137         $counter++;
    138     }
    139 }
    140 
    141 /**
    142  * Returns the menu items of a navigation menu.
     105 * Returns all Navigation Menu objects.
     106 *
     107 * @since 3.0.0
     108 *
     109 * @return array menu objects
     110 */
     111function wp_get_nav_menus() {
     112    return get_terms( 'nav_menu', array( 'hide_empty' => false, 'orderby' => 'id' ) );
     113}
     114
     115/**
     116 * Returns all menu items of a navigation menu.
    143117 *
    144118 * @since 3.0.0
     
    180154
    181155/**
    182  * Returns a menu item with all it's nessecary data populated.
    183  *
    184  * @since 3.0.0
    185  *
    186  * @param string $menu_item Menu item.
    187  * @param string $type item|category|page.
    188  * @param string $position position of the menu item.
    189  * @return $menu_item
    190  */
    191 function wp_setup_nav_menu_item( $menu_item, $type = 'item', $position = 0 ) {
    192     global $parent_menu_order;
    193 
    194     if ( 'item' == $type ) {
    195         $menu_item->type = get_post_meta( $menu_item->ID, 'menu_type', true );
    196         $menu_item->object_id = get_post_meta( $menu_item->ID, 'object_id', true );
    197         $menu_item->target = ( get_post_meta( $menu_item->ID, 'menu_new_window', true ) ) ? 'target="_blank"' : '';
    198         if ( isset( $parent_menu_order[ $menu_item->post_parent ] ) )
    199             $menu_item->parent_item = $parent_menu_order[ $menu_item->post_parent ];
    200         else
    201             $menu_item->parent_item = 0;
    202     } elseif ( 'category' == $type ) {
    203         $menu_item->type = $type;
    204         $menu_item->object_id = $menu_item->term_id;
    205         $menu_item->ID = $menu_item->term_id;
    206         $menu_item->parent_item = $menu_item->parent;
    207         $menu_item->menu_order = $position;
    208     } elseif ( 'page' == $type ) {
    209         $menu_item->type = $type;
    210         $menu_item->object_id = $menu_item->ID;
    211         $menu_item->parent_item = $menu_item->post_parent;
    212         $menu_item->menu_order = $position;
    213     }
    214 
    215     switch ( $menu_item->type ) {
    216         case 'page' :
    217             $menu_item->link = get_page_link( $menu_item->object_id );
    218 
    219             if ( $menu_item->post_title == '' )
    220                 $menu_item->title = get_the_title( $menu_item->object_id );
    221             else
    222                 $menu_item->title = $menu_item->post_title;
    223 
    224             if ( $menu_item->post_content == '' )
    225                 $menu_item->description = get_post_meta( $menu_item->ID, 'page-description', true );
    226             else
    227                 $menu_item->description = $menu_item->post_content;
    228             $menu_item->append = _x('Page', 'menu nav item type');
    229             break;
    230         case 'category' :
    231             $menu_item->link = get_category_link( $menu_item->object_id );
    232 
    233             if ( empty($menu_item->post_title) ) {
    234                 $title_raw = get_category( $menu_item->object_id );
    235                 $menu_item->title =  $title_raw->cat_name;
    236             } else {
    237                 $menu_item->title = $menu_item->post_title;
    238             }
    239 
    240             if ( empty($menu_item->post_content) )
    241                 $menu_item->description = strip_tags( category_description( $menu_item->object_id ) );
    242             else
    243                 $menu_item->description = $menu_item->post_content;
    244             $menu_item->append = _x('Category', 'menu nav item type');
    245             break;
    246         case 'custom' :
    247         default :
    248             $menu_item->link = esc_url_raw( get_post_meta( $menu_item->ID, 'menu_link', true ) );
    249             $menu_item->title =  $menu_item->post_title;
    250             $menu_item->description = $menu_item->post_content;
    251             $menu_item->append = _x('Custom', 'menu nav item type');
    252             break;
    253     }
    254 
    255     $menu_item->li_class = '';
     156 * Adds all the nav menu properties to the $menu_item.
     157 *
     158 * @since 3.0.0
     159 *
     160 * @param string $menu_item The menu item to modify
     161 * @param string $menu_item_type The menu item type (template, custom, post_type, taxonomy).
     162 * @param string $menu_item_object Optional. The menu item object type (post type or taxonomy).
     163 * @return object $menu_item The modtified menu item.
     164 */
     165function wp_setup_nav_menu_item( $menu_item, $menu_item_type = null, $menu_item_object = '' ) {
    256166    global $wp_query;
    257167   
    258     if ( $menu_item->object_id == $wp_query->get_queried_object_id() )
    259         $menu_item->li_class = ' current_page_item';
    260 
    261     $menu_item->anchor_title = '';
    262 /* @todo: update to use tax/post data
    263 
    264             //SET anchor title
    265             if (isset($wp_custom_nav_menu_items->custom_anchor_title)) {
    266                 $anchor_title = $wp_custom_nav_menu_items->custom_anchor_title;
    267             }
    268             else {
    269                 $anchor_title = $title;
    270             }
    271 
    272             if ($queried_id == $wp_custom_nav_menu_items->post_id) {
    273                 $li_class = 'class="current_page_item"';
    274             }
    275 
    276             if (isset($wp_custom_nav_menu_items->new_window)) {
    277                 if ($wp_custom_nav_menu_items->new_window > 0) {
    278                     $target = 'target="_blank"';
    279                 }
    280                 else {
    281                     $target = '';
    282                 }
    283             }
    284 */
    285 
     168    switch ( $menu_item_type ) {
     169        case 'frontend':
     170            $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            $menu_item->append = _x( get_post_meta( $menu_item->ID, 'menu_item_append', true ), 'nav menu item type' );
     175           
     176            $menu_item->title = $menu_item->post_title;
     177            $menu_item->url = get_post_meta( $menu_item->ID, 'menu_item_url', true );
     178            $menu_item->target = get_post_meta( $menu_item->ID, 'menu_item_target', true );
     179           
     180            $menu_item->attr_title = strip_tags( $menu_item->post_excerpt );
     181            $menu_item->description = strip_tags( $menu_item->post_content );
     182           
     183            $menu_item->classes = get_post_meta( $menu_item->ID, 'menu_item_classes', true );;
     184            $menu_item->xfn = get_post_meta( $menu_item->ID, 'menu_item_xfn', true );
     185            $menu_item->li_class = ( $menu_item->object_id == $wp_query->get_queried_object_id() ) ? ' current_page_item' : '';
     186            break;
     187           
     188        case 'custom':
     189            $menu_item->db_id = (int) $menu_item->ID;
     190            $menu_item->object_id = (int) $menu_item->ID;
     191            $menu_item->parent_id = (int) $menu_item->post_parent;
     192            $menu_item->type = 'custom'; //$menu_item_type
     193            $menu_item->append = _x( 'Custom', 'nav menu item type' );
     194           
     195            $menu_item->attr_title = strip_tags( $menu_item->post_excerpt );
     196            $menu_item->description = strip_tags( $menu_item->post_content );
     197
     198            $menu_item->title = $menu_item->post_title;
     199            $menu_item->url = get_post_meta( $menu_item->ID, 'menu_item_url', true );
     200            $menu_item->target = get_post_meta( $menu_item->ID, 'menu_item_target', true );
     201            break;
     202           
     203        case 'post_type':
     204            $menu_item->db_id = 0;
     205            $menu_item->object_id = (int) $menu_item->ID;
     206            $menu_item->parent_id = (int) $menu_item->post_parent;
     207            $menu_item->type = $menu_item_type;
     208           
     209            $object = get_post_type_object( $menu_item_object );
     210            $menu_item->append = _x( $object->singular_label, 'nav menu item type' );
     211
     212            $menu_item->title = $menu_item->post_title;
     213            $menu_item->url = get_post_permalink( $menu_item->ID );
     214            $menu_item->target = '_none';
     215           
     216            $menu_item->attr_title = '';
     217            $menu_item->description = strip_tags( $menu_item->post_content );
     218            break;
     219           
     220        case 'taxonomy':
     221            $menu_item->ID = $menu_item->term_id;
     222            $menu_item->db_id = 0;
     223            $menu_item->object_id = (int) $menu_item->term_id;
     224            $menu_item->parent_id = (int) $menu_item->parent;
     225            $menu_item->type = $menu_item_type;
     226           
     227            $object = get_taxonomy( $menu_item_object );
     228            $menu_item->append = _x( $object->singular_label, 'nav menu item type' );
     229
     230            $menu_item->title = $menu_item->name;
     231            $menu_item->url = get_term_link( $menu_item, $menu_item_object );
     232            $menu_item->target = '_none';
     233            $menu_item->attr_title = '';
     234            $menu_item->description = strip_tags( $menu_item->description );
     235            break;
     236    }
     237   
     238    $menu_item->classes = get_post_meta( $menu_item->ID, 'menu_item_classes', true );
     239    $menu_item->xfn = get_post_meta( $menu_item->ID, 'menu_item_xfn', true );
     240   
    286241    return $menu_item;
    287242}
Note: See TracChangeset for help on using the changeset viewer.