ทดสอบว่าโพสต์เป็นประเภทโพสต์ที่กำหนดเองได้อย่างไร


103

ฉันกำลังมองหาวิธีทดสอบว่าโพสต์นั้นเป็นประเภทโพสต์ที่กำหนดเองหรือไม่ ตัวอย่างเช่นในแถบด้านข้างที่ฉันสามารถใส่รหัสดังนี้:

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

ฉันต้องการทดสอบโค้ดสำหรับประเภทโพสต์ที่กำหนดเองเท่านั้น

คำตอบ:



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

ข้างต้นเป็นเมื่อดูโพสต์โพสต์ที่กำหนดเองประเภทนี้:truebook

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

ข้างต้นเป็นtrueเมื่อดูโพสต์ในประเภทที่โพสต์ที่กำหนดเอง: หรือnewspaperbook

แท็กเหล่านี้และอื่น ๆ ตามเงื่อนไขที่สามารถดูได้ที่นี่


27

เพิ่มไปยังของคุณfunctions.phpและคุณสามารถใช้งานได้ทั้งในและนอกวง

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

ดังนั้นตอนนี้คุณสามารถใช้สิ่งต่อไปนี้:

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

ขอบคุณนี่มีประโยชน์มาก! แต่มันควรจะเป็น: ถ้า (is_single () && is_post_type ('post_type')) {// work magic} วงเล็บปิดหายไป .... คำทักทายจำนวนมากเอเธล

สิ่งนี้หยุดทำงานกับคนอื่นหรือไม่? ฉันใช้มันมานานแล้ว แต่ทันใดนั้นก็หยุดทำงานแทนฉัน อย่างไรก็ตามการใช้วิธีการเดียวกันโดยไม่มี $ wp_query ทั่วโลกสามารถใช้ได้เสมอ:if ( 'post-type' == get_post_type() ) {}
turtledropbomb

is_post_type () ถูกคิดค่าเสื่อมราคา
Lisa Cerilli

23

ในการทดสอบว่าโพสต์เป็นประเภทโพสต์ที่กำหนดเองใด ๆให้ดึงรายการประเภทโพสต์ที่ไม่ได้ติดตั้งมาทั้งหมดและทดสอบว่าประเภทโพสต์นั้นอยู่ในรายการนั้นหรือไม่

ในฐานะที่เป็นฟังก์ชั่น:

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

การใช้งาน:

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

นี่ควรเป็นคำตอบที่ยอมรับได้
aalaap

10

หากด้วยเหตุผลใดก็ตามที่คุณมีการเข้าถึงตัวแปร $ post ทั่วโลกคุณก็สามารถใช้

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

5

หากคุณต้องการตรวจสอบบัตรเสริมสำหรับประเภทโพสต์ที่กำหนดเองทั้งหมดของคุณ:

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

ด้วยวิธีนี้คุณไม่จำเป็นต้องรู้ชื่อโพสต์ที่คุณกำหนดเอง รหัสยังใช้งานได้แม้ว่าคุณจะเปลี่ยนชื่อโพสต์ที่คุณกำหนดเองในภายหลัง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.