[ Index ]

PHP Cross Reference of WordPress 3.0 beta 1

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

title

Body

[close]

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

   1  <?php
   2  /**
   3   * Navigation Menu functions
   4   *
   5   * @package WordPress
   6   * @subpackage Nav_Menus
   7   * @since 3.0.0
   8   */
   9  
  10  /**
  11   * Returns a navigation menu object.
  12   *
  13   * @since 3.0.0
  14   *
  15   * @param string $menu Menu id
  16   * @return mixed $menu|false Or WP_Error
  17   */
  18  function wp_get_nav_menu_object( $menu ) {
  19      return is_nav_menu( $menu );
  20  }
  21  
  22  /**
  23   * Check if navigation menu exists.
  24   *
  25   * Returns the menu object, or false if the term doesn't exist.
  26   *
  27   * @since 3.0.0
  28   *
  29   * @param int|string $menu The menu to check
  30   * @return mixed Menu Object, if it exists. Else, false or WP_Error
  31   */
  32  function is_nav_menu( $menu ) {
  33      if ( !$menu )
  34          return false;
  35  
  36      $menu_obj = get_term( $menu, 'nav_menu' );
  37  
  38      if ( !$menu_obj )
  39          $menu_obj = get_term_by( 'slug', $menu, 'nav_menu' );
  40  
  41      if ( !$menu_obj )
  42          $menu_obj = get_term_by( 'name', $menu, 'nav_menu' );
  43  
  44      if ( !$menu_obj ) {
  45          $menu_obj = false;
  46      }
  47  
  48      return $menu_obj;
  49  }
  50  
  51  /**
  52   * Create a Navigation Menu.
  53   *
  54   * Optional args:
  55   * slug - the url friendly version of the nav menu.
  56   *
  57   * @since 3.0.0
  58   *
  59   * @param string $menu_name Menu Name
  60   * @param string $args Optional.
  61   * @return mixed Menu object on sucess|WP_Error on failure
  62   */
  63  function wp_create_nav_menu( $menu_name, $args = array() ) {
  64      $menu_exists = get_term_by( 'name', $menu_name, 'nav_menu' );
  65  
  66      if ( $menu_exists )
  67          return new WP_Error( 'menu_exists', sprintf( __('A menu named <strong>%s</strong> already exists; please try another name.'), esc_html( $menu_exists->name ) ) );
  68  
  69      if ( isset($args['slug']) )
  70          $slug = $args['slug'];
  71      else
  72          $slug = $menu_name;
  73  
  74      $menu = wp_insert_term( $menu_name, 'nav_menu', array('slug' => $slug) );
  75  
  76      if ( is_wp_error($menu) )
  77          return $menu;
  78  
  79      $result = get_term( $menu['term_id'], 'nav_menu' );
  80  
  81      if ( $result && !is_wp_error($result) ) {
  82          do_action( 'wp_create_nav_menu', $menu['term_id'] );
  83          return $result;
  84      } else {
  85          return $result;
  86      }
  87  }
  88  
  89  /**
  90   * Delete a Navigation Menu.
  91   *
  92   * @since 3.0.0
  93   *
  94   * @param string $menu name|id|slug
  95   * @return mixed Menu object on sucess|WP_Error on failure
  96   */
  97  function wp_delete_nav_menu( $menu ) {
  98      $menu = wp_get_nav_menu_object( $menu );
  99      if ( !$menu  )
 100          return false;
 101  
 102      $menu_objects = get_objects_in_term( $menu->term_id, 'nav_menu' );
 103      if ( !empty( $menu_objects ) ) {
 104          foreach ( $menu_objects as $item ) {
 105              wp_delete_post( $item );
 106          }
 107      }
 108  
 109      $result = wp_delete_term( $menu->term_id, 'nav_menu' );
 110  
 111      if ( $result && !is_wp_error($result) ) {
 112          do_action( 'wp_delete_nav_menu', $menu->term_id );
 113          return $result;
 114      } else {
 115          return $result;
 116      }
 117  }
 118  
 119  /**
 120   * Returns all navigation menu objects.
 121   *
 122   * @since 3.0.0
 123   *
 124   * @return array menu objects
 125   */
 126  function wp_get_nav_menus() {
 127      return get_terms( 'nav_menu', array( 'hide_empty' => false, 'orderby' => 'id' ) );
 128  }
 129  
 130  /**
 131   * Returns all menu items of a navigation menu.
 132   *
 133   * @since 3.0.0
 134   *
 135   * @param string $menu menu name, id, or slug
 136   * @param string $args
 137   * @return mixed $items array of menu items, else false.
 138   */
 139  function wp_get_nav_menu_items( $menu, $args = array() ) {
 140      $menu = wp_get_nav_menu_object( $menu );
 141  
 142      if ( !$menu )
 143          return false;
 144  
 145      $items = get_objects_in_term( $menu->term_id, 'nav_menu' );
 146  
 147      if ( ! empty( $items ) ) {
 148          $defaults = array( 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item', 'post_status' => 'publish', 'output' => ARRAY_A, 'output_key' => 'menu_order' );
 149          $args = wp_parse_args( $args, $defaults );
 150          if ( count( $items ) > 1 )
 151              $args['include'] = implode( ',', $items );
 152          else
 153              $args['include'] = $items[0];
 154  
 155          $items = get_posts( $args );
 156  
 157          if ( ARRAY_A == $args['output'] ) {
 158              $output = array();
 159              foreach ( $items as $item ) {
 160                  $output[$item->$args['output_key']] = $item;
 161              }
 162              unset( $items );
 163              ksort( $output );
 164              return $output;
 165          }
 166      }
 167      return $items;
 168  }
 169  
 170  /**
 171   * Retrieve the HTML list content for nav menu items.
 172   *
 173   * @uses Walker_Nav_Menu to create HTML list content.
 174   * @since 2.1.0
 175   * @see Walker::walk() for parameters and return description.
 176   */
 177  function walk_nav_menu_tree( $items, $depth, $r ) {
 178      $walker = ( empty($r->walker) ) ? new Walker_Nav_Menu : $r->walker;
 179      $args = array( $items, $depth, $r );
 180  
 181      return call_user_func_array(array(&$walker, 'walk'), $args);
 182  }
 183  
 184  /**
 185   * Adds all the navigation menu properties to the menu item.
 186   *
 187   * @since 3.0.0
 188   *
 189   * @param string $menu_item The menu item to modify
 190   * @param string $menu_item_type The menu item type (frontend, custom, post_type, taxonomy).
 191   * @param string $menu_item_object Optional. The menu item object type (post type or taxonomy).
 192   * @return object $menu_item The modified menu item.
 193   */
 194  function wp_setup_nav_menu_item( $menu_item, $menu_item_type = null, $menu_item_object = '' ) {
 195      switch ( $menu_item_type ) {
 196          case 'frontend':
 197              $menu_item->db_id = (int) $menu_item->ID;
 198              $menu_item->object_id = get_post_meta( $menu_item->ID, '_menu_item_object_id', true );
 199              $menu_item->object = get_post_meta( $menu_item->ID, '_menu_item_object', true );
 200              $menu_item->type = get_post_meta( $menu_item->ID, '_menu_item_type', true );
 201  
 202              if ( 'post_type' == $menu_item->type ) {
 203                  $object = get_post_type_object( $menu_item->object );
 204                  $menu_item->append = $object->singular_label;
 205  
 206              } elseif ( 'taxonomy' == $menu_item->type ) {
 207                  $object = get_taxonomy( $menu_item->object );
 208                  $menu_item->append = $object->singular_label;
 209  
 210              } else {
 211                  $menu_item->append = __('Custom');
 212              }
 213  
 214              $menu_item->title = $menu_item->post_title;
 215              $menu_item->url = get_post_meta( $menu_item->ID, '_menu_item_url', true );
 216              $menu_item->target = get_post_meta( $menu_item->ID, '_menu_item_target', true );
 217  
 218              $menu_item->attr_title = strip_tags( $menu_item->post_excerpt );
 219              $menu_item->description = strip_tags( $menu_item->post_content );
 220  
 221              $menu_item->classes = get_post_meta( $menu_item->ID, '_menu_item_classes', true );
 222              $menu_item->xfn = get_post_meta( $menu_item->ID, '_menu_item_xfn', true );
 223              break;
 224  
 225          case 'custom':
 226              $menu_item->db_id = 0;
 227              $menu_item->object_id = (int) $menu_item->ID;
 228              $menu_item->object = 'custom';
 229              $menu_item->type = 'custom';
 230              $menu_item->append = __('custom');
 231  
 232              $menu_item->attr_title = strip_tags( $menu_item->post_excerpt );
 233              $menu_item->description = strip_tags( $menu_item->post_content );
 234  
 235              $menu_item->title = $menu_item->post_title;
 236              $menu_item->url = get_post_meta( $menu_item->ID, '_menu_item_url', true );
 237              $menu_item->target = get_post_meta( $menu_item->ID, '_menu_item_target', true );
 238              $menu_item->classes = '';
 239              $menu_item->xfn = '';
 240              break;
 241  
 242          case 'post_type':
 243              $menu_item->db_id = 0;
 244              $menu_item->object_id = (int) $menu_item->ID;
 245              $menu_item->type = $menu_item_type;
 246  
 247              $object = get_post_type_object( $menu_item_object );
 248              $menu_item->object = $object->name;
 249              $menu_item->append = strtolower( $object->singular_label );
 250  
 251              $menu_item->title = $menu_item->post_title;
 252              $menu_item->url = get_permalink( $menu_item->ID );
 253              $menu_item->target = '_self';
 254  
 255              $menu_item->attr_title = '';
 256              $menu_item->description = strip_tags( $menu_item->post_content );
 257              $menu_item->classes = '';
 258              $menu_item->xfn = '';
 259              break;
 260  
 261          case 'taxonomy':
 262              $menu_item->ID = $menu_item->term_id;
 263              $menu_item->db_id = 0;
 264              $menu_item->object_id = (int) $menu_item->term_id;
 265              $menu_item->post_parent = (int) $menu_item->parent;
 266              $menu_item->type = $menu_item_type;
 267  
 268              $object = get_taxonomy( $menu_item_object );
 269              $menu_item->object = $object->name;
 270              $menu_item->append = strtolower( $object->singular_label );
 271  
 272              $menu_item->title = $menu_item->name;
 273              $menu_item->url = get_term_link( $menu_item, $menu_item_object );
 274              $menu_item->target = '_self';
 275              $menu_item->attr_title = '';
 276              $menu_item->description = strip_tags( $menu_item->description );
 277              $menu_item->classes = '';
 278              $menu_item->xfn = '';
 279              break;
 280      }
 281      return $menu_item;
 282  }
 283  ?>


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