Custom Post Type Menus

I’m writing a plugin for work because our main website is being ported to WordPress eventually. I’ve got multiple custom post types planned for this plugin and would like to group them all into one main menu.

Basically, I want the “Visitors” link to be placed under “Argus Admin”. The other links aren’t necessary to be added as I can “hack” those wherever I want.

Read More
    $v_args = array(
        'labels' => array (
                'name' => 'Visitors',
                'singular_name' => 'Visitor',
                'add_new_item' => 'Register New Visitor', // TODO: http://codex.wordpress.org/Function_Reference/register_post_type#Arguments
            ),
        'public' => true,
        'publicly_queryable' => false,
        'exclude_from_search' => true,
        'show_ui' => true,
        'show_in_menu' => 'argus',  // TODO: This doesn't work...
        'hiearchical' => false,
        'supports' => array( '' ),
        'register_meta_box_cb' => array ( &$this, '_wp_visitor_meta_box_cb' ),
    );

    register_post_type( $post_type, $v_args );

This my menu page that I created:

add_menu_page( 'Argus', 'Argus Admin', 'manage_options', 'argus', array( &$this, '_wp_argus_main_panel' ), '', -1 );

Related posts

Leave a Reply

2 comments

  1. You got it right but you need to wait for WordPress 3.1 where its actually implemented. if you can’t wait you can change ‘show_in_menu’ to false and use add_submenu_page() function define ‘argus’ as top page and add the Visitors “manually” under Argus Admin menu.

    so your code would be:

    $v_args = array(
            'labels' => array (
                    'name' => 'Visitors',
                    'singular_name' => 'Visitor',
                    'add_new_item' => 'Register New Visitor',
                ),
            'public' => true,
            'publicly_queryable' => false,
            'exclude_from_search' => true,
            'show_ui' => true,
            'show_in_menu' => 'flase',
            'hiearchical' => false,
            'supports' => array( '' ),
            'register_meta_box_cb' => array ( &$this, '_wp_visitor_meta_box_cb' ),
        );
    
        register_post_type( $post_type, $v_args );
    

    and then

    add_menu_page( 'Argus', 'Argus Admin', 'manage_options', 'argus', array( &$this, '_wp_argus_main_panel' ), '', -1 );
    add_submenu_page( argus, 'Visitors', 'Visitors', 'manage_options' , 'visitors' , 'edit.php?post_type=visitors'); 
    

    Hope this Helps

  2. If this is going to be ported to WordPress eventually (as in, not for another few weeks), I’d suggest waiting for WordPress 3.1 to come out. It’s due very soon, and it already does this. Of course, you could skip the waiting and just develop on trunk. The way you’re doing it there will should work in 3.1 without any changes.