Changeset 13802 for trunk/wp-includes/nav-menu-template.php
- Timestamp:
- 03/22/2010 07:56:16 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-includes/nav-menu-template.php
r13743 r13802 10 10 * format - Whether to format the ul. Defaults to 'div'. 11 11 * fallback_cb - If the menu doesn't exists, a callback function will fire. Defaults to 'wp_page_menu'. 12 * before _link - Output text before the link.13 * after _link - Output text after the link.14 * before_title - Output text before the link text.15 * before_title - Output text after the link text.12 * before - Text before the link text. 13 * after - Text after the link text. 14 * link_before - Text before the link. 15 * link_after - Text after the link. 16 16 * echo - Whether to echo the menu or return it. Defaults to echo. 17 *18 * TODO:19 17 * show_home - If you set this argument, then it will display the link to the home page. The show_home argument really just needs to be set to the value of the text of the link. 20 18 * … … 25 23 function wp_nav_menu( $args = array() ) { 26 24 $defaults = array( 'menu' => '', 'container' => 'div', 'container_class' => '', 'menu_class' => 'menu', 'echo' => true, 27 'fallback_cb' => 'wp_page_menu', 'before_link' => '', 'after_link' => '', 'before_title' => '', 'after_title' => '', ); 25 'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 26 'depth' => 0, 'walker' => '' ); 28 27 29 28 $args = wp_parse_args( $args, $defaults ); … … 84 83 **/ 85 84 function wp_get_nav_menu( $args = array() ) { 86 $defaults = array( 'menu' => '', 'menu_class' => 'menu', 'context' => 'frontend', 87 'fallback_cb' => '', ' before_link' => '', 'after_link' => '', 'before_title' => '', 'after_title' => '', );85 $defaults = array( 'menu' => '', 'menu_class' => 'menu', 'context' => 'frontend', 'depth' => 0, 86 'fallback_cb' => '', 'walker' => '', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', ); 88 87 89 88 $args = wp_parse_args( $args, $defaults ); … … 94 93 $nav_menu = ''; 95 94 $items = ''; 96 $current_parent = 0;97 $parent_stack = array();98 $parent_menu_order = array();99 95 100 96 // Get the menu object … … 103 99 // If the menu exists, get it's items. 104 100 if ( $menu && !is_wp_error($menu) ) 105 $menu_items = wp_get_nav_menu_items( $menu->term_id, 'backend');101 $menu_items = wp_get_nav_menu_items( $menu->term_id, $args->context ); 106 102 107 103 // If no menu was found or if the menu has no items, call the fallback_cb 108 104 if ( !$menu || is_wp_error($menu) || ( isset($menu_items) && empty($menu_items) ) ) { 109 if ( function_exists($args->fallback_cb) ) {110 $_args = array_merge( (array) $args, array('echo' => false) );105 if ( function_exists($args->fallback_cb) || is_callable( $args->fallback_cb ) ) { 106 $_args = array_merge( (array) $args, array('echo' => false) ); 111 107 return call_user_func( $args->fallback_cb, $_args ); 112 108 } 113 109 } 114 115 foreach ( $menu_items as $key => $menu_item ) { 116 // Set up the $menu_item variables 117 $menu_item = wp_setup_nav_menu_item( $menu_item, 'frontend' ); 118 119 $type = $menu_item->append; 120 $maybe_value = 'frontend' == $args->context ? '' : ' value="'. $menu_item->ID .'"'; 121 $classes = 'frontend' == $args->context ? ' class="menu-item-type-'. $type . $menu_item->li_class .'"' : ''; 122 123 $items .= '<li id="menu-item-'. $menu_item->ID .'"'. $maybe_value . $classes .'>'; 124 $items .= wp_get_nav_menu_item( $menu_item, $args->context, $args ); 125 126 // Indent children 127 $last_item = ( count( $menu_items ) == $menu_item->menu_order ); 128 if ( $last_item || $current_parent != $menu_items[$key + 1]->post_parent ) { 129 if ( $last_item || in_array( $menu_items[$key + 1]->post_parent, $parent_stack ) ) { 130 $items .= '</li>'; 131 while ( !empty( $parent_stack ) && ($last_item || $menu_items[$key + 1]->post_parent != $current_parent ) ) { 132 $items .= '</ul></li>'; 133 $current_parent = array_pop( $parent_stack ); 134 } 135 } else { 136 array_push( $parent_stack, $current_parent ); 137 $current_parent = $menu_item->ID; 138 $items .= '<ul class="sub-menu">'; 139 } 140 } else { 141 $items .= '</li>'; 142 } 143 } 110 111 // Set up the $menu_item variables 112 foreach ( (array) $menu_items as $key => $menu_item ) 113 $menu_items[$menu_item->menu_order] = wp_setup_nav_menu_item( $menu_item, 'frontend' ); 114 115 $items .= walk_nav_menu_tree( $menu_items, $args->depth, $args ); 144 116 145 117 // CSS class … … 175 147 switch ( $context ) { 176 148 case 'frontend': 177 $attributes = ( isset($menu_item->a nchor_title) && '' != $menu_item->anchor_title ) ? ' title="'. esc_attr($menu_item->anchor_title) .'"' : '';149 $attributes = ( isset($menu_item->attr_title) && '' != $menu_item->attr_title ) ? ' title="'. esc_attr($menu_item->attr_title) .'"' : ''; 178 150 $attributes .= ( isset($menu_item->target) && '' != $menu_item->target ) ? ' target="'. esc_attr($menu_item->target) .'"' : ''; 179 $attributes .= ( isset($menu_item->classes) && '' != $menu_item->classes ) ? ' class="'. esc_attr($menu_item->classes) .'"' : '';180 151 $attributes .= ( isset($menu_item->xfn) && '' != $menu_item->xfn ) ? ' rel="'. esc_attr($menu_item->xfn) .'"' : ''; 181 152 $attributes .= ( isset($menu_item->url) && '' != $menu_item->url ) ? ' href="'. esc_attr($menu_item->url) .'"' : ''; 182 153 183 $output .= esc_html( $args->before _link);154 $output .= esc_html( $args->before ); 184 155 $output .= '<a'. $attributes .'>'; 185 $output .= esc_html( $args-> before_title . $menu_item->title . $args->after_title);156 $output .= esc_html( $args->link_before . apply_filters('the_title', $menu_item->title) . $args->link_after ); 186 157 $output .= '</a>'; 187 $output .= esc_html( $args->after _link);158 $output .= esc_html( $args->after ); 188 159 189 160 break; … … 191 162 case 'backend': 192 163 $output .= '<dl><dt>'; 193 $output .= '<span class="item-title">'. esc_html( $menu_item->title) .'</span>';164 $output .= '<span class="item-title">'. esc_html( $menu_item->title ) .'</span>'; 194 165 $output .= '<span class="item-controls">'; 195 if ( 'custom' == $menu_item->type ) { 196 $label = __('Custom'); 197 } elseif ( 'post_type' == $menu_item->type ) { 198 $type_obj = get_post_type_object($menu_item->append); 199 $label = $type_obj->singular_label; 200 } elseif ( 'taxonomy' == $menu_item->type ) { 201 $taxonomy = get_taxonomy($menu_item->append); 202 $label = $taxonomy->singular_label; 203 } else { 204 $label = $menu_item->append; 205 } 206 $output .= '<span class="item-type">'. esc_html($label) .'</span>'; 166 $output .= '<span class="item-type">'. esc_html( $menu_item->append ) .'</span>'; 207 167 208 168 // Actions 209 $output .= '<a class="item-edit thickbox" id="edit '. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->menu_order) .'" title="'. __('Edit Menu Item') .'" href="#TB_inline?height=540&width=300&inlineId=menu-item-settings">'. __('Edit') .'</a> | ';210 $output .= '<a class="item-delete" id="delete '. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->menu_order) .'">'. __('Delete') .'</a>';211 212 $output .= '</ dt></dl>';169 $output .= '<a class="item-edit thickbox" id="edit-'. esc_attr( $menu_item->ID ) .'" value="'. esc_attr( $menu_item->ID ) .'" title="'. __('Edit Menu Item') .'" href="#TB_inline?height=540&width=300&inlineId=menu-item-settings">'. __('Edit') .'</a> | '; 170 $output .= '<a class="item-delete" id="delete-'. esc_attr( $menu_item->ID ) .'" value="'. esc_attr( $menu_item->ID ) .'">'. __('Delete') .'</a>'; 171 172 $output .= '</span></dt></dl>'; 213 173 214 174 // Menu Item Settings 215 $output .= '<input type="hidden" name="menu-item-db-id[]" id="menu-item-db-id'. esc_attr( $menu_item->menu_order ) .'"value="'. esc_attr( $menu_item->ID ) .'" />';216 $output .= '<input type="hidden" name="menu-item-object-id[]" id="menu-item-object-id'. esc_attr( $menu_item->menu_order ) .'"value="'. esc_attr( $menu_item->object_id ) .'" />';217 $output .= '<input type="hidden" name="menu-item- parent-id[]" id="menu-item-parent-id'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->post_parent ) .'" />';218 $output .= '<input type="hidden" name="menu-item-p osition[]" id="menu-item-position'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->menu_order) .'" />';219 $output .= '<input type="hidden" name="menu-item- type[]" id="menu-item-type'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->type) .'" />';220 $output .= '<input type="hidden" name="menu-item- append[]" id="menu-item-append'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->append) .'" />';221 $output .= '<input type="hidden" name="menu-item-title[]" id="menu-item-title'. esc_attr( $menu_item->menu_order ) .'"value="'. esc_attr( $menu_item->title ) .'" />';222 $output .= '<input type="hidden" name="menu-item-url[]" id="menu-item-url'. esc_attr( $menu_item->menu_order ) .'"value="'. esc_attr( $menu_item->url ) .'" />';223 $output .= '<input type="hidden" name="menu-item-description[]" id="menu-item-description'. esc_attr( $menu_item->menu_order ) .'"value="'. esc_attr( $menu_item->description ) .'" />';224 $output .= '<input type="hidden" name="menu-item-classes[]" id="menu-item-classes'. esc_attr( $menu_item->menu_order ) .'"value="'. esc_attr( $menu_item->classes ) .'" />';225 $output .= '<input type="hidden" name="menu-item-xfn[]" id="menu-item-xfn'. esc_attr( $menu_item->menu_order ) .'"value="'. esc_attr( $menu_item->xfn ) .'" />';226 $output .= '<input type="hidden" name="menu-item-attr-title[]" id="menu-item-attr-title'. esc_attr( $menu_item->menu_order ) .'"value="'.esc_attr( $menu_item->post_excerpt ) .'" />';227 $output .= '<input type="hidden" name="menu-item-target[]" id="menu-item-target'. esc_attr( $menu_item->menu_order ) .'"value="'. esc_attr( $menu_item->target ) .'" />';175 $output .= '<input type="hidden" name="menu-item-db-id[]" value="'. esc_attr( $menu_item->ID ) .'" />'; 176 $output .= '<input type="hidden" name="menu-item-object-id[]" value="'. esc_attr( $menu_item->object_id ) .'" />'; 177 $output .= '<input type="hidden" name="menu-item-object[]" value="'. esc_attr( $menu_item->object ) .'" />'; 178 $output .= '<input type="hidden" name="menu-item-parent-id[]" value="'. esc_attr( $menu_item->post_parent ) .'" />'; 179 $output .= '<input type="hidden" name="menu-item-position[]" value="'. esc_attr( $menu_item->menu_order ) .'" />'; 180 $output .= '<input type="hidden" name="menu-item-type[]" value="'. esc_attr( $menu_item->type ) .'" />'; 181 $output .= '<input type="hidden" name="menu-item-title[]" value="'. esc_attr( $menu_item->title ) .'" />'; 182 $output .= '<input type="hidden" name="menu-item-url[]" value="'. esc_attr( $menu_item->url ) .'" />'; 183 $output .= '<input type="hidden" name="menu-item-description[]" value="'. esc_attr( $menu_item->description ) .'" />'; 184 $output .= '<input type="hidden" name="menu-item-classes[]" value="'. esc_attr( $menu_item->classes ) .'" />'; 185 $output .= '<input type="hidden" name="menu-item-xfn[]" value="'. esc_attr( $menu_item->xfn ) .'" />'; 186 $output .= '<input type="hidden" name="menu-item-attr-title[]" value="'.esc_attr( $menu_item->post_excerpt ) .'" />'; 187 $output .= '<input type="hidden" name="menu-item-target[]" value="'. esc_attr( $menu_item->target ) .'" />'; 228 188 break; 229 189 230 190 case 'custom': 231 $menu_id = 'menu-item-' . $menu_item->db_id; 232 $output .= '<label class="menu-item-title"><input type="checkbox" id="'. esc_attr( $menu_id ) .'" name="'. esc_attr( $menu_item->title ) .'" value="'. esc_attr( $menu_item->url ) .'" />'. $menu_item->title .'</label>'; 191 case 'taxonomy': 192 case 'post_type': 193 $output .= '<label class="menu-item-title"><input type="checkbox" id="'. esc_attr( 'menu-item-' . $menu_item->object_id ) .'" value="'. esc_attr( $menu_item->url ) .'" />'. $menu_item->title .'</label>'; 233 194 234 195 // Menu item hidden fields 235 $output .= '<input type="hidden" class="menu-item-db-id" value=" '. esc_attr( $menu_item->db_id ) .'" />';196 $output .= '<input type="hidden" class="menu-item-db-id" value="0" />'; 236 197 $output .= '<input type="hidden" class="menu-item-object-id" value="'. esc_attr( $menu_item->object_id ) .'" />'; 237 $output .= '<input type="hidden" class="menu-item-parent-id" value="'. esc_attr( $menu_item->parent_id ) .'" />'; 198 $output .= '<input type="hidden" class="menu-item-object" value="'. esc_attr( $menu_item->object ) .'" />'; 199 $output .= '<input type="hidden" class="menu-item-parent-id" value="'. esc_attr( $menu_item->post_parent ) .'" />'; 238 200 $output .= '<input type="hidden" class="menu-item-type" value="'. esc_attr( $menu_item->type ) .'" />'; 239 201 $output .= '<input type="hidden" class="menu-item-append" value="'. esc_attr( $menu_item->append ) .'" />'; 240 202 $output .= '<input type="hidden" class="menu-item-title" value="'. esc_attr( $menu_item->title ) .'" />'; 241 203 $output .= '<input type="hidden" class="menu-item-url" value="'. esc_attr( $menu_item->url ) .'" />'; 204 $output .= '<input type="hidden" class="menu-item-append" value="'. esc_attr( $menu_item->append ) .'" />'; 242 205 $output .= '<input type="hidden" class="menu-item-target" value="'. esc_attr( $menu_item->target ) .'" />'; 243 206 $output .= '<input type="hidden" class="menu-item-attr_title" value="'. esc_attr( $menu_item->attr_title ) .'" />'; … … 246 209 $output .= '<input type="hidden" class="menu-item-xfn" value="'. esc_attr( $menu_item->xfn ) .'" />'; 247 210 break; 248 249 case 'taxonomy':250 case 'post_type':251 $menu_id = 'menu-item-' . $menu_item->db_id;252 $output .= '<label class="menu-item-title"><input type="checkbox" id="'. esc_attr( $menu_id ) .'" name="'. esc_attr( $menu_item->title ) .'" value="'. esc_attr( $menu_item->url ) .'" />'. $menu_item->title .'</label>';253 254 // Menu item hidden fields255 $output .= '<input type="hidden" class="menu-item-db-id" value="0" />';256 $output .= '<input type="hidden" class="menu-item-object-id" value="'. esc_attr( $menu_item->object_id ) .'" />';257 $output .= '<input type="hidden" class="menu-item-parent-id" value="'. esc_attr( $menu_item->parent_id ) .'" />';258 $output .= '<input type="hidden" class="menu-item-type" value="'. esc_attr( $menu_item->type ) .'" />';259 $output .= '<input type="hidden" class="menu-item-append" value="'. esc_attr( $menu_item->append ) .'" />';260 $output .= '<input type="hidden" class="menu-item-title" value="'. esc_attr( $menu_item->title ) .'" />';261 $output .= '<input type="hidden" class="menu-item-url" value="'. esc_attr( $menu_item->url ) .'" />';262 $output .= '<input type="hidden" class="menu-item-append" value="'. esc_attr( $menu_item->append ) .'" />';263 break;264 211 } 265 212
Note: See TracChangeset
for help on using the changeset viewer.