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-admin/includes/nav-menu.php

    r13512 r13704  
    11<?php
    22
    3 /**
    4  * Displays a list of links and thier sub items.
    5  *
    6  * @since 3.0.0
    7  *
    8  * @param string $counter
    9  * @param string $context
    10  */
    11 function wp_nav_menu_get_custom_links( $counter, $context ) {
    12     $available_links = new WP_Query(  );
    13    
    14     $args = array( 'post_status' => 'any', 'post_type' => 'nav_menu_item', 'meta_value' => 'custom' );
    15     $link_objects = new WP_Query( $args );
    16    
    17     $items_counter = $counter;
    18 
    19     if ( !$link_objects->posts ) {
    20         _e('Not Found');
    21         return $items_counter;
    22     }
    23    
    24     // Display Loop
    25     foreach ( $link_objects->posts as $item ) {
    26         if ( 0 == $item->parent ) {
    27             $item = wp_setup_nav_menu_item( $item, 'item', $items_counter );
    28            
    29             switch ( $context ) {
    30                 case 'menu':
    31                     ?>
    32                     <li id="menu-<?php echo $items_counter; ?>" value="<?php echo $items_counter; ?>">
    33                         <?php
    34                             echo wp_get_nav_menu_item( $item, 'menu' );
    35                             $parentli = $item->ID;
    36                             $items_counter++;
    37                             $items_counter = wp_nav_menu_sub_items( $item->ID, $items_counter, $parentli, 'categories', 'menu' );
    38                         ?>
    39                     </li>
    40                     <?php
    41                     break;
    42                
    43                 case 'default':
    44                     ?>
    45                     <li>
    46                         <?php
    47                             echo wp_get_nav_menu_item( $item, 'default' );
    48                             $parentli = $item->ID;
    49                             $items_counter++;
    50                             $items_counter = wp_nav_menu_sub_items( $item->ID, $items_counter, $parentli, 'categories', 'default' );
    51                         ?>
    52                     </li>
    53                     <?php
    54                     break;
     3/* Register Metaboxes */
     4add_meta_box( 'create-menu', __('Create Menu'), 'wp_nav_menu_create_metabox', 'menus', 'side', 'core' );
     5add_meta_box( 'add-custom-links', __('Add Custom Links'), 'wp_nav_menu_item_link_metabox', 'menus', 'side', 'default' );
     6wp_nav_menu_post_type_metaboxes();
     7wp_nav_menu_taxonomy_metaboxes();
     8
     9/**
     10 * Creates metaboxes for any post type menu item.
     11 *
     12 * @since 3.0.0
     13 */
     14function wp_nav_menu_post_type_metaboxes() {
     15    $post_types = get_post_types( array( 'public' => true ), 'object' );
     16   
     17    if ( !$post_types )
     18        return false;
     19   
     20    foreach ( $post_types as $post_type ) {     
     21        $id = sanitize_title_with_dashes( $post_type->label );
     22       
     23        // delete_transient( "nav_menu_items_{$post_type->name}" );
     24        // delete_transient( "nav_menu_sub_items_{$post_type->name}" );
     25       
     26        add_meta_box( "add-{$id}", sprintf( __('Add an Existing %s'), $post_type->singular_label ), 'wp_nav_menu_item_post_type_metabox', 'menus', 'side', 'default', $post_type );
     27    }
     28}
     29
     30/**
     31 * Creates metaboxes for any taxonomy menu item.
     32 *
     33 * @since 3.0.0
     34 */
     35function wp_nav_menu_taxonomy_metaboxes() {
     36    $taxonomies = get_taxonomies( array( 'show_ui' => true ), 'object' );
     37   
     38    if ( !$taxonomies )
     39        return false;
     40   
     41    foreach ( $taxonomies as $tax ) {
     42        $id = sanitize_title_with_dashes( $tax->label );
     43       
     44        // delete_transient( "nav_menu_items_{$tax->name}" );
     45        // delete_transient( "nav_menu_sub_items_{$tax->name}" );
     46       
     47        add_meta_box( "add-{$id}", sprintf( __('Add an Existing %s'), $tax->singular_label ), 'wp_nav_menu_item_taxonomy_metabox', 'menus', 'side', 'default', $tax );
     48    }
     49}
     50
     51/**
     52 * Displays a metabox for managing the active menu being edited.
     53 *
     54 * @since 3.0.0
     55 */
     56function wp_nav_menu_manage_menu_metabox( $object, $menu ) { ?>
     57    <div id="submitpost" class="submitbox">
     58        <div id="minor-publishing">
     59            <div class="misc-pub-section misc-pub-section-last">
     60                <label class="howto" for="menu-name">
     61                    <span><?php _e('Name'); ?></span>
     62                    <input id="menu-name" name="menu-name" type="text" class="regular-text menu-item-textbox" value="<?php esc_attr_e( $menu['args'][1] ); ?>" />
     63                    <br class="clear" />
     64                </label>
     65            </div><!--END .misc-pub-section misc-pub-section-last-->
     66            <br class="clear" />
     67        </div><!--END #misc-publishing-actions-->
     68        <div id="major-publishing-actions">
     69            <div id="delete-action">
     70                <a class="submitdelete deletion" href="<?php echo wp_nonce_url( admin_url('nav-menus.php?action=delete&amp;menu=' . $menu['args'][0]), 'delete-nav_menu-' . $menu['args'][0] ); ?>"><?php _e('Delete Menu'); ?></a>
     71            </div><!--END #delete-action-->
     72
     73            <div id="publishing-action">
     74                <input class="button-primary" name="save_menu" type="submit" value="<?php esc_attr_e('Save Menu'); ?>" />
     75            </div><!--END #publishing-action-->
     76            <br class="clear" />
     77        </div><!--END #major-publishing-actions-->
     78    </div><!--END #submitpost .submitbox-->
     79    <?php
     80}
     81
     82/**
     83 * Displays a metabox for creating a new menu.
     84 *
     85 * @since 3.0.0
     86 */
     87function wp_nav_menu_create_metabox() { ?>
     88    <p>
     89        <input type="text" name="create-menu-name" id="create-menu-name" class="regular-text" value=""  />
     90        <input type="submit" name="create-menu" id="create-menu" class="button" value="<?php esc_attr_e('Create Menu'); ?>" />
     91    </p>
     92    <?php
     93}
     94
     95/**
     96 * Displays a metabox for the custom links menu item.
     97 *
     98 * @since 3.0.0
     99 */
     100function wp_nav_menu_item_link_metabox() {
     101    $args = array( 'post_status' => 'any', 'post_type' => 'nav_menu_item', 'meta_value' => 'custom' ); 
     102   
     103    // Cache the query for a day. @todo: Make sure to flush transient when links are updated.
     104    $query = get_transient( 'menu_item_query_custom_links' );
     105    if ( false == $query ) {
     106        $query = new WP_Query( $args );
     107        set_transient( 'menu_item_query_custom_links', $query, 86400 );
     108    }
     109   
     110    ?>
     111    <p id="menu-item-url-wrap">
     112        <label class="howto" for="menu-item-url">
     113            <span><?php _e('URL'); ?></span>
     114            <input id="custom-menu-item-url" name="custom-menu-item-url" type="text" class="code menu-item-textbox" value="http://" />
     115        </label>
     116    </p>
     117    <br class="clear" />
     118    <p id="menu-item-name-wrap">
     119        <label class="howto" for="custom-menu-item-name">
     120            <span><?php _e('Text'); ?></span>
     121            <input id="custom-menu-item-name" name="custom-menu-item-name" type="text" class="regular-text menu-item-textbox" value="<?php echo esc_attr( __('Menu Item') ); ?>" />
     122        </label>
     123    </p>
     124   
     125    <p class="button-controls">
     126        <a class="show-all"><?php _e('View All'); ?></a>
     127        <a class="hide-all"><?php _e('Hide All'); ?></a>
     128    </p>
     129    <div id="available-links" class="list-wrap">
     130        <div class="list-container">
     131            <ul class="list">
     132                <?php echo wp_nav_menu_get_items( $query->posts, 'custom' ); ?>
     133            </ul>
     134        </div><!-- /.list-container-->
     135    </div><!-- /#available-links-->
     136    <p class="add-to-menu">
     137        <a class="button"><?php _e('Add to Menu'); ?></a>
     138    </p>
     139    <div class="clear"></div>
     140    <?php
     141}
     142
     143/**
     144 * Displays a metabox for a post type menu item.
     145 *
     146 * @since 3.0.0
     147 *
     148 * @param string $object Not used.
     149 * @param string $post_type The post type object.
     150 */
     151function wp_nav_menu_item_post_type_metabox( $object, $post_type ) {
     152    $args = array( 'post_type' => $post_type['args']->name, );
     153   
     154    if ( 'attachment' == $post_type['args']->name )
     155        $args['post_status'] = 'any';
     156   
     157    // Cache the query for a day. @todo: Make sure to flush transient when objects are updated.
     158    $query = get_transient( "nav_menu_items_{$post_type['args']->name}" );
     159    if ( false == $query ) {
     160        $query = new WP_Query( $args );
     161        set_transient( "nav_menu_items_{$post_type['args']->name}", $query, 86400 );
     162    }
     163   
     164    if ( !$query->posts )
     165        $error = '<li id="error">'. sprintf( __( 'No %s exists' ), $post_type['args']->label ) .'</li>';
     166   
     167    $pt_names = '';
     168    if ( is_array($query->posts) ) {
     169        foreach ( $query->posts as $post ) {
     170            if ( $post->post_title ) {
     171                $pt_names .= htmlentities( $post->post_title ) .'|';
     172            } else {
     173                $pt_names = sprintf( __('No %s exists'), $post_type['args']->label );
    55174            }
    56175        }
    57176    }
    58     return $items_counter;
    59 }
    60 
    61 /**
    62  * Displays a list of pages and thier sub items.
    63  *
    64  * @since 3.0.0
    65  *
    66  * @param string $counter
    67  * @param string $context
    68  */
    69 function wp_nav_menu_get_pages( $counter, $context ) {
    70     $pages_args = array(
    71             'child_of' => 0,
    72             'sort_order' => 'ASC',
    73             'sort_column' => 'post_title',
    74             'hierarchical' => 1,
    75             'exclude' => '',
    76             'include' => '',
    77             'meta_key' => '',
    78             'meta_value' => '',
    79             'authors' => '',
    80             'parent' => -1,
    81             'exclude_tree' => '',
    82             'number' => '',
    83             'offset' => 0 );
    84 
    85     // Get all pages
    86     $pages_array = get_pages( $pages_args );
    87 
    88     $items_counter = $counter;
    89     $parentli = $items_counter;
    90 
    91     if ( !$pages_array ) {
    92         echo __('Not Found');
    93         return $items_counter;
    94     }
    95 
    96     // Display Loop
    97     foreach ( $pages_array as $post ) {
    98         if ( $post->post_parent == 0 ) {
    99             $post = wp_setup_nav_menu_item( $post, 'page', $items_counter );
    100             if ( $context == 'menu' ) {
    101                 ?>
    102                 <li id="menu-<?php echo $items_counter; ?>" value="<?php echo $items_counter; ?>">
    103                     <?php
    104                         echo wp_get_nav_menu_item( $post, 'menu', $items_counter );
    105                         $parentli = $post->ID;
    106                         $items_counter++;
    107                         $items_counter = wp_nav_menu_sub_items( $post->ID, $items_counter, $parentli, 'pages', 'menu' );
    108                     ?>
    109                 </li>
    110                 <?php
    111             } elseif ( $context == 'default' ) {
    112                 // Sidebar Menu
    113                 ?>
    114                  <li>
    115                     <?php
    116                         echo wp_get_nav_menu_item( $post, 'default' );
    117                         $parentli = $post->ID;
    118                         $items_counter++;
    119                         $items_counter = wp_nav_menu_sub_items( $post->ID, $items_counter, $parentli, 'pages', 'default' );
    120                      ?>
    121                 </li>
    122                 <?php
     177   
     178    $id = sanitize_title_with_dashes( $post_type['args']->label );
     179    ?>
     180    <p class="quick-search-wrap">
     181        <input type="text" class="quick-search regular-text" value="" />
     182        <a class="quick-search-submit button-secondary"><?php _e('Search'); ?></a>
     183    </p>
     184   
     185    <p class="button-controls">
     186        <a class="show-all"><?php _e('View All'); ?></a>
     187        <a class="hide-all"><?php _e('Hide All'); ?></a>
     188    </p>
     189   
     190    <div id="existing-<?php echo esc_attr( $id ); ?>" class="list-wrap">
     191        <div class="list-container">
     192            <ul class="list">
     193                <?php echo isset( $error ) ? $error : wp_nav_menu_get_items( $query->posts, 'post_type', $post_type['args']->name ); ?>
     194            </ul>
     195        </div><!-- /.list-container-->
     196    </div><!-- /#existing-categories-->
     197    <p class="add-to-menu">
     198        <a class="button-secondary"><?php _e('Add to Menu'); ?></a>
     199    </p>
     200    <input type="hidden" class="autocomplete" name="autocomplete-<?php echo esc_attr( $post_type['args']->name ); ?>-names" value="<?php echo esc_js( $pt_names ); ?>" />
     201    <br class="clear" />
     202    <script type="text/javascript" charset="utf-8">
     203        // <![CDATA[
     204        jQuery(document).ready(function(){
     205            wp_nav_menu_autocomplete('<?php echo esc_attr($id); ?>');
     206        });
     207        // ]]>
     208    </script>
     209    <?php
     210}
     211
     212/**
     213 * Displays a metabox for a taxonomy menu item.
     214 *
     215 * @since 3.0.0
     216 *
     217 * @param string $object Not used.
     218 * @param string $taxonomy The taxonomy object.
     219 */
     220function wp_nav_menu_item_taxonomy_metabox( $object, $taxonomy ) {
     221    $args = array(
     222        'child_of' => 0, 'orderby' => 'name', 'order' => 'ASC',
     223        'hide_empty' => false, 'include_last_update_time' => false, 'hierarchical' => 1, 'exclude' => '',
     224        'include' => '', 'number' => '', 'pad_counts' => false
     225    );
     226   
     227    // Cache the query for a day. @todo: Make sure to flush transient when terms are updated.
     228    $terms = get_transient( "nav_menu_items_{$taxonomy['args']->name}" );
     229    if ( false == $terms ) {
     230        $terms = get_terms( $taxonomy['args']->name, $args );
     231        set_transient( "nav_menu_items_{$taxonomy['args']->name}", $terms, 86400 );
     232    }
     233   
     234    if ( !$terms )
     235        $error = '<li id="error">'. sprintf( __( 'No %s exists' ), $taxonomy['args']->label ) .'</li>';
     236   
     237    $term_names = '';
     238    if ( is_array($terms) ) {
     239        foreach ( $terms as $term ) {
     240            if ( $term->name ) {
     241                $term_names .= htmlentities( $term->name ) .'|';
     242            } else {
     243                $term_names = sprintf( __('No %s exists'), $taxonomy['args']->label );
    123244            }
    124245        }
    125246    }
    126     return $items_counter;
    127 }
    128 
    129 /**
    130  * Displays a list of categories and thier sub items.
    131  *
    132  * @since 3.0.0
    133  *
    134  * @param string $counter
    135  * @param string $context
    136  */
    137 function wp_nav_menu_get_categories( $counter, $context ) {
    138     $category_args = array(
    139             'type'                     => 'post',
    140             'child_of'                 => 0,
    141             'orderby'                  => 'name',
    142             'order'                    => 'ASC',
    143             'hide_empty'               => false,
    144             'include_last_update_time' => false,
    145             'hierarchical'             => 1,
    146             'exclude'                  => '',
    147             'include'                  => '',
    148             'number'                   => '',
    149             'pad_counts'               => false );
    150 
    151     $items_counter = $counter;
    152 
    153     // Get all categories
    154     $categories_array = get_categories( $category_args );
    155 
    156     if ( !$categories_array ) {
    157         _e('Not Found');
    158         return $items_counter;
    159     }
    160 
    161     // Display Loop
    162     foreach ( $categories_array as $cat_item ) {
    163         if ( $cat_item->parent == 0 ) {
    164             $cat_item = wp_setup_nav_menu_item( $cat_item, 'category', $items_counter );
    165             // Custom Menu
    166             if ( $context == 'menu' ) {
    167                 ?>
    168                 <li id="menu-<?php echo $items_counter; ?>" value="<?php echo $items_counter; ?>">
    169                     <?php
    170                         echo wp_get_nav_menu_item($cat_item, 'menu');
    171                         $parentli = $cat_item->cat_ID;
    172                         $items_counter++;
    173                         $items_counter = wp_nav_menu_sub_items( $cat_item->cat_ID, $items_counter, $parentli, 'categories', 'menu' );
    174                     ?>
    175                 </li>
    176                 <?php
    177             } elseif ( $context == 'default' ) {
    178                 // Sidebar Menu
    179                 ?>
    180                 <li>
    181                     <?php
    182                         echo wp_get_nav_menu_item( $cat_item, 'default' );
    183                         $parentli = $cat_item->cat_ID;
    184                         $items_counter++;
    185                         $items_counter = wp_nav_menu_sub_items( $cat_item->cat_ID, $items_counter, $parentli, 'categories', 'default' );
    186                     ?>
    187                 </li>
    188                 <?php
     247   
     248    $id = sanitize_title_with_dashes( $taxonomy['args']->label );
     249    ?>
     250    <p class="quick-search-wrap">
     251        <input type="text" class="quick-search regular-text" value="" />
     252        <a class="quick-search-submit button-secondary"><?php _e('Search'); ?></a>
     253    </p>
     254   
     255    <p class="button-controls">
     256        <a class="show-all"><?php _e('View All'); ?></a>
     257        <a class="hide-all"><?php _e('Hide All'); ?></a>
     258    </p>
     259   
     260    <div id="existing-<?php echo esc_attr( $id ); ?>" class="list-wrap">
     261        <div class="list-container">
     262            <ul class="list">
     263                <?php echo isset( $error ) ? $error : wp_nav_menu_get_items( $terms, 'taxonomy', $taxonomy['args']->name ); ?>
     264            </ul>
     265        </div><!-- /.list-container-->
     266    </div><!-- /#existing-categories-->
     267    <p class="add-to-menu">
     268        <a class="button-secondary"><?php _e('Add to Menu'); ?></a>
     269    </p>
     270    <input type="hidden" class="autocomplete" name="autocomplete-<?php echo esc_attr($taxonomy['args']->name); ?>-names" value="<?php echo esc_js( $term_names ); ?>" />
     271    <br class="clear" />
     272    <script type="text/javascript" charset="utf-8">
     273        // <![CDATA[
     274        jQuery(document).ready(function(){
     275            wp_nav_menu_autocomplete('<?php echo esc_attr($id); ?>');
     276        });
     277        // ]]>
     278    </script>
     279    <?php
     280}
     281
     282/**
     283 * Abstract function for returning all menu items of a menu item type.
     284 *
     285 * @since 3.0.0
     286 *
     287 * @param string $menu_items Array of objects containing all menu items to be displayed.
     288 * @param string $object_type Menu item type.
     289 * @param string $object Optional. Menu item type name.
     290 * @param string $context Optional. The context for how the menu items should be formatted.
     291 * @return string $ouput Menu items.
     292 */
     293function wp_nav_menu_get_items( $menu_items, $object_type, $object = null, $context = 'frontend' ) {
     294    if ( !$menu_items )
     295        return __( 'Not Found' );
     296       
     297    $output = '';
     298    $i = 1;
     299    foreach ( $menu_items as $menu_item ) {
     300        // convert the 'parent' taxonomy property to 'post_parent'
     301        // so we don't have to duplicate this entire function.
     302        if ( !isset($menu_item->post_parent) )
     303            $menu_item->post_parent = $menu_item->parent;
     304       
     305        // Cleanest way to get all attachements
     306        if ( 'attachment' == $object )
     307            $menu_item->post_parent = 0;
     308       
     309        if ( 0 == $menu_item->post_parent ) {
     310            // Setup the menu item
     311            $menu_item = wp_setup_nav_menu_item( $menu_item, $object_type, $object );           
     312            $attributes = ( 'backend' == $context ) ? ' id="menu-item-'. $i .'" value="'. $i .'"' : '';
     313           
     314            $output .= '<li'. $attributes .'>';
     315            $output .= wp_get_nav_menu_item( $menu_item, $object_type, $object );
     316            $output .= wp_get_nav_menu_sub_items( $menu_item->ID, $object_type, $object, $context );
     317            $output .= '</li>';
     318
     319            ++$i;
     320        }
     321    }
     322   
     323    return $output;
     324}
     325
     326/**
     327 * Recursive function to retrieve sub menu items.
     328 *
     329 * @since 3.0.0
     330 *
     331 * @param string $childof The Parent ID.
     332 * @param string $object_type The object type.
     333 * @param string $object The object name.
     334 * @return string $output sub menu items.
     335 */
     336function wp_get_nav_menu_sub_items( $childof, $object_type, $object = null, $context = 'frontend' ) {
     337    $args = array( 'child_of' => $childof, 'parent' => $childof, 'hide_empty' => false, );
     338   
     339    switch ( $object_type ) {
     340        case 'post_type':
     341            $hierarchical_post_types = get_post_types( array( 'hierarchical' => true ) );
     342            if ( in_array( $object, $hierarchical_post_types ) ) {
     343                $args['post_type'] = $object;
     344                $sub_menu_items = get_pages( $args );
     345            } else {
     346                $sub_menu_items = array();
    189347            }
     348            break;
     349           
     350        case 'taxonomy':
     351            if ( is_taxonomy_hierarchical( $object ) ) {
     352                $sub_menu_items = get_terms( $object, $args );
     353            } else {
     354                $sub_menu_items = array();
     355            }
     356            break;
     357       
     358        default:
     359            $sub_menu_items = array();
     360            break;
     361    }
     362   
     363    $output = '';
     364    $i = 1;
     365    if ( !empty($sub_menu_items) && !is_wp_error($sub_menu_items) ) {
     366        $output .= '<ul class="sub-menu menu-item-type-'. $object_type .'">';
     367        foreach ( $sub_menu_items as $menu_item ) {
     368            // Setup the menu item
     369            $menu_item = wp_setup_nav_menu_item( $menu_item, $object_type, $object );
     370            $attributes = ( 'backend' == $context ) ? ' id="menu-item-'. $i .'" value="'. $i .'"' : '';
     371
     372            $output .= '<li'. $attributes .'>';
     373            $output .= wp_get_nav_menu_item( $menu_item, $object_type, $object );
     374            $output .= wp_get_nav_menu_sub_items( $menu_item->ID, $object_type, $object );
     375            $output .= '</li>';
     376
     377            ++$i;
    190378        }
    191     }
    192     return $items_counter;
    193 }
    194 
    195 /**
    196  * Recursive function that gets sub menu items.
    197  *
    198  * @since 3.0.0
    199  *
    200  * @param string $childof
    201  * @param string $items_counter
    202  * @param string $parentli
    203  * @param string $context
    204  * @param string $output_type
    205  */
    206 function wp_nav_menu_sub_items( $childof, $items_counter, $parentli, $context, $output_type ) {
    207     $counter = $items_counter;
    208 
    209     // Custom Menu
    210     if ( $output_type == 'menu' ) {
    211         $sub_args = array(
    212         'child_of' => $childof,
    213         'hide_empty' => false,
    214         'parent' => $childof);
    215     } elseif ( $output_type == 'default' ) {
    216         // Sidebar Menu
    217         $sub_args = array(
    218         'child_of' => $childof,
    219         'hide_empty' => false,
    220         'parent' => $childof);
    221     }
    222 
    223     if ( $context == 'categories' ) {
    224         // Get Sub Category Items
    225         $item_type = 'category';
    226         $sub_array = get_categories($sub_args);
    227     } elseif ($context == 'pages') {
    228         // Get Sub Page Items
    229         $item_type = 'page';
    230         $sub_array = get_pages($sub_args);
    231     } else {
    232         $item_type = 'custom';
    233         $sub_array = array();
    234     }
    235 
    236     if ( $sub_array ) {
    237         ?>
    238         <ul id="sub-menu-<?php echo $context ?>">
    239         <?php
    240         // Display Loop
    241         foreach ( $sub_array as $sub_item ) {
    242             $sub_item = wp_setup_nav_menu_item( $sub_item, $item_type, $counter );
    243             if ( $output_type == 'menu' ) {
    244                 ?>
    245                 <li id="menu-<?php echo $counter; ?>" value="<?php echo $counter; ?>">
    246                     <?php
    247                         echo wp_get_nav_menu_item( $sub_item, 'menu' );
    248                         $counter++;
    249                         $counter = wp_nav_menu_sub_items( $sub_item->ID, $counter, $sub_item->ID, $context, 'menu' );
    250                     ?>
    251                 </li>
    252                 <?php
    253             } elseif ( $output_type == 'default' ) {
    254                 // Sidebar Menu
    255                 ?>
    256                 <li>
    257                     <?php
    258                         echo wp_get_nav_menu_item( $sub_item, 'default' );
    259                         //$counter++;
    260                         $counter = wp_nav_menu_sub_items( $sub_item->ID, $counter, $sub_item->ID, $context, 'default' );
    261                     ?>
    262                 </li>
    263 
    264                 <?php
    265             }
    266         }
    267         ?>
    268         </ul>
    269     <?php
    270     }
    271     return $counter;
     379        $output .= '</ul>';
     380    }
     381    return $output;
    272382}
    273383?>
Note: See TracChangeset for help on using the changeset viewer.