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.
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..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..
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).
$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 theadmin_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.
The global
$current_screen->post_type
is more robust than relying on$_GET['post_type']
or$parent_file
.that’s because the post hasn’t been saved yet.
try with
$_GET['post_type']
If you want to get info about the current screen you can but depend in which hook you are working.
For example, have a look at:
When you click on Add New and during the add_meta_boxes is executed you can retrieve the current screen (please don’t use global variables) and also the new ID of the post that is currently in Draft state.
Let’s close this storry. I create function for solving this problem and you can use it how you want. It is ment for the wp-admin part but you can expand it.
In the general this will give you the most accurate post type information inside WordPress Admin side.
Enjoj!
In WordPress block editor, inside
enqueue_block_assets
hook, you can useget_post_type()
function and enqueue appropriate scripts/styles.