Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I am writing the backend for my theme and have 4 custom post types. I have registered them all and now I am writing the metaboxes and handlers.

My question is in wordpress admin is there a way of determing which custom post type your editing. I.E. lets say I have a custom post type of Testimonials, I click add New and am presented with the various fields etc. Is there a function in wordpress that will tell me what this post type is.

Ive tried get_post_type() but it returns nothing.

Any help would be appreciated.

Steve

share|improve this question

3 Answers 3

There are hooks and variables set that will allow you determine post type pretty easily, so you can hook onto actions specific to a given type, i'm going to provide some examples below.

Examples

If wanted to add a metabox to the post creation screen for the book post type, then i'd probably use a hook along the lines of..

add_action( 'add_meta_boxes_book', 'my_callback_defining_metaboxes' );
function my_callback_defining_metaboxes() {
    add_meta_box( ... );
}

You can replace book with an appropriate post type, eg. post, page, or a custom one.

If i wanted to enqueue scripts onto the edit or add new posts screen for the book post type, i might use..

add_action( 'admin_print_scripts-edit.php', 'my_func_to_enqueue_scripts' );
add_action( 'admin_print_scripts-post-new.php', 'my_func_to_enqueue_scripts' );
function my_func_to_enqueue_scripts() {
    global $typenow;
    if( 'book' == $typenow )
        wp_enqueue_script( ... );
}

If i wanted to go a step further and hook onto every page that deals with the book post type i'll use a more generic hook and perform conditional logic on one of the admin variables..(as long as you don't hook in really early you can reference these vars reliably).

add_action( 'admin_print_scripts', 'enqueue_scripts_on_specific_posttype_pages' );
function enqueue_scripts_on_specific_posttype_pages() {
    global $parent_file;
    if( 'edit.php?post_type=book' == $parent_file )
        wp_enqueue_script( ... );
}

$parent_file is always the link or URL of the parent menu item for the given post type, which you'll notice is different to the generic $hook_suffix that's appended to the admin_print_scripts- hook, eg. admin_print_scripts-edit.php ..

The above example would hook the enqueue onto any page for the book post type, that includes the taxonomy management screens.

Hope the above is helpful.

share|improve this answer

The global $current_screen->post_type is more robust than relying on $_GET['post_type'] or $parent_file.

share|improve this answer

that's because the post hasn't been saved yet.

try with $_GET['post_type']

share|improve this answer
    
Thanks That works if I have records. What if I click on Add New, is there a way then of determining the post type. –  Steve Clark Dec 23 '10 at 12:09
    
Just answered my own question post_type is a query string value on add new and id is a value on editing. I can assotain what the value is from both of them. –  Steve Clark Dec 23 '10 at 12:11
    
that works if you don't have records too –  onetrickpony Dec 23 '10 at 12:22

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.