web-dev-qa-db-fra.com

Obtenez 10 messages d'un WP_Query. Si moins de 10, obtenez le reste ailleurs

J'essaie de créer un post connexe WP_Query. Jusqu'à présent, j'ai créé un WP_Query personnalisé qui interroge toutes les publications qui correspondent à un tableau de balises.

Cependant, j'essaie de créer un simple if statement: si le nombre de messages récupérés est de moins de 10 , récupérez le reste de ailleurs (cela pourrait être d'une catégorie particulière).

J'ai la boucle suivante. Il utilise $related_posts->found_posts pour obtenir le nombre de messages.

$related_posts_args =
    array(
    'tag__and' => $list_of_tags, // array of tag IDS
    'posts_per_page' => 10,
    'post__not_in' => $already_posted, // array of post IDs
    'post_type' => 'post',
    'post_status' => 'publish',
    'orderby' => 'date',
    'order' => 'DESC',
    'orderby' => 'Rand',
);

$related_posts_query = new WP_Query( $related_posts_args );
if ( $related_posts_query->have_posts() ):
    while ( $related_posts_query->have_posts() ):
        $related_posts_query->the_post();
// this is the number of posts in my current query
    echo $related_posts_query->found_posts; 
            the_title();
    endwhile;
endif;
wp_reset_postdata();

Est-ce que quelqu'un sait comment utiliser le reste pour obtenir des messages d'ailleurs? (Et est possible dans la même boucle).

6
tmyie

Vous pourriez faire quelque chose comme:

$related_posts_query = new WP_Query( $related_posts_args );
if( $related_posts_query->found_posts < 10 ){
   $args = array(/* new wp_query args*/);
   $newquery = new WP_Query( $args );
}

# merge the two results
$related_posts_query->posts = array_merge( $related_posts_query->posts, $newquery->posts );
$related_posts_query->post_count = count( $related_posts_query->posts );

# do your loop here
7
RRikesh

La meilleure approche à l’OMI consiste à compter le nombre de publications renvoyées par page par rapport à l’option set posts_per_page définie dans votre requête. Si le nombre est inférieur à l'ensemble posts_per_page, calculez la différence, puis utilisez-la comme quantité de messages pour remplir le reste dans une requête personnalisée.

Voici comment cela devrait fonctionner:

Commencez par compter le nombre de messages renvoyés par votre requête "principale". Dans ce cas, ce sera $related_posts_args->posts

count($related_posts_args->posts)

Comme vous avez défini votre posts_per_page sur 10, ce sera le numéro avec lequel vérifier le compte.

count($related_posts_args->posts) < 10

Si le nombre est inférieur à 10, vous devez obtenir la différence entre 10 et le nombre. Cette différence sera l'option posts_per_page pour votre requête personnalisée

$ppp = 10 - count($related_posts_args->posts);

Vous pouvez maintenant exécuter votre requête personnalisée pour récupérer les publications afin de remplir les espaces vides. Vous aurez juste besoin d'ajouter vos propres arguments de requête

Voici le code complet

if( count($related_posts_args->posts) < 10 ) { 

    $ppp = 10 - count($related_posts_args->posts);

    $args = [ //Add your own query arguments to suite your needs
        'orderby' => 'Rand',
        'posts_per_page' => $ppp
    ];

    $q = new WP_Query( $args );

    if( $q->have_posts() ) {
        while( $q->have_posts() ) {
            $q->the_post();

            //Display your loop elements

        }
        wp_reset_postdata();
    }
}

Avec votre code intégré

$related_posts_args = [
    'tag__and' => $list_of_tags, // array of tag IDS
    'posts_per_page' => 10,
    'post__not_in' => $already_posted, // array of post IDs
    'post_type' => 'post',
    'post_status' => 'publish',
    'orderby' => 'date',
    'order' => 'DESC',
    'orderby' => 'Rand',
];

$related_posts_query = new WP_Query( $related_posts_args );
if ( $related_posts_query->have_posts() ) {
    while ( $related_posts_query->have_posts() ) {
        $related_posts_query->the_post();

        //Display your loop elements

    }
    wp_reset_postdata();

    if( count($related_posts_args->posts) < 10 ) { 

        $ppp = 10 - count($related_posts_args->posts);

        $args = [ //Add your own query arguments to suite your needs
            'orderby' => 'Rand',
            'posts_per_page' => $ppp
        ];

        $q = new WP_Query( $args );

        if( $q->have_posts() ) {
            while( $q->have_posts() ) {
                $q->the_post();

                //Display your loop elements

            }
            wp_reset_postdata();
        }
    }
}
0
Pieter Goosen