Changeset 14248 for trunk/wp-includes/nav-menu-template.php
- Timestamp:
- 04/27/2010 01:05:58 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-includes/nav-menu-template.php
r14182 r14248 7 7 * @since 3.0.0 8 8 */ 9 10 /** 11 * Create HTML list of nav menu items. 12 * 13 * @package WordPress 14 * @since 3.0.0 15 * @uses Walker 16 */ 17 class Walker_Nav_Menu extends Walker { 18 /** 19 * @see Walker::$tree_type 20 * @since 3.0.0 21 * @var string 22 */ 23 var $tree_type = array( 'post_type', 'taxonomy', 'custom' ); 24 25 /** 26 * @see Walker::$db_fields 27 * @since 3.0.0 28 * @todo Decouple this. 29 * @var array 30 */ 31 var $db_fields = array( 'parent' => 'post_parent', 'id' => 'object_id' ); 32 33 /** 34 * @see Walker::start_lvl() 35 * @since 3.0.0 36 * 37 * @param string $output Passed by reference. Used to append additional content. 38 * @param int $depth Depth of page. Used for padding. 39 */ 40 function start_lvl(&$output, $depth) { 41 $indent = str_repeat("\t", $depth); 42 $output .= "\n$indent<ul class=\"sub-menu\">\n"; 43 } 44 45 /** 46 * @see Walker::end_lvl() 47 * @since 3.0.0 48 * 49 * @param string $output Passed by reference. Used to append additional content. 50 * @param int $depth Depth of page. Used for padding. 51 */ 52 function end_lvl(&$output, $depth) { 53 $indent = str_repeat("\t", $depth); 54 $output .= "$indent</ul>\n"; 55 } 56 57 /** 58 * @see Walker::start_el() 59 * @since 3.0.0 60 * 61 * @param string $output Passed by reference. Used to append additional content. 62 * @param object $item Menu item data object. 63 * @param int $depth Depth of menu item. Used for padding. 64 * @param int $current_page Menu item ID. 65 * @param object $args 66 */ 67 function start_el(&$output, $item, $depth, $args) { 68 global $wp_query; 69 $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; 70 71 $classes = $value = ''; 72 73 $classes = array( 'menu-item', 'menu-item-type-'. $item->type, $item->classes ); 74 75 if ( 'custom' != $item->object ) 76 $classes[] = 'menu-item-object-'. $item->object; 77 78 if ( $item->object_id == $wp_query->get_queried_object_id() ) 79 $classes[] = 'current-menu-item'; 80 81 // @todo add classes for parent/child relationships 82 83 $classes = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ); 84 $classes = ' class="' . esc_attr( $classes ) . '"'; 85 86 $output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $classes .'>'; 87 88 $attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : ''; 89 $attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : ''; 90 $attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : ''; 91 $attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : ''; 92 93 $item_output = $args->before; 94 $item_output .= '<a'. $attributes .'>'; 95 $item_output .= $args->link_before . apply_filters( 'the_title', $item->title ) . $args->link_after; 96 $item_output .= '</a>'; 97 $item_output .= $args->after; 98 99 $output .= apply_filters( 'wp_get_nav_menu_item', $item_output, $args ); 100 } 101 102 /** 103 * @see Walker::end_el() 104 * @since 3.0.0 105 * 106 * @param string $output Passed by reference. Used to append additional content. 107 * @param object $item Page data object. Not used. 108 * @param int $depth Depth of page. Not Used. 109 */ 110 function end_el(&$output, $item, $depth) { 111 $output .= "</li>\n"; 112 } 113 } 114 115 /** 116 * Create HTML list of nav menu input items. 117 * 118 * @package WordPress 119 * @since 3.0.0 120 * @uses Walker_Nav_Menu 121 */ 122 class Walker_Nav_Menu_Checklist extends Walker_Nav_Menu { 123 124 /** 125 * @see Walker::start_el() 126 * @since 3.0.0 127 * 128 * @param string $output Passed by reference. Used to append additional content. 129 * @param object $item Menu item data object. 130 * @param int $depth Depth of menu item. Used for padding. 131 * @param int $current_page Menu item ID. 132 * @param object $args 133 */ 134 function start_el(&$output, $item, $depth, $args) { 135 static $_placeholder; 136 $_placeholder = 0 > $_placeholder ? $_placeholder - 1 : -1; 137 $possible_object_id = isset( $item->post_type ) && 'nav_menu_item' == $item->post_type ? $item->object_id : $_placeholder; 138 $possible_db_id = ( ! empty( $item->ID ) ) && ( 0 < $possible_object_id ) ? (int) $item->ID : 0; 139 140 $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; 141 142 $output .= $indent . '<li>'; 143 $output .= '<label class="menu-item-title">'; 144 $output .= '<input type="checkbox" name="menu-item[' . $possible_object_id . '][menu-item-object-id]" value="'. esc_attr( $item->object_id ) .'" />'; 145 $output .= $item->title .'</label>'; 146 147 // Menu item hidden fields 148 $output .= '<input type="hidden" class="menu-item-db-id" name="menu-item[' . $possible_object_id . '][menu-item-db-id]" value="' . $possible_db_id . '" />'; 149 $output .= '<input type="hidden" class="menu-item-object" name="menu-item[' . $possible_object_id . '][menu-item-object]" value="'. esc_attr( $item->object ) .'" />'; 150 $output .= '<input type="hidden" class="menu-item-parent-id" name="menu-item[' . $possible_object_id . '][menu-item-parent-id]" value="'. esc_attr( $item->post_parent ) .'" />'; 151 $output .= '<input type="hidden" class="menu-item-type" name="menu-item[' . $possible_object_id . '][menu-item-type]" value="'. esc_attr( $item->type ) .'" />'; 152 $output .= '<input type="hidden" class="menu-item-append" name="menu-item[' . $possible_object_id . '][menu-item-append]" value="'. esc_attr( $item->append ) .'" />'; 153 $output .= '<input type="hidden" class="menu-item-title" name="menu-item[' . $possible_object_id . '][menu-item-title]" value="'. esc_attr( $item->title ) .'" />'; 154 $output .= '<input type="hidden" class="menu-item-url" name="menu-item[' . $possible_object_id . '][menu-item-url]" value="'. esc_attr( $item->url ) .'" />'; 155 $output .= '<input type="hidden" class="menu-item-append" name="menu-item[' . $possible_object_id . '][menu-item-append]" value="'. esc_attr( $item->append ) .'" />'; 156 $output .= '<input type="hidden" class="menu-item-target" name="menu-item[' . $possible_object_id . '][menu-item-target]" value="'. esc_attr( $item->target ) .'" />'; 157 $output .= '<input type="hidden" class="menu-item-attr_title" name="menu-item[' . $possible_object_id . '][menu-item-attr_title]" value="'. esc_attr( $item->attr_title ) .'" />'; 158 $output .= '<input type="hidden" class="menu-item-description" name="menu-item[' . $possible_object_id . '][menu-item-description]" value="'. esc_attr( $item->description ) .'" />'; 159 $output .= '<input type="hidden" class="menu-item-classes" name="menu-item[' . $possible_object_id . '][menu-item-classes]" value="'. esc_attr( $item->classes ) .'" />'; 160 $output .= '<input type="hidden" class="menu-item-xfn" name="menu-item[' . $possible_object_id . '][menu-item-xfn]" value="'. esc_attr( $item->xfn ) .'" />'; 161 } 162 } 9 163 10 164 /** … … 18 172 * format - Whether to format the ul. Defaults to 'div'. 19 173 * fallback_cb - If the menu doesn't exists, a callback function will fire. Defaults to 'wp_page_menu'. 20 * container - Type of container tag. Avalible options div, p, or nav. Defaults to 'div'.21 * container_class - Chooses a class for the container.22 * container_id - Chooses an id for the container.23 174 * before - Text before the link text. 24 175 * after - Text after the link text. … … 34 185 */ 35 186 function wp_nav_menu( $args = array() ) { 36 $defaults = array( 'menu' => '', 'container' => 'div', 'container_class' => '', ' container_id' => '', 'menu_class' => 'menu', 'echo' => true,187 $defaults = array( 'menu' => '', 'container' => 'div', 'container_class' => '', 'menu_class' => 'menu', 'echo' => true, 37 188 'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 38 189 'depth' => 0, 'walker' => '', 'context' => 'frontend' ); … … 47 198 // If we couldn't find a menu based off the name, id or slug, 48 199 // get the first menu that has items. 49 if ( ! $menu ) {200 if ( ! $menu ) { 50 201 $menus = wp_get_nav_menus(); 51 202 foreach ( $menus as $menu_maybe ) { … … 57 208 } 58 209 59 // If the menu exists, get it 's items.60 if ( $menu && ! is_wp_error($menu) )61 $menu_items = wp_get_nav_menu_items( $menu->term_id , $args->context);210 // If the menu exists, get its items. 211 if ( $menu && ! is_wp_error($menu) ) 212 $menu_items = wp_get_nav_menu_items( $menu->term_id ); 62 213 63 214 // If no menu was found or if the menu has no items, call the fallback_cb … … 74 225 if ( in_array( $args->container, $container_allowedtags ) ) { 75 226 $class = $args->container_class ? ' class="' . esc_attr($args->container_class) . '"' : ' class="menu-'. $menu->slug .'-container"'; 76 $container_id = $args->container_id ? ' id="' . esc_attr($args->container_id) . '"' : '' ; 77 $nav_menu .= '<'. $args->container . $class . $container_id .'>'; 227 $nav_menu .= '<'. $args->container . $class .'>'; 78 228 } 79 229 80 230 // Set up the $menu_item variables 231 $sorted_menu_items = array(); 81 232 foreach ( (array) $menu_items as $key => $menu_item ) 82 $ menu_items[$menu_item->menu_order] = wp_setup_nav_menu_item( $menu_item, 'frontend');83 84 $items .= walk_nav_menu_tree( $ menu_items, $args->depth, $args );233 $sorted_menu_items[$menu_item->menu_order] = wp_setup_nav_menu_item( $menu_item ); 234 235 $items .= walk_nav_menu_tree( $sorted_menu_items, $args->depth, $args ); 85 236 86 237 // Attributes … … 113 264 114 265 /** 115 * Returns the menu item formatted based on it's context. 116 * 117 * @since 3.0.0 118 * 119 * @param string $menu_item The menu item to format. 120 * @param string $context The context to which the menu item will be formatted to. 121 * @param string $args Optional. Args used for the 'template' context. 122 * @return string $output The menu formatted menu item. 123 */ 124 function wp_get_nav_menu_item( $menu_item, $context = 'frontend', $args = array() ) { 125 $output = ''; 126 switch ( $context ) { 127 case 'frontend': 128 $attributes = ! empty( $menu_item->attr_title ) ? ' title="' . esc_attr( $menu_item->attr_title ) .'"' : ''; 129 $attributes .= ! empty( $menu_item->target ) ? ' target="' . esc_attr( $menu_item->target ) .'"' : ''; 130 $attributes .= ! empty( $menu_item->xfn ) ? ' rel="' . esc_attr( $menu_item->xfn ) .'"' : ''; 131 $attributes .= ! empty( $menu_item->url ) ? ' href="' . esc_attr( $menu_item->url ) .'"' : ''; 132 133 $output .= $args->before; 134 $output .= '<a'. $attributes .'>'; 135 $output .= $args->link_before . apply_filters( 'the_title', $menu_item->title ) . $args->link_after; 136 $output .= '</a>'; 137 $output .= $args->after; 138 139 break; 140 141 case 'backend': 142 $output .= '<dl><dt>'; 143 $output .= '<span class="item-title">'. esc_html( $menu_item->title ) .'</span>'; 144 $output .= '<span class="item-controls">'; 145 $output .= '<span class="item-type">'. esc_html( $menu_item->append ) .'</span>'; 146 147 // Actions 148 $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> | '; 149 $output .= '<a class="item-delete" id="delete-'. esc_attr( $menu_item->ID ) .'" value="'. esc_attr( $menu_item->ID ) .'">'. __('Delete') .'</a>'; 150 151 $output .= '</span></dt></dl>'; 152 153 // Menu Item Settings 154 $output .= '<input type="hidden" name="menu-item-db-id[]" value="'. esc_attr( $menu_item->ID ) .'" />'; 155 $output .= '<input type="hidden" name="menu-item-object-id[]" value="'. esc_attr( $menu_item->object_id ) .'" />'; 156 $output .= '<input type="hidden" name="menu-item-object[]" value="'. esc_attr( $menu_item->object ) .'" />'; 157 $output .= '<input type="hidden" name="menu-item-parent-id[]" value="'. esc_attr( $menu_item->post_parent ) .'" />'; 158 $output .= '<input type="hidden" name="menu-item-position[]" value="'. esc_attr( $menu_item->menu_order ) .'" />'; 159 $output .= '<input type="hidden" name="menu-item-type[]" value="'. esc_attr( $menu_item->type ) .'" />'; 160 $output .= '<input type="hidden" name="menu-item-title[]" value="'. esc_attr( $menu_item->title ) .'" />'; 161 $output .= '<input type="hidden" name="menu-item-url[]" value="'. esc_attr( $menu_item->url ) .'" />'; 162 $output .= '<input type="hidden" name="menu-item-description[]" value="'. esc_attr( $menu_item->description ) .'" />'; 163 $output .= '<input type="hidden" name="menu-item-classes[]" value="'. esc_attr( $menu_item->classes ) .'" />'; 164 $output .= '<input type="hidden" name="menu-item-xfn[]" value="'. esc_attr( $menu_item->xfn ) .'" />'; 165 $output .= '<input type="hidden" name="menu-item-attr-title[]" value="'.esc_attr( $menu_item->post_excerpt ) .'" />'; 166 $output .= '<input type="hidden" name="menu-item-target[]" value="'. esc_attr( $menu_item->target ) .'" />'; 167 break; 168 169 case 'custom': 170 case 'taxonomy': 171 case 'post_type': 172 $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>'; 173 174 // Menu item hidden fields 175 $output .= '<input type="hidden" class="menu-item-db-id" value="0" />'; 176 $output .= '<input type="hidden" class="menu-item-object-id" value="'. esc_attr( $menu_item->object_id ) .'" />'; 177 $output .= '<input type="hidden" class="menu-item-object" value="'. esc_attr( $menu_item->object ) .'" />'; 178 $output .= '<input type="hidden" class="menu-item-parent-id" value="'. esc_attr( $menu_item->post_parent ) .'" />'; 179 $output .= '<input type="hidden" class="menu-item-type" value="'. esc_attr( $menu_item->type ) .'" />'; 180 $output .= '<input type="hidden" class="menu-item-append" value="'. esc_attr( $menu_item->append ) .'" />'; 181 $output .= '<input type="hidden" class="menu-item-title" value="'. esc_attr( $menu_item->title ) .'" />'; 182 $output .= '<input type="hidden" class="menu-item-url" value="'. esc_attr( $menu_item->url ) .'" />'; 183 $output .= '<input type="hidden" class="menu-item-append" value="'. esc_attr( $menu_item->append ) .'" />'; 184 $output .= '<input type="hidden" class="menu-item-target" value="'. esc_attr( $menu_item->target ) .'" />'; 185 $output .= '<input type="hidden" class="menu-item-attr_title" value="'. esc_attr( $menu_item->attr_title ) .'" />'; 186 $output .= '<input type="hidden" class="menu-item-description" value="'. esc_attr( $menu_item->description ) .'" />'; 187 $output .= '<input type="hidden" class="menu-item-classes" value="'. esc_attr( $menu_item->classes ) .'" />'; 188 $output .= '<input type="hidden" class="menu-item-xfn" value="'. esc_attr( $menu_item->xfn ) .'" />'; 189 break; 190 } 191 192 return apply_filters( 'wp_get_nav_menu_item', $output, $context, $args ); 193 } 266 * Retrieve the HTML list content for nav menu items. 267 * 268 * @uses Walker_Nav_Menu to create HTML list content. 269 * @since 2.1.0 270 * @see Walker::walk() for parameters and return description. 271 */ 272 function walk_nav_menu_tree( $items, $depth, $r ) { 273 $walker = ( empty($r->walker) ) ? new Walker_Nav_Menu : $r->walker; 274 $args = array( $items, $depth, $r ); 275 276 return call_user_func_array( array(&$walker, 'walk'), $args ); 277 } 278 194 279 ?>
Note: See TracChangeset
for help on using the changeset viewer.