How do test if a post is a custom post type?
-
16-10-2019 - |
Question
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.
Solution
Here you are: get_post_type()
and then if ( 'book' == get_post_type() ) ...
as per Conditional Tags > A Post Type in Codex.
OTHER TIPS
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.
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
}
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!';
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") {
}
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.