has_post_format () กับ get_post_format ()


10

ฉันเพิ่งก้าวเข้าสู่แนวคิดของรูปแบบการโพสต์และสงสัยว่าทำไมมีสองใน 3 ฟังก์ชั่นจากรูปแบบการโพสต์ "API" เสนอฟังก์ชั่นเดียวกันอย่างแน่นอน พิจารณาแนวคิดสองข้อต่อไปนี้ (A กับ B):

if ( have_posts() )
{
    while ( have_posts() )
    {
        the_post();

        // A) has_post_format
        if ( has_post_format('format') )
        {
            the_excerpt(); // some special formating
        }

        // VERSUS:

        // B) 
        if ( get_post_format( $GLOBALS['post']->ID ) == 'format' )
        {
            the_excerpt(); // some special formating
        }

    } // endwhile;
} // endif;

มีคนช่วยอธิบายหน่อยได้ไหมว่าทำไมถึงมีทั้งสองฟังก์ชั่นแทนอดีตเท่านั้น get_post_format? หากคุณสามารถเสนอตัวอย่างสถานการณ์ที่ไม่สามารถทำหน้าที่อื่น ๆ ให้ฉันได้ฉันจะมีความสุขเป็นพิเศษและ +1 มัน

คำตอบ:


12

แก้ไข

has_post_format()ต้องการสตริง$format, เป็นพารามิเตอร์แรก ซึ่งหมายความว่าสามารถใช้ทดสอบประเภทโพสต์รูปแบบที่ชัดเจนเท่านั้น:

if ( has_post_format( $format ) {
    // Current post has the $format post format;
    // do something
}

หากต้องการพิจารณาว่าโพสต์มีรูปแบบโพสต์ใด ๆให้ใช้get_post_format()ซึ่งจะส่งคืนfalseหากโพสต์ปัจจุบันไม่มีรูปแบบโพสต์ที่กำหนด:

if ( false != get_post_format() ) {
    // Current post has a post format;
    // do something
}

โปรดทราบว่า"มาตรฐาน"ไม่ใช่รูปแบบโพสต์จริงแต่เป็นคำที่ใช้แทนตำแหน่งสำหรับโพสต์ที่ไม่ได้กำหนดรูปแบบโพสต์ไว้ ภายใน WordPress ผลตอบแทนที่falseมากกว่าpost-format-standardดังนั้นเพื่อแบบสอบถามสำหรับ "มาตรฐาน" if ( false == get_post_format() )ประเภทโพสต์รูปแบบที่คุณต้องการเพียงแค่การใช้งาน

เป็นต้นฉบับ

has_post_format() ส่งคืนค่าบูลีนซึ่งมีประโยชน์สำหรับเงื่อนไขเช่น:

if ( ! has_post_format() ) {
     // I'm a standard-format post; do something
}

หรือ

if ( has_post_format( array( 'gallery', 'image' ) ) {
     // I'm a gallery or image format post; do something
}

get_post_format()ส่งคืนค่าสตริงของชนิดรูปแบบโพสต์ปัจจุบันซึ่งมีประโยชน์ในหลายวิธี หนึ่งที่มีประสิทธิภาพมากที่สุดคือการเรียกไฟล์ส่วนแม่แบบที่แตกต่างกันตามรูปแบบโพสต์เช่น:

get_template_part( 'entry', get_post_format() )

ซึ่งจะรวมถึงเช่น "entry-apart.php" สำหรับรูปแบบกันหรือ "entry.php" สำหรับรูปแบบมาตรฐาน


get_template_partเป็นสมาร์ทจริงๆ!
ไกเซอร์

Bennet - ลืมทำเครื่องหมาย A ให้สมบูรณ์ Btw: ทั้งหมดเช่นเดียวกับที่ upvoted :)
Kaiser

1
if ( ! has_post_format() ) {}ส่งกลับคำเตือน (ตั้งแต่ 3.5-RC1 เป็นอย่างน้อย) เนื่องจากอาร์กิวเมนต์ที่ 1 (จำเป็น) หายไป codex.wordpress.org/Function_Reference/has_post_format
glueckpress

4

ส่วนต่อไปนี้ไม่ถูกต้องฉันได้สร้างตั๋วเพื่อขอการปรับปรุงนี้

has_post_format()มีความยืดหยุ่นมากขึ้นเพราะมันต่อยอดhas_term()ซึ่งสร้างis_object_in_term()ต่อไป ซึ่งหมายความว่าคุณสามารถผ่านอาร์เรย์ของรูปแบบการโพสต์และมันจะกลับมาtrueถ้าโพสต์มีหนึ่งในรูปแบบเหล่านี้

if ( has_post_format( array( 'aside', 'video' ) ) {
    // It's an aside or a video
}

ตั๋วสเปคดั้งเดิมพูดถึงแล้วทั้งสองget_post_format()และhas_post_format()อาจเป็นเพราะมันสร้างตามระบบอนุกรมวิธานที่มีทั้งสองฟังก์ชั่นด้วย?


โอ้แน่นอนว่านี่เป็นการขยายสิ่งที่คุณสามารถทำได้ที่นี่โดยอนุญาตให้คุณตรวจสอบรูปแบบเฉพาะเพื่อให้ได้คำตอบที่ถูก / ผิดจริง
Drew Gourley

ทำให้ฉันคิดว่ามันจะสมเหตุสมผลถ้าใช้is_object_in_term()ฟังก์ชั่นแทน
ไกเซอร์

1
@Jan Fabry has_post_format()คาดว่าสตริงเป็นพารามิเตอร์แรก อาร์เรย์จะล้มเหลว
fuxia

1
@toscho: Darn ฉันรู้ว่าฉันควรจะทดสอบว่าแทนที่จะดูที่รหัส จากนั้นมันจะไม่สอดคล้องกับhas_*ฟังก์ชั่นอื่น ๆ- ฉันสร้างตั๋วไว้แล้ว
Jan Fabry

2
@Jan Fabry นั่นเป็นวิธีที่ยอดเยี่ยมในการแก้ไขคำตอบของคุณ :)
fuxia

3

Simple, has_post_format () ส่งคืนค่า true / false (Boolean) ซึ่งมีประโยชน์ในคำสั่ง IF ขณะที่ get_post_format () ส่งคืนรูปแบบการโพสต์หากมีอยู่และอาจเป็น NULL หรือเท็จหากไม่มี การใช้ค่าบูลีนเป็นวิธีที่ดีในการทำให้แน่ใจว่าเงื่อนไขของคุณจะทำงานในแบบที่คุณคาดไว้เสมอและฟังก์ชั่น has_post_format () ช่วยให้เงื่อนไขสั้น ๆ ง่าย:

if ( has_post_format() ) {
  //yes we do
} else {
  //no we do not
}

if ( !has_post_format() ) {
  //no we do not
} else {
  //yes we do
}

นอกจากนี้ยังเป็นไปตามหน้าที่การใช้งาน WordPress อื่น ๆ ที่มีอยู่ ในขณะที่ตัวเลือก B ของคุณทำสิ่งต่าง ๆ เสร็จสิ้นก็ต้องใช้ความรู้เฉพาะทางมากกว่าผู้ใช้ WordPress ที่คุ้นเคยเล็กน้อย


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