¿Cómo comprobar si una entrada es un tipo de contenido personalizado?
Estoy buscando una manera de comprobar si una entrada es un tipo de contenido personalizado. Por ejemplo, en la barra lateral puedo poner un código como este:
if ( is_single() ) {
// Código aquí
}
Quiero código que compruebe solamente un tipo de contenido personalizado.

if ( is_singular( 'book' ) ) {
// contenido/código condicional
}
Lo anterior es true
cuando se visualiza una entrada del tipo de contenido personalizado: book
.
if ( is_singular( array( 'newspaper', 'book' ) ) ) {
// contenido/código condicional
}
Lo anterior es true
cuando se visualiza una entrada de los tipos de contenido personalizados: newspaper
o book
.
Estas y más etiquetas condicionales pueden verse aquí.

Aquí tienes: get_post_type()
y luego if ( 'book' == get_post_type() ) ...
como se indica en Etiquetas Condicionales > Un Tipo de Publicación en el Codex.

is_singular()
es un poco más compacto Etiquetas Condicionales > Una Página Individual, Entrada Individual o Adjunto

@Rarst Esto solo se aplica a la plantilla de entrada individual de un CPT. get_post_type()
es la forma correcta de hacerlo en un enfoque más amplio. (por ejemplo: en una página de búsqueda)

@amarinediary Creo que en ese momento no estaba claro si el interés era verificar la página principal que define la entrada o solo alguna entrada en un bucle arbitrario. La forma apropiada de expresarlo con una etiqueta de plantilla variaría en consecuencia. :)

Para comprobar si una entrada es de cualquier tipo de contenido personalizado, obtén la lista de todos los tipos de contenido no integrados y verifica si el tipo de la entrada está en esa lista.
Como función:
/**
* Comprueba si una entrada es un tipo de contenido personalizado.
* @param mixed $post Objeto Post o ID
* @return boolean
*/
function is_custom_post_type( $post = NULL )
{
$all_custom_post_types = get_post_types( array ( '_builtin' => FALSE ) );
// no hay tipos de contenido personalizados
if ( empty ( $all_custom_post_types ) )
return FALSE;
$custom_types = array_keys( $all_custom_post_types );
$current_post_type = get_post_type( $post );
// no se pudo detectar el tipo actual
if ( ! $current_post_type )
return FALSE;
return in_array( $current_post_type, $custom_types );
}
Uso:
if ( is_custom_post_type() )
print '¡Este es un tipo de contenido personalizado!';

Agrega esto a tu archivo functions.php
, y podrás tener esta funcionalidad, dentro o fuera del bucle (loop):
function is_post_type($type){
global $wp_query;
if($type == get_post_type($wp_query->post->ID))
return true;
return false;
}
Ahora podrás usar lo siguiente:
if (is_single() && is_post_type('post_type')){
// Realizar la magia aquí
}

¡Gracias, esto es muy útil! Pero debería ser: if (is_single() && is_post_type('post_type')){ //work magic } Faltaba el corchete de cierre.... Muchos saludos, Ethel

¿A alguien más le ha dejado de funcionar? Lo he usado durante mucho tiempo, pero de repente dejó de funcionarme. Sin embargo, usando el mismo método sin global $wp_query siempre funciona: if ( 'post-type' == get_post_type() ) {}

Si deseas una comprobación comodín para todos tus tipos de contenido personalizados:
if( ! is_singular( array('page', 'attachment', 'post') ) ){
// echo 'Soy un tipo de contenido personalizado!';
}
De esta manera no necesitas saber el nombre de tu entrada personalizada. Además, el código seguirá funcionando incluso si cambias el nombre de tu entrada personalizada más adelante.

Para determinar el $post_type fácilmente dentro de una función, primero necesitas llamar a la variable global post, aquí hay un ejemplo:
function the_views() {
global $post;
if ($post->post_type == "game") {
$span = '<span class="fa-gamepad">'; // Si es tipo game, usar ícono de gamepad
} else { // Si es una entrada regular
$span = '<span class="fa-eye">'; // Usar ícono de ojo
}
}

He estado leyendo todas las respuestas, son utilizables, pero la más simple que puedes usar para verificar si la entrada es estándar o personalizada, puedes simplemente usar:
is_singular('post') or !is_singular('post')
La primera expresión es para una entrada estándar, y la segunda es para cualquier entrada personalizada.
Espero que esto pueda ayudar a alguien.
