Come verificare se un post è di tipo personalizzato (custom post type)?
Sto cercando un modo per verificare se un post è di tipo personalizzato (custom post type). Per esempio, nella sidebar posso inserire un codice come questo:
if ( is_single() ) {
// Codice qui
}
Vorrei un codice che verifichi solo i post di tipo personalizzato.

if ( is_singular( 'book' ) ) {
// contenuto/codice condizionale
}
Il codice sopra restituisce true
quando si visualizza un post del tipo di post personalizzato: book
.
if ( is_singular( array( 'newspaper', 'book' ) ) ) {
// contenuto/codice condizionale
}
Il codice sopra restituisce true
quando si visualizza un post dei tipi di post personalizzati: newspaper
o book
.
Questi e altri tag condizionali possono essere visualizzati qui.

Ecco qui: get_post_type()
e poi if ( 'book' == get_post_type() ) ...
come indicato in Tag Condizionali > Un Tipo di Post nel Codex.

is_singular()
è un po' più compatto Tag Condizionali > Una Pagina Singola, Post Singolo o Allegato

@Rarst Questo si applica solo al template del post singolo di un CPT. get_post_type()
è il modo giusto per procedere in un approccio più ampio. (es: in una pagina di ricerca)

@amarinediary Penso che al momento la domanda non era chiara se l'interesse fosse nel controllare la pagina principale che definisce il post o solo un qualche post in un loop arbitrario. Il modo appropriato di esprimerlo con il template tag varierebbe di conseguenza. :)

Per verificare se un post è di qualsiasi tipo di post personalizzato, recupera l'elenco di tutti i tipi di post non nativi e controlla se il tipo del post è presente in quell'elenco.
Come funzione:
/**
* Controlla se un post è di tipo personalizzato.
* @param mixed $post Oggetto Post o ID
* @return boolean
*/
function is_custom_post_type( $post = NULL )
{
$all_custom_post_types = get_post_types( array ( '_builtin' => FALSE ) );
// non ci sono tipi di post personalizzati
if ( empty ( $all_custom_post_types ) )
return FALSE;
$custom_types = array_keys( $all_custom_post_types );
$current_post_type = get_post_type( $post );
// impossibile rilevare il tipo corrente
if ( ! $current_post_type )
return FALSE;
return in_array( $current_post_type, $custom_types );
}
Utilizzo:
if ( is_custom_post_type() )
print 'Questo è un tipo di post personalizzato!';

Aggiungi questo al tuo functions.php
e potrai avere questa funzionalità, sia all'interno che all'esterno del loop:
function is_post_type($type){
global $wp_query;
if($type == get_post_type($wp_query->post->ID))
return true;
return false;
}
Così ora puoi utilizzare il seguente codice:
if (is_single() && is_post_type('post_type')){
// Esegui la magia
}

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

Ha smesso di funzionare anche per qualcun altro? L'ho usato per tanto tempo, ma improvvisamente ha smesso di funzionare per me. Tuttavia, utilizzando lo stesso metodo senza global $wp_query funziona sempre: if ( 'post-type' == get_post_type() ) {}

Se vuoi un controllo generico per tutti i tuoi tipi di post personalizzati:
if( ! is_singular( array('page', 'attachment', 'post') ) ){
// echo 'Sono un tipo di post personalizzato!';
}
In questo modo non hai bisogno di conoscere il nome del tuo post personalizzato. Inoltre, il codice continuerà a funzionare anche se modifichi successivamente il nome del tuo post personalizzato.

Per determinare facilmente il $post_type all'interno di una funzione, è necessario prima richiamare la variabile globale post, ecco un esempio:
function the_views() {
global $post;
if ($post->post_type == "game") {
$span = '<span class="fa-gamepad">'; // Span per i giochi
} else { // Post regolare
$span = '<span class="fa-eye">'; // Span per le visualizzazioni
}
}

Ho letto tutte le risposte, sono utilizzabili, ma il metodo più semplice che puoi usare per verificare se il post è standard o personalizzato, puoi semplicemente utilizzare:
is_singular('post') or !is_singular('post')
La prima espressione è per i post standard, mentre la seconda è per qualsiasi post personalizzato.
Spero che questo possa essere d'aiuto a qualcuno.
