Bir yazının özel bir yazı türü olup olmadığını nasıl test edebilirim?


103

Bir gönderinin özel bir gönderi türü olup olmadığını test etmenin bir yolunu arıyorum. Örneğin, kenar çubuğunda şöyle koda koyabilirim:

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

Sadece özel bir yazı tipi için kod testi istiyorum.

Yanıtlar:



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

Üzerindedir trueözel yayın türünde bir yazı görüntülerken: book.

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

Yukarıdaki, trueözel gönderi türlerinin bir gönderisini görüntülerken: newspaperveya book.

Bu ve daha fazla koşullu etiketler burada görüntülenebilir .


27

Bunu kendinize ekleyin functions.php; döngünün içinde veya dışında bir işlevselliğe sahip olabilirsiniz:

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

Yani şimdi aşağıdakileri kullanabilirsiniz:

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

Teşekkürler, bu çok faydalı! Ama şöyle olmalı: if (is_single () && is_post_type ('post_type')) {// work magic} Kapama dirseği eksikti ... Çok selamlar, Ethel

Bu başkaları için çalışmayı durdurdu mu? Bunu uzun zamandır kullandım, ama bu aniden benim için çalışmayı bıraktı. Ancak, aynı yöntemi global $ wp_query olmadan kullanmak her zaman işe if ( 'post-type' == get_post_type() ) {}
yarar

is_post_type () değeri amorti edildi.
Lisa Cerilli

23

Bir gönderinin herhangi bir özel yazı türü olup olmadığını test etmek için, yerleşik olmayan tüm yazı türlerinin listesini alın ve yazının türünün bu listede olup olmadığını test edin.

İşlev olarak:

/**
 * 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 );
}

Kullanımı:

if ( is_custom_post_type() )
    print 'This is a custom post type!';

Bu kabul edilen cevap olmalı.
aalaap

10

Herhangi bir nedenden dolayı $ post global değişkenine zaten erişiminiz varsa, sadece kullanabilirsiniz

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

5

Bir joker karakter istiyorsanız, tüm özel gönderi türlerinizi kontrol edin:

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

Bu şekilde, özel gönderinizin adını bilmenize gerek kalmaz. Ayrıca, daha sonra özel gönderinizin adını değiştirseniz bile kod hala çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.