Cum testezi dacă o postare este de tip custom post type?
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.

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.

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

is_singular()
este puțin mai compact Etichete Condiționale > O Pagină Unică, Articol Unic sau Atașament

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

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

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
}

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

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

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.

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">';
}
}

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.
