Come testare se un post è un tipo di post personalizzato?


103

Sto cercando un modo per verificare se un post è un tipo di post personalizzato. Ad esempio, nella barra laterale, ad esempio, posso inserire un codice come questo:

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

Voglio test del codice solo per un tipo di post personalizzato.

Risposte:



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

Quanto sopra è truequando si visualizza un messaggio del tipo posta personalizzato: book.

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

Quanto sopra è truequando si visualizza un post dei tipi di post personalizzati: newspapero book.

Questi e altri tag condizionali possono essere visualizzati qui .


27

Aggiungi questo al tuo functions.phpe puoi avere la funzionalità, dentro o fuori dal ciclo:

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

Quindi ora puoi usare quanto segue:

if (is_single() && is_post_type('post_type')){
    // Work magic
}

Grazie, è molto utile! Ma dovrebbe essere: if (is_single () && is_post_type ('post_type')) {// work magic} Mancava la parentesi di chiusura .... Molti saluti, Ethel

Questo ha smesso di funzionare per qualcun altro? L'ho usato per anni, ma all'improvviso ha smesso di funzionare per me. Tuttavia, utilizzare lo stesso metodo senza $ wp_query globali funziona sempre:if ( 'post-type' == get_post_type() ) {}
turtledropbomb

is_post_type () è ammortizzato.
Lisa Cerilli,

23

Per verificare se un post è un tipo di post personalizzato, recupera l'elenco di tutti i tipi di post non incorporati e verifica se il tipo di post è in tale elenco.

Come una funzione:

/**
 * 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!';

Questa dovrebbe essere la risposta accettata.
aalaap,

10

Se per qualsiasi motivo hai già accesso alla variabile globale $ post, puoi semplicemente usare

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

5

Se desideri un carattere jolly, controlla tutti i tipi di post personalizzati:

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

In questo modo non è necessario conoscere il nome del tuo post personalizzato. Anche il codice funziona ancora anche se in seguito cambi il nome del tuo post personalizzato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.