Como testar se uma postagem é um tipo de postagem personalizada?

103

Estou procurando uma maneira de testar se uma postagem é um tipo de postagem personalizada. Por exemplo, digamos, na barra lateral que posso colocar em código como este:

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

Quero teste de código apenas para um tipo de postagem personalizado.

Adam Thompson
fonte

Respostas:

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

A descrição acima é trueao visualizar um post do tipo pós personalizado: book.

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

O acima é trueao visualizar uma postagem dos tipos de postagem personalizada: newspaperou book.

Essas e mais tags condicionais podem ser visualizadas aqui .

Mark Rummel
fonte
27

Adicione isso ao seu functions.phpe você poderá ter a funcionalidade, dentro ou fora do loop:

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

Agora você pode usar o seguinte:

if (is_single() && is_post_type('post_type')){
    // Work magic
}
Fuzz leve
fonte
Obrigado, isso é muito útil! Mas deve ser: if (is_single () && is_post_type ('post_type')) {// work magic} Faltava o colchete .... Muitas saudações, Ethel
Isso parou de funcionar para mais alguém? Eu uso isso há séculos, mas de repente isso parou de funcionar para mim. No entanto, usar o mesmo método sem o global $ wp_query sempre funciona:if ( 'post-type' == get_post_type() ) {}
turtledropbomb 13/01/17
is_post_type () está depreciado.
precisa saber é o seguinte
23

Para testar se uma postagem é qualquer tipo de postagem personalizada, busque a lista de todos os tipos de postagem não integrados e teste se o tipo de publicação está nessa lista.

Como uma função:

/**
 * 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
fonte
Essa deve ser a resposta aceita.
precisa saber é
10

Se, por qualquer motivo, você já tiver acesso à variável global $ post, poderá simplesmente usar

if ($post->post_type == "your desired post type") {
}
eu não
fonte
5

Se você deseja um curinga, verifique todos os seus tipos de postagem personalizados:

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

Dessa forma, você não precisa saber o nome da sua postagem personalizada. Além disso, o código ainda funcionará mesmo se você alterar o nome da sua postagem personalizada posteriormente.

Kosinix
fonte