web-dev-qa-db-fra.com

WP_Comment_Query avec 5 commentaires de haut niveau par page?

J'essaie de reproduire l'option de la page de paramètres de WordPress qui dit:

[x] Découpez les commentaires en pages avec ((5)) commentaires de premier niveau par page et la ((première)) page affichée par défaut.

À l'heure actuelle, j'ai la requête de commentaire suivante, mais elle n'affiche que 5 commentaires, en comptant également les réponses.

Le comportement que je veux, c'est 5 commentaires de premier niveau et toutes les réponses que ces commentaires de haut niveau peuvent avoir. Comment puis-je y arriver?

Code actuel

$args = array(
    'post_id' => $post_id,
    'type' => 'comment',
    'status' => 'approve',

    'number' => 5,
    'hierarchical' => 'threaded'
);

$comments_query = new WP_Comment_Query;
$comments = $comments_query->query($args);

Sortie

Total de 5 commentaires

Commentaire 1

  • Répondre au commentaire 1
  • Répondre au commentaire 1

Commentaire 2

Commentaire 3

Sortie désirée

5 commentaires de haut niveau et toutes leurs réponses

Commentaire 1

  • Répondre au commentaire 1
  • Répondre au commentaire 1

Commentaire 2

Commentaire 3

  • Répondre au commentaire 3
  • Répondre au commentaire 3
  • Répondre au commentaire 3

Commentaire 4

Commentaire 5

  • Répondre au commentaire 5
3
Swen

Mise à jour

Le paramètre hierarchical détermine s'il faut inclure les descendants de commentaires dans les résultats de commentaires.

À partir de inline docs nous avons qu'il accepte les valeurs suivantes:

  • 'threaded' renvoie une arborescence, les enfants de chaque commentaire étant stockés dans une propriété children sur l'objet WP_Comment.
  • 'flat' renvoie un tableau plat de commentaires trouvés ainsi que leurs enfants.
  • false pour laisser de côté les descendants.

Il dit aussi que

Le paramètre est ignoré (forcé à false) lorsque $fields est 'ids' ou 'comptes'.

Les options 'threaded' et 'flat' utilisent toutes deux la méthode WP_Comment_Query::fill_descendants() :

Au lieu d'appeler get_children() séparément sur chaque commentaire enfant, nous utilisons un seul ensemble de requêtes pour extraire les arbres descendants de tous les commentaires de niveau supérieur correspondants.

mais l'option threaded a supplémentaire snippet qui utilise la méthode add_child() de l'objet WP_Comment pour construire la propriété children.


Comme @Swen l'a mentionné dans les commentaires, il convient d'utiliser l'option 'threaded'.

Il semble que la valeur true donne en fait la même chose que l'option 'flat'.

3
birgire