| 75 | | if ( 'custom' == $item->object ) { |
| 76 | | $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; |
| 77 | | $item_url = strpos( $item->url, '#' ) ? substr( $item->url, 0, strpos( $item->url, '#' ) ) : $item->url; |
| 78 | | if ( $item_url == $current_url ) |
| 79 | | $classes[] = 'current-menu-item'; |
| 80 | | } else { |
| 81 | | $classes[] = 'menu-item-object-'. $item->object; |
| 82 | | if ( |
| 83 | | $item->object_id == $wp_query->get_queried_object_id() && |
| 84 | | ( ( 'post_type' == $item->type && $wp_query->is_singular ) || |
| 85 | | ( 'taxonomy' == $item->type && ( $wp_query->is_category || $wp_query->is_tag || $wp_query->is_tax ) ) ) |
| 86 | | ) |
| 87 | | $classes[] = 'current-menu-item'; |
| 88 | | } |
| 89 | | |
| 90 | | // @todo add classes for parent/child relationships |
| 91 | | |
| | 269 | * Add the class property classes for the current frontend context, if applicable. |
| | 270 | * |
| | 271 | * @access private |
| | 272 | * @since 3.0 |
| | 273 | * |
| | 274 | * @param array $menu_items The current menu item objects to which to add the class property information. |
| | 275 | */ |
| | 276 | function _wp_menu_item_classes_by_context( &$menu_items = array() ) { |
| | 277 | global $wp_query; |
| | 278 | |
| | 279 | $queried_object = $wp_query->get_queried_object(); |
| | 280 | $queried_object_id = (int) $wp_query->queried_object_id; |
| | 281 | |
| | 282 | $active_object = ''; |
| | 283 | $active_parent_item_ids = array(); |
| | 284 | $active_parent_object_ids = array(); |
| | 285 | $possible_object_parents = array(); |
| | 286 | |
| | 287 | if ( $wp_query->is_singular && ! empty( $queried_object->post_type ) && ! is_post_type_hierarchical( $queried_object->post_type ) ) { |
| | 288 | foreach ( (array) get_object_taxonomies( $queried_object->post_type ) as $taxonomy ) { |
| | 289 | if ( is_taxonomy_hierarchical( $taxonomy ) ) { |
| | 290 | $terms = wp_get_object_terms( $queried_object_id, $taxonomy, array( 'fields' => 'ids' ) ); |
| | 291 | if ( is_array( $terms ) ) |
| | 292 | $possible_object_parents = array_merge( $possible_object_parents, $terms ); |
| | 293 | } |
| | 294 | } |
| | 295 | } |
| | 296 | |
| | 297 | $possible_object_parents = array_filter( $possible_object_parents ); |
| | 298 | |
| | 299 | foreach( (array) $menu_items as $key => $menu_item ) { |
| | 300 | // if the menu item corresponds to a taxonomy term for the currently-queried non-hierarchical post object |
| | 301 | if ( $wp_query->is_singular && 'taxonomy' == $menu_item->type && in_array( $menu_item->object_id, $possible_object_parents ) ) { |
| | 302 | $active_parent_object_ids[] = (int) $menu_item->object_id; |
| | 303 | $active_parent_item_ids[] = (int) $menu_item->db_id; |
| | 304 | $active_object = $queried_object->post_type; |
| | 305 | |
| | 306 | // if the menu item corresponds to the currently-queried post or taxonomy object |
| | 307 | } elseif ( |
| | 308 | $menu_item->object_id == $queried_object_id && |
| | 309 | ( |
| | 310 | ( 'post_type' == $menu_item->type && $wp_query->is_singular ) || |
| | 311 | ( 'taxonomy' == $menu_item->type && ( $wp_query->is_category || $wp_query->is_tag || $wp_query->is_tax ) ) |
| | 312 | ) |
| | 313 | ) { |
| | 314 | $menu_items[$key]->classes = trim( $menu_item->classes . ' ' . 'current-menu-item' ); |
| | 315 | $active_parent_item_ids[] = (int) $menu_item->menu_item_parent; |
| | 316 | $active_parent_object_ids[] = (int) $menu_item->post_parent; |
| | 317 | $active_object = $menu_item->object; |
| | 318 | |
| | 319 | // if the menu item corresponds to the currently-requested URL |
| | 320 | } elseif ( 'custom' == $menu_item->object ) { |
| | 321 | $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; |
| | 322 | $item_url = strpos( $menu_item->url, '#' ) ? substr( $menu_item->url, 0, strpos( $menu_item->url, '#' ) ) : $menu_item->url; |
| | 323 | if ( $item_url == $current_url ) { |
| | 324 | $menu_items[$key]->classes = trim( $menu_item->classes . ' ' . 'current-menu-item' ); |
| | 325 | $active_parent_item_ids[] = (int) $menu_item->menu_item_parent; |
| | 326 | $active_parent_object_ids[] = (int) $menu_item->post_parent; |
| | 327 | $active_object = $menu_item->object; |
| | 328 | } |
| | 329 | } |
| | 330 | } |
| | 331 | |
| | 332 | $active_parent_item_ids = array_filter( array_unique( $active_parent_item_ids ) ); |
| | 333 | $active_parent_object_ids = array_filter( array_unique( $active_parent_object_ids ) ); |
| | 334 | |
| | 335 | // set parent's class |
| | 336 | if ( ! empty( $active_parent_item_ids ) || ! empty( $active_parent_object_ids ) ) { |
| | 337 | foreach( (array) $menu_items as $key => $parent_item ) { |
| | 338 | if ( in_array( $parent_item->db_id, $active_parent_item_ids ) ) |
| | 339 | $menu_items[$key]->classes = trim( $parent_item->classes . ' ' . 'current-menu-parent' ); |
| | 340 | if ( in_array( $parent_item->object_id, $active_parent_object_ids ) ) |
| | 341 | $menu_items[$key]->classes = trim( $parent_item->classes . ' ' . 'current-' . $active_object . '-parent' ); |
| | 342 | } |
| | 343 | } |
| | 344 | } |
| | 345 | |
| | 346 | /** |