WordPress : Plusieurs conditions de filtre pour WP_Query

Publié par Jean-Michel le

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_randla 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_Queryargument 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 );

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *