it-swarm.com.de

Nur get_posts bestimmter Postformate

Ich versuche, eine Archivliste nur mit meinen "normalen" Artikeln im Post-Format zu erstellen (keine Formate für Links, Seiten, Zitate usw.).

Wie würde ich has_post_format( 'standard' ) oder ähnliches in den folgenden Code implementieren?

Ich konnte keine Abfrage für get_posts finden, die nur bestimmte Formattypen anfordert.

<?php    
    // Get the posts
    $myposts = get_posts('numberposts=-1&orderby=post_date&order=DESC');     
?>

<?php foreach($myposts as $post) : ?>   

<?php    
    // Setup the post variables
    setup_postdata($post);

    $year = mysql2date('Y', $post->post_date);
    $month = mysql2date('n', $post->post_date);
    $day = mysql2date('j', $post->post_date);    
?>

<p>
    <span class="the_article">
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </span>
    &nbsp;&nbsp;&nbsp;
    <span class="the_day">
        <?php the_time('j F Y'); ?>
    </span>
</p>

<?php endforeach; ?>

Meine PHP-Kenntnisse sind bestenfalls Anfänger, daher wäre jede Hilfe sehr willkommen.

10
daba

Sie können ein taxonomiebezogenes Argument nicht an get_posts() übergeben.  (Edit: tatsächlich, ja, das kannst du. Der Codex ist nur etwas unklar. Wenn man die Quelle betrachtet, ist get_posts() im Kern nur ein Wrapper für WP_Query().) Du kannst Metaschlüssel/Werte übergeben und posten types, aber keine Taxonomien wie das Post-Format. Also für diese Zeile:

$myposts = get_posts('numberposts=-1&orderby=post_date&order=DESC');

Ich würde empfehlen, WP_Query() anstelle von get_posts() zu verwenden:

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

Hinweis: Ja, das sind viele verschachtelte Arrays. Steuerfragen können so knifflig sein.

Der nächste Schritt besteht darin, die Anweisungen zum Öffnen/Schließen der Schleife zu ändern. Ändern Sie diese:

<?php foreach($myposts as $post) : ?>

    <?php /* loop markup goes here */ ?>

<?php endforeach; ?>

... dazu:

<?php if ( $myposts->have_posts() ) : while ( $myposts->have_posts() ) : $myposts->the_post(); ?>

    <?php /* loop markup goes here */ ?>

<?php endwhile; endif; ?>

<?php wp_reset_postdata(); ?>

Ihr tatsächliches Loop-Markup sollte kann unverändert bleiben, mit der Ausnahme, dass Sie nicht mehr setup_postdata( $post ) aufrufen müssen:

<?php        
    $year = mysql2date('Y', $post->post_date);
    $month = mysql2date('n', $post->post_date);
    $day = mysql2date('j', $post->post_date);    
?>

<p>
    <span class="the_article">
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </span>
    &nbsp;&nbsp;&nbsp;
    <span class="the_day">
        <?php the_time('j F Y'); ?>
    </span>
</p>

Also, alles zusammen:

<?php
// Only query posts with the
// "standard" post format, which
// requires *excluding* all other
// post formats, since neither the
// "post_format" taxonomy nor the
// "post-format-standard" taxonomy term
// is applied to posts without
// defined post formats
$myposts = new WP_Query( array(
    'tax_query' => array(
        array(                
            'taxonomy' => 'post_format',
            'field' => 'slug',
            'terms' => array( 
                'post-format-aside',
                'post-format-audio',
                'post-format-chat',
                'post-format-gallery',
                'post-format-image',
                'post-format-link',
                'post-format-quote',
                'post-format-status',
                'post-format-video'
            ),
            'operator' => 'NOT IN'
        )
    )
) );

// Open the loop
if ( $myposts->have_posts() ) : while ( $myposts->have_posts() ) : $myposts->the_post(); ?>

    $year = mysql2date('Y', $post->post_date);
    $month = mysql2date('n', $post->post_date);
    $day = mysql2date('j', $post->post_date);    
    ?>

    <p>
        <span class="the_article">
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        </span>
        &nbsp;&nbsp;&nbsp;
        <span class="the_day">
            <?php the_time('j F Y'); ?>
        </span>
    </p>  
    <?php 

// Close the loop
endwhile; endif;

// Reset $post data to default query
wp_reset_postdata();
20
Chip Bennett

Post-Formate sind nur vordefinierte Begriffe in einer Taxonomie mit dem Namen post_format. Sie sollten daher in der Lage sein, die Vorlagenhierarchie WP zum Erstellen von Post-Format-Archiven zu verwenden. Erstellen Sie einfach eine Datei mit dem Namen taxonomy-post_format-post-format-standard.php im Stammverzeichnis Ihres Themas und diese Datei wird verwendet, um alle Ihre Standardbeiträge auszugeben. Sie können 'standard' durch einen beliebigen anderen Formatnamen ersetzen, z. B. aside, link oder video, z. taxonomy-post_format-post-format-video.php. Dies funktioniert übrigens auch für jede andere Taxonomie, solange Sie sich an dieses Format halten: taxonomy-{TAXONOMY_NAME}-{TERM_NAME}.php

Wenn Sie Beitragsformate mit einer benutzerdefinierten Schleife anzeigen möchten, z. In Ihrer Seitenleiste oder innerhalb einer Seitenvorlage können Sie dann die Steuerabfrage von @kaiser verwenden. Ersetzen Sie einfach die Taxonomie durch post_format und die Schnecken durch post-format-{FORMAT_NAME}.

2
shabushabu

Für zwei verschiedene Taxonomien. Für eine einzelne können Sie das Argument relation weglassen.

$args = array(
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'movie_janner',
            'field' => 'slug',
            'terms' => array( 'action', 'commedy' ) // Single terms as string - multiple as array
        ),
        array(
            'taxonomy' => 'actor',
            'field' => 'id',
            'terms' => array( 103, 115, 206 ),
            'operator' => 'NOT IN'
        )
    )
);
1
kaiser

Sie können so einen Trick machen:

<?php 
while( have_posts() ) : the_post();
get_post_format()==false? get_template_part( 'loop', 'posts' ) : false;
endwhile;
?>

Dies liegt daran, dass get_post_format () für das Standard-Post-Format false zurückgibt. http://codex.wordpress.org/Function_Reference/get_post_format

0
theogrost