has_post_format()とget_post_format()の比較


10

私は投稿形式の概念に踏み込んだばかりで、投稿形式の「API」の3つの関数のうち2つがまったく同じ機能を提供するのはなぜか疑問に思いました。次の2つの概念を検討してください(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;

誰かがなぜこれらの2つの関数がexだけではなくなぜあるのか説明してくれませんか。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()現在のポストフォーマットタイプの文字列値を返します。これはいくつかの点で役立ちます。最も強力なものの1つは、ポスト形式に基づいて異なるテンプレートパーツファイルを呼び出すことです。例:

get_template_part( 'entry', get_post_format() )

これには、例えば、asideフォーマットの場合は「entry-aside.php」、標準フォーマットの場合は「entry.php」が含まれます。


get_template_part本当に賢いです!
カイザー

ベネット-Aをソリューションとしてマークするのを完全に忘れた。ところで:All As wasvoted :)
カイザー

1
if ( ! has_post_format() ) {}最初の(必須の)引数がないため、警告(少なくとも3.5-RC1以降)を返します。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、2011

is_object_in_term()代わりに関数を使用するのが理にかなっているのではないかと思います。
カイザー

1
@Jan Fabry has_post_format()は、最初のパラメータとして文字列を想定しています。アレイは失敗します。
fuxia

1
@toscho:くそー、コードをちらっと見るのではなく、テストするべきだった。次に、他のhas_*機能との一貫性がありません-私はそのためのチケット作成しました。
Jan Fabry、

2
@Jan Fabryそれはあなたの答えを修正する非常にクールな方法です。:)
fuxia

3

単純です。has_post_format()は、IFステートメントで役立つtrue / false(ブール)値を返します。一方、get_post_format()は、投稿フォーマットが存在する場合はそれを返し、存在しない場合はおそらくNULLまたはfalseを返します。ブール値を使用することは、条件が常に期待どおりに動作することを確認するための優れたクリーンな方法であり、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_postnext_post_linkもの。
カイザー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.