Solo get_posts de ciertos formatos de publicación

10

Estoy tratando de crear una lista de archivo con solo mis artículos de formato de publicación "normal" (no enlaces, formatos de citas, etc.).

¿Cómo implementaría has_post_format( 'standard' ), o algo similar, en el siguiente código?

No he podido encontrar una consulta get_postsque solo solicite tipos de formato específicos.

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

Mis habilidades de php están en el nivel principiante en el mejor de los casos, por lo que cualquier ayuda sería muy apreciada.

daba
fuente

Respuestas:

20

En realidad, no puede pasar un argumento relacionado con la taxonomía get_posts(). (Editar: en realidad, sí puedes. El Codex es algo confuso. Mirar la fuente get_posts()es, en esencia, solo un contenedor para WP_Query()). Puedes pasar meta claves / valores y tipos de publicación , pero no taxonomías como publicación formato. Entonces para esta línea:

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

Recomendaría usar en WP_Query()lugar de 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í, son muchas matrices anidadas. Las consultas fiscales pueden ser tan complicadas como esa.

El siguiente paso es modificar sus declaraciones de apertura / cierre de bucle. Cambia estos:

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

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

<?php endforeach; ?>

...a esto:

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

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

<?php endwhile; endif; ?>

<?php wp_reset_postdata(); ?>

Su marcado de bucle real debería poder permanecer igual, excepto que ya no necesita llamar 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>

Entonces, poniéndolo todo junto:

<?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();
Chip Bennett
fuente
gracias, lo hiciste realmente fácil de entender para un principiante al descomponerlo muy bien. Supongo que dado que solo uso los formatos aparte, enlaces y publicaciones estándar, puedo omitir el resto.
daba el
1
Si; solo deberá incluir los formatos de publicación para los que haya habilitado la compatibilidad.
Chip Bennett
get_posts () en realidad utiliza WP_Query, por lo que puede pasar consultas de taxonomía, simplemente pasarlas como una matriz y no como una cadena de consulta.
shabushabu
@shabushabu gracias por eso. He actualizado mi respuesta.
Chip Bennett
2

Los formatos de publicación son solo términos predefinidos en una taxonomía llamada post_format, por lo que debería poder utilizar la jerarquía de plantillas WP para crear archivos de formato de publicación. Simplemente cree un archivo llamado taxonomy-post_format-post-format-standard.phpen la raíz de su tema y ese archivo se utilizará para generar todas sus publicaciones estándar. Puede sustituir 'estándar' con cualquiera de los otros nombres de formato, como aside, linko video, por ejemplo taxonomy-post_format-post-format-video.php. Esto también funciona para cualquier otra taxonomía, por cierto, siempre y cuando se adhiera a este formato:taxonomy-{TAXONOMY_NAME}-{TERM_NAME}.php

Si desea mostrar formatos de publicación con un bucle personalizado, por ejemplo, en su barra lateral o dentro de una plantilla de página, puede usar la consulta de impuestos de @kaiser. Simplemente sustituya la taxonomía con post_formaty las babosas con post-format-{FORMAT_NAME}.

shabushabu
fuente
gracias, pero estoy tratando de crear los archivos dentro de una plantilla de página, así que iré con una de las otras soluciones :)
daba
1

Para dos taxonomías diferentes. Para uno solo, puede dejar el relationargumento fuera.

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

Puedes hacer trucos así:

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

Esto se debe a que get_post_format () para el formato de publicación estándar devuelve falso. http://codex.wordpress.org/Function_Reference/get_post_format

theogrost
fuente
en realidad esto funciona, pero te meterás en problemas cuando consideres la paginación. si hace algo así 'posts_per_page' => 6y tiene 4 publicaciones con una plantilla NO estándar, solo verá 2 publicaciones, no las 6 que deberían estar visibles. filtrar la consulta es la forma en la prueba a ir ..
honk31