WordPress allows you to create your own menus in the admin area, to do this you can use the function add_menu_page().
<?php
add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position );
?>
When this menu item is in place you are also able to add sub-menu items to the page that can be used to make your own custom option pages under this menu by using the function add_submenu_page().
<?php add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function ); ?>
Using the submenu page you can add any URL you want to the menu items anything from a settings page, link to the front-end, link to a custom post types, link to custom taxonomy. If you were to add a custom taxonomy edit tags page /wp-admin/edit-tags.php?taxonomy=category to the menu you will see different behaviour with the menus then with other submenu pages. When you add a sub-menu page WordPress will automatically expand the parent menu item to visually show where in the hierarchy you currently are. But with a custom taxonomy page WordPress will not understand it's parent item in the menu and will collapse the menu item. Using the below snippet you can add a new Javascript file to the page to check to see if the top level menu item is open on a certain page, if it's not then we add the CSS class to expand the menu item.
add_action('admin_head', 'pu_set_open_menu');
/**
* Open the correct menu for taxonomy
*/
public function pu_set_open_menu()
{
$screen = get_current_screen();
if( $screen->base === 'edit-tags' && $screen->taxonomy === 'taxonomy_type_name' )
{
wp_enqueue_script( 'open-menu-parent', plugins_url('../assets/js/admin-menu.js', __FILE__ ), array('jquery') );
}
}
As you can see from the code above we can discover what page we are on by using the get_current_screen() function, this allows us to get the base page and check the taxonomy type to make sure we're on the right page before adding the Javascript file.
(function ( $ ) {
// Close all the other parent menus
$('.wp-has-current-submenu').removeClass('wp-has-current-submenu');
// Open your specific parent menu
$('.toplevel_page_top-menu-level-item')
.removeClass('wp-not-current-submenu')
.addClass('wp-has-current-submenu wp-menu-open');
}(jQuery));