web-dev-qa-db-ja.com

has_post_format()対get_post_format()

私は ポストフォーマット のコンセプトに踏み込んだだけです。そしてポストフォーマット "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します。

10
kaiser

編集する

has_post_format()は最初のパラメータとして文字列$formatを必要とします。これは明示的なポストフォーマットタイプをテストするためにのみ使用できることを意味します。

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

投稿に any post形式があるかどうかを判断するには、現在の投稿に投稿形式が割り当てられていない場合はget_post_format()を使用します。これはfalsename__を返します。

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

"standard" actual postフォーマットではありませんが、投稿フォーマットが割り当てられていない投稿の場合は プレースホルダ という用語です。内部的には、WordPressはpost-format-standardではなくfalsename__を返すので、「標準」のポストフォーマットタイプを問い合わせるにはif ( false == get_post_format() )を使用します。

元の

has_post_format()はBOOLEAN値を返します。これは、次のように条件付きで役立ちます。

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() )

例えば、別形式の場合は "entry-aside.php"、標準形式の場合は "entry.php"です。

12
Chip Bennett

次の部分は正しくありません。私は チケットを作成しました でこの機能強化をリクエストしています。

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()の両方、おそらく両方の機能を備えた分類システムに基づいているためでしょうか?

4
Jan Fabry

単純な場合、has_post_format()はIF文で役立つtrue/false(ブール値)を返します。一方get_post_format()はpost形式があればそれを返し、なければおそらく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ユーザーが精通しているより多少専門的な知識を必要とする。

3
Drew Gourley