Solo get_posts di determinati formati di post


10

Sto cercando di creare un elenco di archivi con solo i miei "normali" articoli in formato post (non formati link, a parte, citazione, ecc.).

Come implementerei has_post_format( 'standard' ), o qualcosa di simile, nel codice qui sotto?

Non sono stato in grado di trovare una query per get_postscui sono richiesti solo tipi di formato specifici.

<?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; ?>

Le mie capacità di php sono al livello principiante al massimo, quindi qualsiasi aiuto sarebbe molto apprezzato.

Risposte:


20

Non puoi in realtà passare un argomento relativo alla tassonomia a get_posts(). (Modifica: in realtà, sì, è possibile. Il Codice non è abbastanza chiaro. Guardando la fonte, get_posts()è, in sostanza, solo un wrapper per WP_Query().) Puoi passare meta-chiavi / valori e tipi di post , ma non tassonomie come post formato. Quindi per questa linea:

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

Consiglierei di utilizzare WP_Query()anziché get_posts():

$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'
        )
    )
) );

Nota: sì, sono molti array nidificati. Le domande fiscali possono essere complicate in questo modo.

Il passaggio successivo consiste nel modificare le istruzioni di apertura / chiusura del ciclo. Cambia questi:

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

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

<?php endforeach; ?>

...a questa:

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

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

<?php endwhile; endif; ?>

<?php wp_reset_postdata(); ?>

Il markup del loop effettivo dovrebbe essere in grado di rimanere lo stesso, tranne per il fatto che non è più necessario chiamare setup_postdata( $post ):

<?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>

Quindi, mettendo tutto insieme:

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

grazie, hai reso davvero facile per un principiante capire scomponendolo bene. Sto indovinando poiché uso solo i formati di post, link e post standard, in realtà posso saltare il resto.
daba,

1
Sì; dovresti includere solo i formati di post per cui hai abilitato il supporto.
Chip Bennett,

get_posts () attualmente utilizza WP_Query, quindi ovviamente puoi passare le query di tassonomia, semplicemente passarle come un array e non come una stringa di query.
Shabushabu,

@shabushabu grazie per quello. Ho aggiornato la mia risposta.
Chip Bennett,

2

I formati di post sono solo termini predefiniti in una tassonomia chiamata post_format, quindi dovresti essere in grado di utilizzare la gerarchia dei modelli WP per creare archivi di formato post. Basta creare un file chiamato taxonomy-post_format-post-format-standard.phpnella radice del tema e quel file verrà utilizzato per produrre tutti i tuoi post standard. Puoi sostituire "standard" con uno qualsiasi degli altri nomi di formato, come aside, linko video, ad esempio taxonomy-post_format-post-format-video.php. Funziona anche con qualsiasi altra tassonomia, tra l'altro, a patto di attenersi a questo formato:taxonomy-{TAXONOMY_NAME}-{TERM_NAME}.php

Se desideri mostrare i formati dei post con un ciclo personalizzato, ad esempio nella barra laterale o all'interno di un modello di pagina, puoi utilizzare la query fiscale di @kaiser. Basta sostituire la tassonomia con post_formate le lumache con post-format-{FORMAT_NAME}.


grazie, ma sto provando a creare gli archivi all'interno di un modello di pagina, quindi andrò con una delle altre soluzioni :)
daba,

1

Per due diverse tassonomie. Per uno solo, puoi lasciare relationfuori l' argomento.

$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'
        )
    )
);

0

Puoi fare un trucco del genere:

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

È perché get_post_format () per il formato postale standard restituisce false. http://codex.wordpress.org/Function_Reference/get_post_format


in realtà questo funziona, ma ti metterai nei guai, quando consideri il paging. se fai qualcosa di simile 'posts_per_page' => 6e hai 4 post con un modello NON standard, vedrai solo 2 post, non i 6 che dovrebbero essere visibili. filtrare la query è il modo per andare alla prova ..
honk31
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.