web-dev-qa-db-fra.com

Comment utiliser order Rand () sur Wordpress?

Attention: C'est order , pas orderby .

Selon wordpress docs, il n'y a que deux options pour order , qui sont ASC ou DESC.

Le problème est:

Je voudrais randomiser les articles que j'ai sélectionnés , pas aléatoirement LES articles que je sélectionne .

Voici mon code pour une meilleure explication:

<?php
return array(
  "post_type" => "listings",
  "post_status" => "publish",
  'meta_query'=>array(
                        array('key'=>'featured_until','value'=>$current_date, 'compare'=>'>'),
                     ),
  'meta_key'=>'featured_until',
  "orderby" => array(
            'featured_until' => 'Rand', /* How can I make this work? */
            'date' => 'DESC'
  ),
  "suppress_filters" => true,
  "facetwp" => true,
  "posts_per_page" => 16
);

C'est un site d'annonces. Le code ci-dessus sélectionne 16 articles à afficher sur la première page.

Premièrement, il essaie de trouver 16 annonces en vedette. S'il n'y a pas beaucoup d'annonces en vedette, il est complété par des annonces régulières classées par date.

La question qui se pose est la suivante: comment puis-je commander les listes en vedette par RANDOM, au lieu de ASC ou DESC?

1
Lucas Bustamante

Vous avez raison, vous ne pouvez pas demander à WordPress de commander les publications récupérées de manière aléatoire. Vous devrez donc le faire vous-même après avoir récupéré le tableau d'objets post. Appelons cela $my_posts.

Comme vous ne savez pas combien de messages de ce tableau sont présentés, vous devrez les parcourir en boucle pour diviser le tableau. Je ne sais pas comment vous avez défini exactement le terme "en vedette", mais cela ressemblerait à ceci:

$featured_posts = array ();
$nonfeatured_posts = array ();
foreach ($my_posts as $my_post) {
  if (test if featured)
    $featured_posts[] = $my_post
  else
    $nonfeatured_posts[] = $my_post;
// now, let's randomize
shuffle ($featured_posts);
// join the array again
$my_posts = array_merge ($featured_posts,$nonfeatured_posts);
// now you have your array with featured posts randomized

Attention, je n'ai pas pu tester ce code, mais j'espère que vous avez compris.

3
cjbj

Mélanger les résultats d'une requête est vraiment aussi simple que shuffle() ing les résultats d'une requête.

$query = new WP_Query( //arguments );
shuffle( $query->posts );
1
bosco