web-dev-qa-db-fra.com

Obtenir des messages en utilisant WP_Query

Je souhaite afficher des publications à l'aide de fonctions WP_Query. Aussi, je veux ajouter un ordre aléatoire.

Donc j'essaye

<?php
  $temp = $wp_query; 
  $wp_query= null;
  $args = array(
        'orderby' => 'Rand',
  ); 
  $wp_query = new WP_Query($args);
  $wp_query->query('showposts=8' . '&paged='.$paged );
  while ($wp_query->have_posts()) : $wp_query->the_post();
?>

Je peux voir 8 messages mais il semble que 'orderby' => 'Rand' ne fonctionne pas.

2
name name2

Cela fait longtemps que je ne travaille pas avec WordPress, mais il me semble que:

Vous exécutez la requête deux fois.

  • D'abord lorsque vous passez $args au constructeur pendant l'instanciation.

  • Deuxième lorsque vous appelez query().

Avec ceci, vous écrasez essentiellement la première requête (celle qui contient orderby = Rand).

La documentation de WP_Query indique que get_posts() est appelé si vous utilisez un paramètre dans le constructeur et ne doit pas être appelé deux fois:

& get_posts () - Récupère et renvoie les publications demandées dans la base de données. Renseignez également $ posts et $ post_count. Remarque: Ceci est appelé lors de la construction si WP_Query est construit avec des arguments. Ce n'est pas idempotent et ne doit pas être appelé plus d'une fois sur le même objet de requête. Cela pourrait entraîner une requête cassée.

Et la documentation de la méthode query() indique qu'elle appelle get_posts() et qu'elle s'appelle donc deux fois:

& query ($ query) - Appelez parse_query () et get_posts () . Renvoie les résultats de get_posts ().

La solution:

  • Vous devriez soit tout mettre dans $args, soit
  • ajoutez également le paramètre orderby à l'appel $wp_query->query(..).
3
MrValueType

Examinez la référence de la classe WP_Query et travaillez-vous à partir de là. Essayez les exemples de base, jouez avec les paramètres jusqu'à ce que vous compreniez le fonctionnement de WP_Query et de la boucle.

https://codex.wordpress.org/Class_Reference/WP_Query

La raison pour laquelle votre requête ne fonctionne pas est que vous ne transmettez pas les paramètres correctement (utilisez le tableau args pour tout) et que vous utilisez des paramètres obsolètes.

1
Svartbaard