<?php

/**
 * Adds submenus for taxonomies.
 *
 * @access private
 * @since 3.1.0
 */
function _add_taxonomy_submenus() {
	foreach ( get_taxonomies( array( 'show_ui' => true ) ) as $tax ) {
		$tax_obj = get_taxonomy( $tax );
		// Submenus only.
		if ( ! $tax_obj->show_in_menu || true === $tax_obj->show_in_menu )
			continue;
		add_submenu_page( $tax_obj->show_in_menu, $tax_obj->label, $ptype_obj->label, $ptype_obj->cap->manage_terms, "edit-tags.php?taxonomy=$tax" );
	}
}
add_action( 'admin_menu', '_add_taxonomy_submenus' );

/**
 * Add taxonomies to parent page.
 *
 * @param string $parent_file Original menu parent.
 * @return string $parent_file Modified menu parent.
 */
function fix_tax_page( $parent_file = '' ) {
	global $pagenow;
	
	$taxonomies = get_taxonomies( array( 'show_ui' => true ) );
	// Submenus only.
	if ( ! empty( $_GET[ 'taxonomy' ] ) && in_array( $_GET[ 'taxonomy' ], $taxonomies ) && $pagenow == 'edit-tags.php' ) {
		$tax = get_taxonomy( $_GET[ 'taxonomy' ] );
		if ( isset( $tax->show_in_menu ) && true !== $tax->show_in_menu )
			$parent_file = $tax->show_in_menu;
	}

	return $parent_file;
}
add_action( 'parent_file', array( &$this, 'fix_tax_page' ) );