how to group custom post types

I wanted to know do i group my custom post types to appear together in a group in the wordpress back end menu bar like this below in the picture what code do i have to use in my functions.php so that i can give my custom post types a nice look and feel:

enter image description here

Currently I am using a custom plugin to add functions and it looks like this

<?php
/**
 * Plugin Name: Custom Functions
 * Plugin URI: http://localhost/
 * Description: This is an awesome custom plugin with functionality that I'd like to keep when switching Themes.
 * Author: Phantom.omaga
 * Version: 0.1.0
 */

/* Place custom code below this line. */

add_action( 'init', 'create_post_type' );

function create_post_type() {  

/*Custom post type Series has been decleared here*/
    register_post_type( 'series',  
        array(  
            'labels' => array(  
                'name' => __( 'Series' ),  
                'singular_name' => __( 'Series' )  
            ),  
        'public' => true,  
        'menu_position' => 40,  
        'rewrite' => array('slug' => 'Series')  
        )  
    );

/*Custom post type Episodes has been decleared here*/
    register_post_type( 'epsodes',  
        array(  
            'labels' => array(  
                'name' => __( 'Episodes' ),  
                'singular_name' => __( 'Episode' )  
            ),  
        'public' => true,  
        'menu_position' => 41,  
        'rewrite' => array('slug' => 'Episodes')  
        )  
    );    

/*Custom post type Mirrors has been decleared here*/
    register_post_type( 'Mirrors',  
        array(  
            'labels' => array(  
                'name' => __( 'Mirrors' ),  
                'singular_name' => __( 'Mirror' )  
            ),  
        'public' => true,  
        'menu_position' => 41,  
        'rewrite' => array('slug' => 'Mirror')  
        )  
    );   

}  


/* Place custom code above this line. */
?>

1
1

The filter

Inside /wp-admin/menu.php, you’ll find this filter at the end of the “add css classes”-loop:
apply_filters( 'add_menu_classes', $menu )

The function

The following code attaches the right classes to the first and previous elements. It also adds the separator in between. If you need to add another separator to the end/after your group, you’ll have to extend the function to do the following:

  • Take the last element in your group and treat it exactly as you currently treat your previous element.
  • Add the separator one key after your last element
  • Add the same classes to the following/next element right after your group
  • Check if there’s not already a separator in place. See current check.

Use the $target array to look up for the names of the targeted menu elements. Just use exactly what you see in your menu and it adds a separator before the element.


Moved the code to GitHub as public Gist

Leave a Comment