web-dev-qa-db-fra.com

Premier article de chaque catégorie

J'essaie de créer une boucle simple, qui obtient le dernier message de 3 catégories sélectionnées. J'ai cherché quelque chose de similaire, mais la plupart sont excessivement complexes.

Pour le moment, j'ai:

    <?php 

    // WP_Query arguments
$args = array (
    'category_name'          => array('lifestyle', 'fashion', 'beauty')
);

// The Query
$query = new WP_Query( $args[0] );

// The Loop
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        // do something
    }
} else {
    // no posts found
}

// Restore original Post Data
wp_reset_postdata();

?>

Je suppose que j'aurais besoin d'une boucle foreach, mais je ne sais pas comment l'implémenter dans ce scénario, et uniquement pour le dernier de chaque message?

Toute aide est la bienvenue.

1
tmyie

Il n'est pas possible d'obtenir une publication par catégorie avec une requête simple, et même une requête complexe prend plus de temps que 3 requêtes distinctes. Donc, si vous voulez plus simple, alors c'est la solution -

$cats = array('lifestyle', 'fashion', 'beauty');
$exclude_posts = array();
foreach( $cats as $cat )
{
    // build query argument
    $query_args = array(
        'category_name' => $cat,
        'showposts' => 1,
        'post_type' => 'post',
        'post_status' => 'publish',
        'orderby' => 'date',
        'order' => 'DESC'
    );

    // exclude post that already have been fetched
    // this would be useful if multiple category is assigned for same post
    if( !empty($exclude_posts) )
        $query_args['post__not_in'] = $exclude_posts;

    // do query
    $query = new WP_Query( $query_args );

    // check if query have any post
    if ( $query->have_posts() ) {

        // start loop
        while ( $query->have_posts() ) {
            // set post global
            $query->the_post();

            // add current post id to exclusion array
            $exclude_posts[] = get_the_ID();


            // do something
        }
    } else {
        // no posts found
    }

    // Restore original Post Data
    wp_reset_postdata();
}
2
Shazzad