¿Cómo comprobar si una entrada es un tipo de contenido personalizado?

11 ene 2011, 18:54:26
Vistas: 402K
Votos: 142

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.

0
Todas las respuestas a la pregunta 8
0
198
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í.

12 jun 2012 19:41:05
4
166

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.

11 ene 2011 19:12:48
Comentarios

@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 amarinediary
26 dic 2020 22:40:08

@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. :)

Rarst Rarst
4 ene 2021 12:01:05

is_singular() - más rápido... 0.000001 seg. get_post_type() - 0.000637 seg

user3331122 user3331122
22 feb 2022 08:46:24
3
34

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!';
15 abr 2013 18:22:25
Comentarios

Esta debería ser la respuesta aceptada.

aalaap aalaap
21 mar 2018 15:33:07

¿alguna idea de cómo verificar el tipo de entrada en el backend?

evavienna evavienna
6 mar 2021 12:24:59

@evavienna Este código funciona en todas partes. Solo necesitas un objeto de entrada.

fuxia fuxia
6 mar 2021 16:44:16
4
30

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í
}
6 jul 2011 16:41:05
Comentarios

¡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

User User
21 nov 2011 16:23:44

¿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() ) {}

turtledropbomb turtledropbomb
13 ene 2017 15:39:46

is_post_type() está obsoleto.

Lisa Lisa
21 dic 2017 14:23:08

¿Cómo obtengo el slug de get_post_type($wp_query->post->ID)? ¿Es posible hacer algo como esto get_post_type($wp_query->post->SLUG)?

Ice_mank Ice_mank
20 mar 2022 18:18:03
0
15

Si por alguna razón ya tienes acceso a la variable global $post, puedes simplemente usar

if ($post->post_type == "tu tipo de entrada deseado") {
}
1 feb 2013 23:30:08
0

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.

30 ene 2014 05:52:59
0

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
  }
}
27 sept 2021 19:10:29
2

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.

2 mar 2022 17:07:23
Comentarios

Creo que ya hay un par de respuestas para is_singular()

Rup Rup
2 mar 2022 17:33:47

Hola @Rup, sí lo es, pero ninguna de las respuestas describe cómo seleccionar una entrada no estándar, por ejemplo -> !is_singular('post') es la solución más simple.

Đođe Sajlović Đođe Sajlović
3 mar 2022 18:32:08