web-dev-qa-db-fra.com

Recevez les 3 derniers messages de plusieurs CPT en une requête

Je cherche à créer un flux de site large sur mon site et à avoir plusieurs types de publication personnalisés. Je voudrais afficher disons 3 messages d'au moins 3 types de messages différents. Je peux obtenir les 10 derniers messages dans chaque type de message et les 10 derniers au total, mais j'aimerais préciser que je n'en reçois que 3 pour que les choses soient régulières. Est-ce la meilleure façon de le faire faire 3 requêtes différentes et ensuite les fusionner? Je comprends comment faire cela séparément, mais je veux qu'ils soient tous intégrés et triés par horodatage. Aucune suggestion?

1
circlecube

Cette méthode utilise un compteur et 1 requête. Seules 3 publications de chaque type de publication peuvent être affichées.

$args = array(
        'post_type' =>  array( 'type1', 'type2', 'type3' ),
        'posts_per_page'    =>  -1
        );

    $myquery = new WP_Query( $args );
        $type1 = 0; $type2 = 0; $type3 = 0; $count = 0;
        while ( $myquery->have_posts() ) : $myquery->the_post();

            if ( $post->post_type == 'type1' ) $type1++; 
            if ( $post->post_type == 'type1' && $type1 > 3 ) continue;

            if ( $post->post_type == 'type2' ) $type2++; 
            if ( $post->post_type == 'type2' && $type2 > 3 ) continue;

            if ( $post->post_type == 'type3' ) $type3++; 
            if ( $post->post_type == 'type3' && $type3 > 3 ) continue;

            $count++; if ( $count > 9 ) continue;

            // Do Stuff

            endwhile;

Ce n'est peut-être pas la meilleure solution si vous avez un très grand nombre de messages, car tous les messages seront parcourus et si le nombre est supérieur à 3 pour le type de message donné, il reviendra au début de la boucle.

1
Chris_O