¿Cómo probar si una publicación es un tipo de publicación personalizada?

103

Estoy buscando una manera de probar si una publicación es un tipo de publicación personalizada. Por ejemplo, en, digamos, la barra lateral puedo poner un código como este:

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

Quiero pruebas de código solo para un tipo de publicación personalizada.

Adam Thompson
fuente

Respuestas:

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

Lo anterior es truecuando se visualiza un mensaje del tipo de envío personalizado: book.

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

Lo anterior es truecuando se ve una publicación de los tipos de publicaciones personalizadas: newspapero book.

Estas y más etiquetas condicionales se pueden ver aquí .

Mark Rummel
fuente
27

Agregue esto a su functions.php, y puede tener la funcionalidad, dentro o fuera del bucle:

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

Entonces ahora puede usar lo siguiente:

if (is_single() && is_post_type('post_type')){
    // Work magic
}
Fuzz suave
fuente
¡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
¿Esto dejó de funcionar para alguien más? Lo he usado durante años, pero de repente esto dejó de funcionar para mí. Sin embargo, usar el mismo método sin global $ wp_query siempre funciona:if ( 'post-type' == get_post_type() ) {}
turtledropbomb
is_post_type () se deprecia.
Lisa Cerilli
23

Para probar si una publicación es de cualquier tipo de publicación personalizada, busque la lista de todos los tipos de publicación no incorporados y pruebe si el tipo de publicación está en esa lista.

Como una función:

/**
 * 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 );
}

Uso:

if ( is_custom_post_type() )
    print 'This is a custom post type!';
fuxia
fuente
Esta debería ser la respuesta aceptada.
aalaap
10

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

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

Si desea un comodín, verifique todos sus tipos de publicaciones personalizadas:

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

De esta manera, no necesita saber el nombre de su publicación personalizada. Además, el código sigue funcionando incluso si cambia el nombre de su publicación personalizada más tarde.

kosinix
fuente