[ Index ]

PHP Cross Reference of WordPress 3.0 beta 1

[ Index ]     [ Variables ]     [ Functions ]     [ Classes ]     [ Constants ]     [ Statistics ]

title

Body

[close]

/wp-includes/ -> nav-menu-template.php (source)

   1  <?php
   2  /**
   3   * Navigation Menu template functions
   4   *
   5   * @package WordPress
   6   * @subpackage Nav_Menus
   7   * @since 3.0.0
   8   */
   9  
  10  /**
  11   * Displays a navigation menu.
  12   *
  13   * Optional $args contents:
  14   *
  15   * id - The menu id. Defaults to blank.
  16   * slug - The menu slug. Defaults to blank.
  17   * menu_class - CSS class to use for the div container of the menu list. Defaults to 'menu'.
  18   * format - Whether to format the ul. Defaults to 'div'.
  19   * fallback_cb - If the menu doesn't exists, a callback function will fire. Defaults to 'wp_page_menu'.
  20   * before - Text before the link text.
  21   * after - Text after the link text.
  22   * link_before - Text before the link.
  23   * link_after - Text after the link.
  24   * echo - Whether to echo the menu or return it. Defaults to echo.
  25   * 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.
  26   *
  27   * @since 3.0.0
  28   *
  29   * @param array $args Arguments
  30   */
  31  function wp_nav_menu( $args = array() ) {
  32      $defaults = array( 'menu' => '', 'container' => 'div', 'container_class' => '', 'menu_class' => 'menu', 'echo' => true,
  33      'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '',
  34      'depth' => 0, 'walker' => '' );
  35  
  36      $args = wp_parse_args( $args, $defaults );
  37      $args = apply_filters( 'wp_nav_menu_args', $args );
  38      $args = (object) $args;
  39  
  40      // Get the nav menu
  41      $menu = wp_get_nav_menu_object( $args->menu );
  42  
  43      // If we couldn't find a menu based off the name, id or slug,
  44      // get the first menu that has items.
  45      if ( !$menu ) {
  46          $menus = wp_get_nav_menus();
  47          foreach ( $menus as $menu_maybe ) {
  48              if ( wp_get_nav_menu_items($menu_maybe->term_id) ) {
  49                  $menu = $menu_maybe;
  50                  break;
  51              }
  52          }
  53      }
  54  
  55      if ( $menu && ! is_wp_error( $menu ) )
  56          $args->menu = $menu->term_id;
  57      $nav_menu = '';
  58  
  59      if ( 'div' == $args->container ) {
  60          $class = $args->container_class ? ' class="' . esc_attr($args->container_class) . '"' : '';
  61  
  62          if ( is_nav_menu($menu) ) {
  63              $nav_menu .= '<div id="menu-' . $menu->slug . '"'. $class .'>';
  64          } else {
  65              $nav_menu .= '<div'. $class .'>';
  66          }
  67      }
  68  
  69      $nav_menu .= wp_get_nav_menu( $args );
  70  
  71      if ( 'div' == $args->container )
  72          $nav_menu .= '</div>';
  73  
  74      $nav_menu = apply_filters( 'wp_nav_menu', $nav_menu, $args );
  75  
  76      if ( $args->echo )
  77          echo $nav_menu;
  78      else
  79          return $nav_menu;
  80  }
  81  
  82  /**
  83   * Returns a Navigation Menu.
  84   *
  85   * See wp_nav_menu() for args.
  86   *
  87   * @since 3.0.0
  88   *
  89   * @param array $args Arguments
  90   * @return mixed $output False if menu doesn't exists, else, returns the menu.
  91   **/
  92  function wp_get_nav_menu( $args = array() ) {
  93      $defaults = array( 'menu' => '', 'menu_class' => 'menu', 'context' => 'frontend', 'depth' => 0,
  94      'fallback_cb' => '', 'walker' => '', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', );
  95  
  96      $args = wp_parse_args( $args, $defaults );
  97      $args = apply_filters( 'wp_get_nav_menu_args', $args );
  98      $args = (object) $args;
  99  
 100      // Variable setup
 101      $nav_menu = '';
 102      $items = '';
 103  
 104      // Get the menu object
 105      $menu = wp_get_nav_menu_object( $args->menu );
 106  
 107      // If the menu exists, get it's items.
 108      if ( $menu && !is_wp_error($menu) )
 109          $menu_items = wp_get_nav_menu_items( $menu->term_id, $args->context );
 110  
 111      // If no menu was found or if the menu has no items, call the fallback_cb
 112      if ( !$menu || is_wp_error($menu) || ( isset($menu_items) && empty($menu_items) ) ) {
 113          if ( function_exists($args->fallback_cb) || is_callable( $args->fallback_cb ) ) {
 114              $_args = array_merge( (array) $args, array('echo' => false) );
 115              return call_user_func( $args->fallback_cb, $_args );
 116          }
 117      }
 118  
 119      // Set up the $menu_item variables
 120      foreach ( (array) $menu_items as $key => $menu_item )
 121          $menu_items[$menu_item->menu_order] = wp_setup_nav_menu_item( $menu_item, 'frontend' );
 122  
 123      $items .= walk_nav_menu_tree( $menu_items, $args->depth, $args );
 124  
 125      // CSS class
 126      $ul_class = $args->menu_class ? ' class="'. $args->menu_class .'"' : '';
 127      $nav_menu .= '<ul'. $ul_class .'>';
 128  
 129      // Allow plugins to hook into the menu to add their own <li>'s
 130      if ( 'frontend' == $args->context ) {
 131          $items = apply_filters( 'wp_nav_menu_items', $items, $args );
 132          $items = apply_filters( "wp_nav_menu_{$menu->slug}_items", $items, $args );
 133          $nav_menu .= $items;
 134      } else {
 135          $nav_menu .= $items;
 136      }
 137  
 138      $nav_menu .= '</ul>';
 139  
 140      return apply_filters( 'wp_get_nav_menu', $nav_menu );
 141  }
 142  
 143  /**
 144   * Returns the menu item formatted based on it's context.
 145   *
 146   * @since 3.0.0
 147   *
 148   * @param string $menu_item The menu item to format.
 149   * @param string $context The context to which the menu item will be formatted to.
 150   * @param string $args Optional. Args used for the 'template' context.
 151   * @return string $output The menu formatted menu item.
 152   */
 153  function wp_get_nav_menu_item( $menu_item, $context = 'frontend', $args = array() ) {
 154      $output = '';
 155      switch ( $context ) {
 156          case 'frontend':
 157              $attributes  = ( isset($menu_item->attr_title) && '' != $menu_item->attr_title ) ? ' title="'. esc_attr($menu_item->attr_title) .'"' : '';
 158              $attributes .= ( isset($menu_item->target) && '' != $menu_item->target ) ? ' target="'. esc_attr($menu_item->target) .'"' : '';
 159              $attributes .= ( isset($menu_item->xfn) && '' != $menu_item->xfn ) ? ' rel="'. esc_attr($menu_item->xfn) .'"' : '';
 160              $attributes .= ( isset($menu_item->url) && '' != $menu_item->url ) ? ' href="'. esc_attr($menu_item->url) .'"' : '';
 161  
 162              $output .= esc_html( $args->before );
 163              $output .= '<a'. $attributes .'>';
 164              $output .= esc_html( $args->link_before . apply_filters('the_title', $menu_item->title) . $args->link_after );
 165              $output .= '</a>';
 166              $output .= esc_html( $args->after );
 167  
 168              break;
 169  
 170          case 'backend':
 171              $output .= '<dl><dt>';
 172              $output .= '<span class="item-title">'. esc_html( $menu_item->title ) .'</span>';
 173              $output .= '<span class="item-controls">';
 174              $output .= '<span class="item-type">'. esc_html( $menu_item->append ) .'</span>';
 175  
 176              // Actions
 177              $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> | ';
 178              $output .= '<a class="item-delete" id="delete-'. esc_attr( $menu_item->ID ) .'" value="'. esc_attr( $menu_item->ID ) .'">'. __('Delete') .'</a>';
 179  
 180              $output .= '</span></dt></dl>';
 181  
 182              // Menu Item Settings
 183              $output .= '<input type="hidden" name="menu-item-db-id[]" value="'. esc_attr( $menu_item->ID ) .'" />';
 184              $output .= '<input type="hidden" name="menu-item-object-id[]" value="'. esc_attr( $menu_item->object_id ) .'" />';
 185              $output .= '<input type="hidden" name="menu-item-object[]" value="'. esc_attr( $menu_item->object ) .'" />';
 186              $output .= '<input type="hidden" name="menu-item-parent-id[]" value="'. esc_attr( $menu_item->post_parent ) .'" />';
 187              $output .= '<input type="hidden" name="menu-item-position[]" value="'. esc_attr( $menu_item->menu_order ) .'" />';
 188              $output .= '<input type="hidden" name="menu-item-type[]" value="'. esc_attr( $menu_item->type ) .'" />';
 189              $output .= '<input type="hidden" name="menu-item-title[]" value="'. esc_attr( $menu_item->title ) .'" />';
 190              $output .= '<input type="hidden" name="menu-item-url[]" value="'. esc_attr( $menu_item->url ) .'" />';
 191              $output .= '<input type="hidden" name="menu-item-description[]" value="'. esc_attr( $menu_item->description ) .'" />';
 192              $output .= '<input type="hidden" name="menu-item-classes[]" value="'. esc_attr( $menu_item->classes ) .'" />';
 193              $output .= '<input type="hidden" name="menu-item-xfn[]" value="'. esc_attr( $menu_item->xfn ) .'" />';
 194              $output .= '<input type="hidden" name="menu-item-attr-title[]" value="'.esc_attr( $menu_item->post_excerpt )  .'" />';
 195              $output .= '<input type="hidden" name="menu-item-target[]" value="'. esc_attr( $menu_item->target ) .'" />';
 196              break;
 197  
 198          case 'custom':
 199          case 'taxonomy':
 200          case 'post_type':
 201              $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>';
 202  
 203              // Menu item hidden fields
 204              $output .= '<input type="hidden" class="menu-item-db-id" value="0" />';
 205              $output .= '<input type="hidden" class="menu-item-object-id" value="'. esc_attr( $menu_item->object_id ) .'" />';
 206              $output .= '<input type="hidden" class="menu-item-object" value="'. esc_attr( $menu_item->object ) .'" />';
 207              $output .= '<input type="hidden" class="menu-item-parent-id" value="'. esc_attr( $menu_item->post_parent ) .'" />';
 208              $output .= '<input type="hidden" class="menu-item-type" value="'. esc_attr( $menu_item->type ) .'" />';
 209              $output .= '<input type="hidden" class="menu-item-append" value="'. esc_attr( $menu_item->append ) .'" />';
 210              $output .= '<input type="hidden" class="menu-item-title" value="'. esc_attr( $menu_item->title ) .'" />';
 211              $output .= '<input type="hidden" class="menu-item-url" value="'. esc_attr( $menu_item->url ) .'" />';
 212              $output .= '<input type="hidden" class="menu-item-append" value="'. esc_attr( $menu_item->append ) .'" />';
 213              $output .= '<input type="hidden" class="menu-item-target" value="'. esc_attr( $menu_item->target ) .'" />';
 214              $output .= '<input type="hidden" class="menu-item-attr_title" value="'. esc_attr( $menu_item->attr_title ) .'" />';
 215              $output .= '<input type="hidden" class="menu-item-description" value="'. esc_attr( $menu_item->description ) .'" />';
 216              $output .= '<input type="hidden" class="menu-item-classes" value="'. esc_attr( $menu_item->classes ) .'" />';
 217              $output .= '<input type="hidden" class="menu-item-xfn" value="'. esc_attr( $menu_item->xfn ) .'" />';
 218              break;
 219      }
 220  
 221      return $output;
 222  }
 223  ?>


Generated: Mon Apr 5 14:26:09 2010 Cross-referenced by PHPXref 0.7