Comment tester si un poste est un type de poste personnalisé?
-
16-10-2019 - |
Question
Je cherche un moyen de tester si un poste est un type de poste personnalisé. Par exemple, dans, par exemple, la barre latérale je peux mettre dans le code comme ceci:
if ( is_single() ) {
// Code here
}
Je veux tester le code pour seulement un type de poste personnalisé.
La solution
Here you are: get_post_type()
and then if ( 'book' == get_post_type() ) ...
as per Conditional Tags > A Post Type in Codex.
Autres conseils
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.