WordPress : Plusieurs conditions de filtre pour WP_Query
J’ai du mal à comprendre comment accomplir cette tâche (vraiment simple):
Obtenez 4 publications au hasard, mais ne sélectionnez que parmi les 10 publications les plus récentes.
Cela fonctionne très bien pour la partie aléatoire, mais sélectionne évidemment parmi tous les messages :
$query = array(
'posts_per_page' => 4,
'orderby' => 'rand',
'post__not_in' =>array($post->ID)
);
$wp_query = new WP_Query($query);
Fondamentalement, je veux prendre les résultats d’une requête:
$firstquery = array(
'posts_per_page' => 10,
'orderby' => 'date',
'post__not_in' =>array($post->ID),
'order' => 'DESC'
);
Et transmettez les résultats dans ce premier.
Toute aide serait super appréciée. J’ai envisagé de les fusionner, mais je pense que cela me donne simplement des résultats à la fois ? Peu confus.
Solution n°1 trouvée
Exécutez la première requête las 10 articles, puis utilisez array_rand
la fonction PHP sur le tableau des articles :
$args = array(
'posts_per_page' => 10,
'post__not_in' =>array( $post->ID ),
'orderby' => 'post_date',
'order' => 'DESC'
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
if ( $query->post_count > 4 ) {
$query->posts = array_rand( $query->posts, 4 ); // get 4 random posts
$query->post_count = 4; // update post count
// for pagination, if you need it
$query->max_num_pages = (int) ceil( $query->found_posts / 4 );
}
// After that loop as usual
while ( $query->have_posts() ) : $query->the_post();
// loop here
endwhile;
wp_reset_postdata();
}
Solution n°2 trouvée
Cette réponse est incorrecte
…Et je ne pouvais pas le retirer après qu’il ait été accepté, s’il vous plaît voir les commentaires.
Vous pouvez utiliser wp_get_recent_posts() pour obtenir les 10 derniers messages, puis récupérer les identifiants et les alimenter à votre WP_Query
argument post__in
.
global $post;
$recent_posts = wp_get_recent_posts( array(
'numberposts' => 10,
'exclude' => $post->id,
) );
$recent_posts_ids = array();
foreach( $recent_posts as $recent_post ) {
$recent_posts_ids[] = $recent_post["ID"];
}
$query_args = array(
'posts_per_page' => 4,
'orderby' => 'rand',
'post__in' => $recent_posts_ids,
);
$wp_query = new WP_Query( $query_args );
0 commentaire