Come verificare se un post è di tipo personalizzato (custom post type)?

11 gen 2011, 18:54:26
Visualizzazioni: 402K
Voti: 142

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.

0
Tutte le risposte alla domanda 8
0
198
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.

12 giu 2012 19:41:05
4
166

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

11 gen 2011 19:12:48
Commenti

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

Rarst Rarst
11 gen 2011 21:17:51

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

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

Rarst Rarst
4 gen 2021 12:01:05

is_singular() - più veloce... 0.000001 sec. get_post_type() - 0.000637 sec

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

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

Questa dovrebbe essere la risposta accettata.

aalaap aalaap
21 mar 2018 15:33:07

qualche idea su come controllare il tipo di post nel backend?

evavienna evavienna
6 mar 2021 12:24:59

@evavienna Questo codice funziona ovunque. Ti serve solo un oggetto post.

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

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
}
6 lug 2011 16:41:05
Commenti

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

User User
21 nov 2011 16:23:44

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

turtledropbomb turtledropbomb
13 gen 2017 15:39:46

is_post_type() è deprecato.

Lisa Lisa
21 dic 2017 14:23:08

come ottengo lo slug da get_post_type($wp_query->post->ID) è possibile fare qualcosa del tipo get_post_type($wp_query->post->SLUG)

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

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

if ($post->post_type == "your desired post type") {
    // Il tuo tipo di post desiderato
}
1 feb 2013 23:30:08
0

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.

30 gen 2014 05:52:59
0

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

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.

2 mar 2022 17:07:23
Commenti

Penso che ci siano già un paio di risposte per is_singular()

Rup Rup
2 mar 2022 17:33:47

Ciao @Rup, sì è vero, ma nessuna delle risposte descrive come selezionare i post non standard ad esempio -> !is_singular('post') è la soluzione più semplice.

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