Postformate anzeigen / abfragen

7

WP 3.1 hat alle begeistert, wenn auch etwas verwirrt, über Postformate.

Neue Postformate aktivieren

Das Problem der Aktivierung von Postformaten wurde ausführlich behandelt. Es ist so einfach wie das Hinzufügen dieser Zeile zu functions.php: add_theme_support( 'post-formats', array( 'aside', 'gallery' ) );

Anzeigen von Posts eines bestimmten Formats

Das Problem der Anzeige dieser Beiträge wurde jedoch kaum behandelt. Dokumentieren Sie den Prozess des Anzeigens / Abfragens von Posts eines bestimmten Formats anhand eines Beispiels:

Angenommen, wir möchten ein Twitter-ähnliches Statusupdate in die Seitenleiste einfügen. Es ist einfach, das statusPost-Format zu aktivieren , aber wie kann ich diese Posts tatsächlich abfragen, damit sie in der Seitenleiste angezeigt werden?

Ich habe ziemlich viel gesucht und keine Antwort auf dieses Problem gefunden. Alle können gerne dazu beitragen. Wenn wir eine gute Antwort finden, ist dies meiner Meinung nach die erste, die dieses Problem dokumentiert.

Mit Dank!

Salz Kabeljau
quelle

Antworten:

8

Sie haben viele Optionen für die Anzeige mit der Funktion "Postformate":

In einer index.php-Schleife können Sie beispielsweise anhand des Post-Formats mithilfe der Funktion has_post_format () entscheiden, was angezeigt werden soll:

        if ( has_post_format( 'aside' )) {
            echo the_content();
        }

        elseif ( has_post_format( 'chat' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

        elseif ( has_post_format( 'gallery' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

        elseif ( has_post_format( 'image' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_post_thumbnail('medium');
            echo the_content();
        }

        elseif ( has_post_format( 'link' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

        elseif ( has_post_format( 'quote' )) {
            echo the_content();
        }

        elseif ( has_post_format( 'status' )) {
            echo the_content();
        }

        elseif ( has_post_format( 'video' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

        elseif ( has_post_format( 'audio' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

        else {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

Verwenden Sie get_template_part () und get_post_format () , um eine unterschiedliche Schleife basierend auf dem Format zu erhalten. Dies setzt voraus, dass Sie für jedes in Ihrem Design verwendete Format eine Datei format loop.php (z. B. format-status.php) erstellt haben, sodass Sie einfach aufrufen es:

get_template_part( 'format', get_post_format() );

Sie können Beiträge auch nach ihrem Format abfragen:

$args = array(
                'tax_query' => array(
                    array(
                        'taxonomy' => 'post-format',
                        'field' => 'slug',
                        'terms' => array( 'post-format-quote' )
                    )
                )
            )
            $query = new WP_Query( $args );

und zuletzt (vorerst) können Sie "post_class ();" Funktion zum Stylen basierend auf CSS

<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

Dies gibt ungefähr Folgendes aus:

<div id="post-id" class=”post format-status>

Hoffe, das hilft beim Einstieg

Bainternet
quelle
1

Obwohl alle oben genannten Methoden funktionieren, gibt es eine viel sauberere Methode, wie Dougal Campbell gezeigt hat

while ( the_loop() ):
    get_template_part( 'format', get_post_format() );
endwhile;

Wenn Sie diese Methode verwenden, werden die bedingten Anweisungen beendet, und Sie müssen nicht mehr hinzufügen, wenn Sie Unterstützung für ein anderes Post-Format hinzufügen. Sie müssen lediglich die Vorlagendatei hinzufügen.

Curtismchale
quelle
3
Wie unterscheidet sich das von dem Code in meiner Antwort?
Bainternet
Guter Anruf, es ist nicht wirklich, ich schätze, ich habe die anderen Antworten zu schnell durchgelesen und nur die bedingten Dinge abgefangen, vorausgesetzt, der Rest war mehr der gleiche. Lösche ich den Link zum längeren Blog-Beitrag oder lasse ich ihn einfach b / c?
Curtismchale
1

Um nur ein kurzes Update hinzuzufügen: Wenn Sie nur das "Standard" -Postformat (das Standardformat) abfragen möchten, müssen Sie alle Posts abfragen, die NICHT in anderen Postformaten vorliegen. Dies liegt daran, dass WordPress für Standard-Posts eher "false" als "post-format-standard" speichert.

Irgendwie irritierend, aber nur so konnte ich es schaffen.

Hier ist die 'tax_query', mit der ich nur Standardbeiträge zurückgegeben habe:

'tax_query' => array(
    array(
        'taxonomy' => 'post_format',
        'field' => 'slug',
        'terms' => array('post-format-aside', 'post-format-gallery', 'post-format-link', 'post-format-image', 'post-format-quote', 'post-format-status', 'post-format-audio', 'post-format-chat', 'post-format-video'),
        'operator' => 'NOT IN'
    )
)

Beachten Sie außerdem, dass der Taxonomiename "post_format" und nicht "postformat" lautet, wie oben beschrieben. Ich habe versucht, das obige Beispiel zu korrigieren, konnte jedoch keine Bearbeitung mit einem Zeichen vornehmen.

mrwweb
quelle
Dies ist ein bekannter Fehler und es gibt einen Patch in Trac, um ihn eines Tages zu beheben :) core.trac.wordpress.org/ticket/16149
mrwweb