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 determining which custom post type you’re editing? i.e. lets say I have a custom post type of Testimonials
, I click Add New and am presented with various fields. Is there a function in WordPress that will tell me what this post type is?
I’ve tried get_post_type()
, but it returns nothing.
6 Answers
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.