I have a all my custom post types list together in blog format. What I'm trying to do is echo the post type name on each post.

I tried this:

echo $obj->labels->singular_name;

But it just displayed "Post" for everything instead of the custom post type name


If you are within The Loop, try:

$post_type = get_post_type( $post->ID );
echo $post_type;

Does this work for you?


Inside the loop you already have a $post object available to you, you don't need to call get_post_type or any other functions, this should do the trick.

<?php echo $post->post_type; ?>

Or if you like the idea of calling get_post_type you can make the task easier for the function by passing it the post object you have(so it doesn't need to go fetch the post, just to extract one property from it).

<?php echo get_post_type( $post ); ?>

Else, get_post_type will needlessly call get_post to fetch the post object (an object you already have available to you nonetheless).

Hope that helps..

  • Once a post is fetched from the DB calling get_post() again isn't a serious issue. It's all cached internally for the duration of the pageview, the only overhead is a fast function call to retrieve the object from cache. In this case get_post_type() actually does pretty much nothing beyond return $post->post_type so your optimization actually makes sense, but it should probably have a filter or something, in which case using get_post_type() would be the API way to go.
    – jerclarke
    Sep 21 '12 at 19:20

Reading the docs at http://codex.wordpress.org/Function_Reference/get_post_type_object you must pass it the custom post type as argument!

Try with:

echo $obj->labels->singular_name;
  • it's missing the variable set $obj = Jun 21 '16 at 13:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.