Bagaimana cara menguji apakah suatu posting adalah jenis posting khusus?

103

Saya mencari cara untuk menguji apakah posting adalah jenis posting khusus. Misalnya, di, katakanlah, bilah sisi saya dapat memasukkan kode seperti ini:

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

Saya ingin pengujian kode hanya untuk jenis posting khusus.

Adam Thompson
sumber

Jawaban:

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

Di atas adalah truesaat melihat posting dari jenis posting kustom: book.

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

Di atas adalah trueketika melihat posting dari jenis posting khusus: newspaperatau book.

Tag ini dan lebih banyak kondisional dapat dilihat di sini .

Mark Rummel
sumber
27

Tambahkan ini ke Anda functions.php, dan Anda dapat memiliki fungsionalitas, di dalam atau di luar loop:

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

Jadi sekarang Anda dapat menggunakan yang berikut ini:

if (is_single() && is_post_type('post_type')){
    // Work magic
}
Fuzz Ringan
sumber
Terima kasih, ini sangat berguna! Tetapi seharusnya: if (is_single () && is_post_type ('post_type')) {// work magic} Braket penutup tidak ada .... Banyak salam, Ethel
Apakah ini berhenti bekerja untuk orang lain? Saya sudah menggunakan ini sejak lama, tetapi tiba-tiba ini berhenti bekerja untuk saya. Namun, menggunakan metode yang sama tanpa global $ wp_query selalu berfungsi:if ( 'post-type' == get_post_type() ) {}
turtledropbomb
is_post_type () disusutkan.
Lisa Cerilli
23

Untuk menguji apakah posting adalah setiap jenis posting kustom, mengambil daftar semua tidak built-in jenis pos dan uji apakah jenis posting adalah dalam daftar itu.

Sebagai fungsi:

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

Pemakaian:

if ( is_custom_post_type() )
    print 'This is a custom post type!';
fuxia
sumber
Ini harus menjadi jawaban yang diterima.
aalaap
10

Jika karena alasan apa pun Anda sudah memiliki akses ke $ variabel global, Anda dapat menggunakannya

if ($post->post_type == "your desired post type") {
}
saya tidak
sumber
5

Jika Anda ingin kartu liar, periksa semua jenis pos kustom Anda:

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

Dengan cara ini Anda tidak perlu tahu nama pos kustom Anda. Juga kode masih berfungsi bahkan jika Anda mengubah nama posting kustom Anda nanti.

kosinix
sumber