has_post_format () vs. get_post_format ()

10

Saya baru saja melangkah ke konsep format posting dan bertanya-tanya mengapa ada dua dari 3 fungsi dari format posting "API" menawarkan fungsionalitas yang sama sekali sama sekali. Pertimbangkan dua konsep berikut (A vs. 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;

Bisakah seseorang tolong jelaskan saya mengapa ada dua fungsi bukan hanya mantan. get_post_format? Jika Anda bisa memberi saya beberapa contoh situasi di mana yang tidak mampu melakukan sesuatu fungsi lain bisa lakukan, saya akan senang khusus dan memberi +1.

kaisar
sumber

Jawaban:

12

Edit

has_post_format()membutuhkan string $format,, sebagai parameter pertama; yang berarti hanya dapat digunakan untuk menguji tipe post-format eksplisit:

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

Untuk menentukan apakah sebuah tulisan memiliki setiap pasca format, penggunaan get_post_format(), yang akan kembali falsejika posting saat ini tidak memiliki format posting ditugaskan:

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

Perhatikan bahwa "standar" bukan format posting yang sebenarnya , tetapi lebih merupakan istilah placeholder untuk posting yang tidak memiliki format posting yang ditetapkan. Secara internal, WordPress mengembalikan falsedaripada post-format-standard, jadi, untuk menanyakan tipe post-format "standar", Anda hanya perlu menggunakannya if ( false == get_post_format() ).

Asli

has_post_format() mengembalikan nilai BOOLEAN, yang berguna untuk kondisional, misalnya:

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

atau

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

get_post_format()mengembalikan nilai string dari jenis format tulisan saat ini, yang berguna dalam beberapa cara. Salah satu yang paling kuat adalah untuk memanggil file bagian templat yang berbeda berdasarkan format posting, misalnya:

get_template_part( 'entry', get_post_format() )

Yang akan mencakup, misalnya "entry-sid.php" untuk format selain, atau "entry.php" untuk format standar.

Chip Bennett
sumber
Ini get_template_partsangat pintar!
kaiser
Bennet - lengkap lupa untuk menandai A Anda sebagai solusi. Btw: All As sudah di-upgrade :)
kaiser
1
if ( ! has_post_format() ) {}mengembalikan peringatan (setidaknya 3.5-RC1) karena argumen 1 (wajib) tidak ada. codex.wordpress.org/Function_Reference/has_post_format
glueckpress
4

Bagian berikut ini tidak benar, saya telah membuat tiket untuk meminta peningkatan ini.

has_post_format()lebih fleksibel karena dibangun di atas has_term(), yang dibangun di atas is_object_in_term(). Ini berarti Anda dapat melewati array format posting dan itu akan kembali truejika posting memiliki salah satu format ini.

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

Tiket spesifikasi asli sudah disebutkan keduanya get_post_format()dan has_post_format(), mungkin karena dibangun di atas sistem taksonomi yang juga memiliki kedua fungsi?

Jan Fabry
sumber
Oh, pasti, ini lebih jauh memperluas apa yang dapat Anda lakukan di sini dengan memungkinkan Anda untuk memeriksa format tertentu untuk mendapatkan jawaban benar / salah Anda kembali.
Drew Gourley
Buat saya berpikir apakah masuk akal untuk hanya menggunakan is_object_in_term()fungsi saja.
kaiser
1
@ Jan Fabry has_post_format()mengharapkan string sebagai parameter pertama. Array akan gagal.
fuxia
1
@ tooscho: Sial, saya tahu saya seharusnya menguji itu daripada hanya melihat sekilas kode. Maka itu tidak konsisten dengan has_*fungsi lain - saya telah membuat tiket untuk itu.
Jan Fabry
2
@ Jan Fabry Itu cara yang sangat keren untuk memperbaiki jawaban Anda. :)
fuxia
3

Sederhana, has_post_format () mengembalikan nilai true / false (Boolean) yang berguna dalam pernyataan IF, sementara get_post_format () mengembalikan format posting, jika ada, dan mungkin NULL atau salah jika tidak ada. Menggunakan nilai-nilai Boolean adalah cara bersih yang baik untuk memastikan kondisi Anda selalu berperilaku seperti yang Anda harapkan dan fungsi has_post_format () memungkinkan kondisi pendek yang mudah:

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

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

Juga, ini hanya sejalan dengan fungsi WordPress lain yang ada. Sementara opsi B Anda menyelesaikan sesuatu, itu membutuhkan sedikit pengetahuan khusus daripada yang mungkin akrab dengan pengguna WordPress yang sedikit di atas rata-rata.

Drew Gourley
sumber
Mengingatkan saya pada get_adjacent_postdan next_post_linkhal - hal.
kaiser