Cum testezi dacă o postare este de tip custom post type?

11 ian. 2011, 18:54:26
Vizualizări: 402K
Voturi: 142

Caut o modalitate de a testa dacă o postare este de tip custom post type. De exemplu, în sidebar pot pune un cod precum acesta:

if ( is_single() ) {
    // Codul aici
}

Vreau un cod care să testeze doar pentru un custom post type.

0
Toate răspunsurile la întrebare 8
0
198
if ( is_singular( 'book' ) ) {
    // conținut/cod condițional
}

Codul de mai sus returnează true când se vizualizează o postare de tipul personalizat: book.

if ( is_singular( array( 'newspaper', 'book' ) ) ) {
    // conținut/cod condițional
}

Codul de mai sus returnează true când se vizualizează o postare de tipurile personalizate: newspaper sau book.

Acestea și mai multe tag-uri condiționale pot fi vizualizate aici.

12 iun. 2012 19:41:05
4
166

Iată aici: get_post_type() și apoi if ( 'book' == get_post_type() ) ... conform cu Tag-uri Condiționale > Un Tip de Postare din Codex.

11 ian. 2011 19:12:48
Comentarii

@Rarst Acest lucru se aplică doar șablonului de articol unic al unui CPT. get_post_type() este calea corectă de urmat într-o abordare mai largă. (de exemplu: pe o pagină de căutare)

amarinediary amarinediary
26 dec. 2020 22:40:08

@amarinediary Cred că la momentul respectiv nu era clar dacă interesul este în verificarea paginii principale care definește articolul sau doar a unui oarecare articol într-o buclă arbitrară. Modul adecvat de exprimare cu eticheta șablonului ar varia în consecință. :)

Rarst Rarst
4 ian. 2021 12:01:05

is_singular() - mai rapid... 0.000001 sec. get_post_type() - 0.000637 sec

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

Pentru a testa dacă o postare este de orice tip de postare personalizată, preluăm lista tuturor tipurilor de postări care nu sunt predefinite și verificăm dacă tipul postării se află în acea listă.

Ca funcție:

/**
 * Verifică dacă o postare este de tip personalizat.
 * @param  mixed $post Obiectul postării sau ID-ul
 * @return boolean
 */
function is_custom_post_type( $post = NULL )
{
    $all_custom_post_types = get_post_types( array ( '_builtin' => FALSE ) );

    // nu există tipuri de postări personalizate
    if ( empty ( $all_custom_post_types ) )
        return FALSE;

    $custom_types      = array_keys( $all_custom_post_types );
    $current_post_type = get_post_type( $post );

    // nu s-a putut detecta tipul curent
    if ( ! $current_post_type )
        return FALSE;

    return in_array( $current_post_type, $custom_types );
}

Utilizare:

if ( is_custom_post_type() )
    print 'Aceasta este o postare de tip personalizat!';
15 apr. 2013 18:22:25
Comentarii

Acesta ar trebui să fie răspunsul acceptat.

aalaap aalaap
21 mar. 2018 15:33:07

aveți vreo idee cum să verificați tipul de postare în backend?

evavienna evavienna
6 mar. 2021 12:24:59

@evavienna Acest cod funcționează peste tot. Aveți nevoie doar de un obiect de tip postare.

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

Adaugă acest cod în fișierul tău functions.php și vei avea această funcționalitate, în interiorul sau în afara buclei:

function is_post_type($type){
    global $wp_query;
    // Verifică dacă tipul postării curente corespunde cu tipul specificat
    if($type == get_post_type($wp_query->post->ID)) 
        return true;
    return false;
}

Astfel, acum poți folosi următoarea structură:

if (is_single() && is_post_type('post_type')){
    // Adaugă aici codul tău magic
}
6 iul. 2011 16:41:05
Comentarii

Mulțumesc, este foarte util! Dar ar trebui să fie: if (is_single() && is_post_type('post_type')){ //work magic } Paranteza de închidere lipsea.... Multe salutări, Ethel

User User
21 nov. 2011 16:23:44

A încetat să mai funcționeze și pentru altcineva? L-am folosit de mult timp, dar brusc a încetat să mai funcționeze pentru mine. Totuși, folosind aceeași metodă fără global $wp_query funcționează întotdeauna: if ( 'post-type' == get_post_type() ) {}

turtledropbomb turtledropbomb
13 ian. 2017 15:39:46

is_post_type() este depreciat.

Lisa Lisa
21 dec. 2017 14:23:08

cum obțin slug-ul din get_post_type($wp_query->post->ID) este posibil să fac ceva de genul get_post_type($wp_query->post->SLUG)

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

Dacă din orice motiv ai deja acces la variabila globală $post, poți folosi pur și simplu

if ($post->post_type == "tipul de postare dorit") {
}
1 feb. 2013 23:30:08
0

Dacă dorești să verifici toate tipurile de postări personalizate cu un wildcard:

if( ! is_singular( array('page', 'attachment', 'post') ) ){
    // echo 'Sunt un tip de postare personalizată!';
}

În acest fel nu trebuie să cunoști numele postării tale personalizate. De asemenea, codul va funcționa în continuare chiar dacă schimbi mai târziu numele postării personalizate.

30 ian. 2014 05:52:59
0

Pentru a determina $post_type ușor în interiorul unei funcții, trebuie să apelezi mai întâi variabila globală post, iată un exemplu:

function the_views() {
global $post;

if ($post->post_type == "game") {
   $span = '<span class="fa-gamepad">';
  } else { // Articol obișnuit
    $span = '<span class="fa-eye">';
  }
}
27 sept. 2021 19:10:29
2

Am citit toate răspunsurile, sunt utilizabile, dar cea mai simplă metodă pe care o puteți folosi pentru a verifica dacă postarea este standard sau personalizată este să folosiți:

is_singular('post') or !is_singular('post') 

Prima expresie este pentru postări standard, iar a doua este pentru orice tip de postare personalizată.

Sper că acest lucru poate ajuta pe cineva.

2 mar. 2022 17:07:23
Comentarii

Cred că există deja câteva răspunsuri pentru is_singular()

Rup Rup
2 mar. 2022 17:33:47

Bună @Rup, da este, dar niciunul dintre răspunsuri nu descrie cum să selectezi articole non-standard de exemplu -> !is_singular('post') este cea mai simplă soluție.

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