How do test if a post is a custom post type?

I am looking for a way to test if a post is a custom post type. For example, in, say, the sidebar I can put in code like this:

 if ( is_single() ) {
     // Code here
 }

I want code testing for only a custom post type.

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Here you are: get_post_type() and then if ( 'book' == get_post_type() ) ... as per Conditional Tags > A Post Type in Codex.

Method 2

if ( is_singular( 'book' ) ) {
    // conditional content/code
}

The above is true when viewing a post of the custom post type: book.

if ( is_singular( array( 'newspaper', 'book' ) ) ) {
    //  conditional content/code
}

The above is true when viewing a post of the custom post types: newspaper or book.

These and more conditional tags can be viewed here.

Method 3

To test if a post is any custom post type, fetch the list of all not built-in post types and test if the post’s type is in that list.

As a function:

/**
 * Check if a post is a custom post type.
 * @param  mixed $post Post object or ID
 * @return boolean
 */
function is_custom_post_type( $post = NULL )
{
    $all_custom_post_types = get_post_types( array ( '_builtin' => FALSE ) );

    // there are no custom post types
    if ( empty ( $all_custom_post_types ) )
        return FALSE;

    $custom_types      = array_keys( $all_custom_post_types );
    $current_post_type = get_post_type( $post );

    // could not detect current type
    if ( ! $current_post_type )
        return FALSE;

    return in_array( $current_post_type, $custom_types );
}

Usage:

if ( is_custom_post_type() )
    print 'This is a custom post type!';

Method 4

Add this to your functions.php, and you can have the functionality, inside or outside of the loop:

function is_post_type($type){
    global $wp_query;
    if($type == get_post_type($wp_query->post->ID)) 
        return true;
    return false;
}

So you can now use the following:

if (is_single() && is_post_type('post_type')){
    // Work magic
}

Method 5

If for any reason you already have access to the global variable $post, you can simply use

if ($post->post_type == "your desired post type") {
}

Method 6

If you want a wild card check for all your custom post types:

if( ! is_singular( array('page', 'attachment', 'post') ) ){
    // echo 'Imma custom post type!';
}

This way you don’t need to know the name of your custom post. Also the code still work even if you change the name of your custom post later.

Method 7

To determine the $post_type easily inside a function, you need to call the global post var first, here is an example:

function the_views() {
global $post;

if ($post->post_type == "game") {
   $span = '<span class="fa-gamepad">';
  } else { // Regular post
    $span = '<span class="fa-eye">';
  }
}

Method 8

I have been reading all the answers, they are usable, but the most simple that you can use to check if the post is standard or custom, you can just go with:

is_singular('post') or !is_singular('post')

The first expression is for standard post, and the second one is for any custom post.

I hope it can help someone.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x