has_post_format () vs. get_post_format ()

10

Ich bin gerade in das Konzept der Postformate eingetreten und habe mich gefragt, warum zwei von drei Funktionen des Postformats "API" absolut die gleiche Funktionalität bieten. Betrachten Sie die folgenden zwei Konzepte (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;

Könnte mir bitte jemand erklären, warum es diese beiden Funktionen stattdessen nur ex gibt. get_post_format? Wenn Sie mir einige Beispiele für Situationen anbieten könnten, in denen die eine nicht zu etwas fähig ist, was die andere Funktion kann, wäre ich besonders glücklich und würde es +1 tun.

Kaiser
quelle

Antworten:

12

Bearbeiten

has_post_format()erfordert eine Zeichenfolge $formatals ersten Parameter; Dies bedeutet, dass es nur zum Testen auf explizite Post-Format-Typen verwendet werden kann:

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

Um zu bestimmen , ob ein Beitrag hat jedes Post - Format verwenden get_post_format(), die angezeigt werden kann, falsewenn die aktuelle Post kein Post - Format hat zuzugeordnet:

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

Beachten Sie, dass "Standard" kein tatsächliches Post-Format ist, sondern ein Platzhalterbegriff für Posts, denen kein Post-Format zugewiesen ist. Intern gibt WordPress falseeher zurück, als post-format-standarddass Sie nur den "Standard" -Postformattyp abfragen würden, den Sie verwenden würden if ( false == get_post_format() ).

Original

has_post_format() Gibt einen BOOLEAN-Wert zurück, der für Bedingungen nützlich ist, z.

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

oder

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

get_post_format()Gibt den Zeichenfolgenwert des aktuellen Post-Format-Typs zurück, was auf verschiedene Weise nützlich ist. Eine der leistungsstärksten Methoden besteht darin, verschiedene Vorlagen-Teiledateien basierend auf dem Post-Format aufzurufen, z.

get_template_part( 'entry', get_post_format() )

Dazu gehören beispielsweise "entry-beiseite.php" für ein Seitenformat oder "entry.php" für ein Standardformat.

Chip Bennett
quelle
Das get_template_partist echt schlau!
Kaiser
Bennet - komplett vergessen, dein A als Lösung zu markieren. Übrigens: Alle As wurden positiv bewertet :)
Kaiser
1
if ( ! has_post_format() ) {}gibt eine Warnung zurück (mindestens ab 3.5-RC1), da das erste (erforderliche) Argument fehlt. codex.wordpress.org/Function_Reference/has_post_format
glueckpress
4

Der folgende Teil ist nicht korrekt. Ich habe ein Ticket erstellt , um diese Erweiterung anzufordern.

has_post_format()ist flexibler, weil es darauf aufbaut has_term(), worauf es aufbaut is_object_in_term(). Dies bedeutet, dass Sie eine Reihe von Postformaten übergeben können. Diese werden zurückgegeben, truewenn die Posts eines dieser Formate haben.

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

Das ursprüngliche Spezifikationsticket erwähnte bereits beide get_post_format()und has_post_format(), vielleicht weil es auf dem Taxonomiesystem aufbaut, das auch beide Funktionen hat?

Jan Fabry
quelle
Auf jeden Fall erweitert dies Ihre Möglichkeiten hier weiter, indem Sie bestimmte Formate überprüfen können, um Ihre wahre / falsche Antwort zurückzubekommen.
Drew Gourley
Ich denke, ob es sinnvoll wäre, is_object_in_term()stattdessen einfach die Funktion zu verwenden.
Kaiser
1
@ Jan Fabry has_post_format()erwartet einen String als ersten Parameter. Ein Array schlägt fehl.
Fuxia
1
@toscho: Verdammt, ich wusste, ich hätte das testen sollen, anstatt nur einen Blick auf den Code zu werfen. Dann ist es nicht mit anderen has_*Funktionen vereinbar - ich habe ein Ticket dafür erstellt.
Jan Fabry
2
@ Jan Fabry Das ist eine sehr coole Art, deine Antwort zu korrigieren. :)
Fuxia
3

Einfach, has_post_format () gibt einen true / false (Boolean) -Wert zurück, der in IF-Anweisungen nützlich ist, während get_post_format () das Post-Format zurückgibt, falls eines vorhanden ist, und wahrscheinlich NULL oder false, wenn eines nicht vorhanden ist. Die Verwendung von Booleschen Werten ist eine gute saubere Methode, um sicherzustellen, dass sich Ihre Bedingungen immer so verhalten, wie Sie es erwartet haben, und die Funktion has_post_format () ermöglicht schöne, einfache, kurze Bedingungen:

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

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

Dies entspricht auch nur anderen vorhandenen WordPress-Funktionen. Während Ihre Option B die Dinge erledigt, erfordert sie etwas mehr Fachwissen, als der etwas überdurchschnittliche WordPress-Benutzer vielleicht kennt.

Drew Gourley
quelle
Erinnert mich an das get_adjacent_postund so next_post_link.
Kaiser