J'ai remarqué que l'objet WP_Query par défaut contient également tous les commentaires d'un article.
global $wp_query;
print_r($wp_query->comments);
// Prints an object containing all of a post's comments
D'après ma compréhension, WordPress combine en quelque sorte une requête de publication et une requête de commentaires dans un objet WP_Query
, puis affiche les commentaires d'une publication en lisant l'objet $wp_query->comments
.
Cependant, je dois interroger les commentaires et les commander en passant des arguments de requête avancés. J'utilise donc WP_Comment_Query
pour créer un nouvel objet contenant tous les commentaires d'un article dans l'ordre dans lequel j'en ai besoin.
$args = array(
'post_id' => get_the_ID(),
'order' => 'ASC'
);
$comments_query = new WP_Comment_Query;
$comments = $comments_query->query($args);
print_r($comments);
// Prints an object containing all comments matching the query
Mais maintenant, il semble que l'utilisation de WP_Comment_Query
oblige WordPress à charger tous les commentaires d'un article deux fois .
Évidemment, du point de vue des performances, cela n’est pas souhaitable, étant donné que je n’utilise pas réellement l’objet de commentaire du WP_Query
par défaut pour afficher mes commentaires.
Je me demande donc: est-il possible d'empêcher le WP_Query
de saisir les commentaires d'un article, afin que je puisse ensuite les récupérer "manuellement" à l'aide de WP_Comment_Query
? Et donc, empêcher les mêmes commentaires d'être saisis deux fois dans la base de données?
Avez-vous réellement trouvé un cas où il y a de vrais commentaires dans l'objet wp-query après avoir exécuté une requête normale?
Si vous examinez le code dans class-wp-query.php, vous constaterez que le champ de commentaires uniquement est rempli de commentaires lorsqu'un "commentaire-feed" est demandé.
En mode de fonctionnement normal, les commentaires ne sont pas récupérés par WP_Query, mais par WP_Comment_Query, ce qui ne se produit pas tant que votre thème n'a pas appelé la fonction comments_template ().
En tant que tel, vous pouvez utiliser le filtre 'comments_template_query_args' pour filtrer les arguments transmis à cette classe avant que les commentaires ne soient affichés sur la page. Cela n'affectera pas le fil de commentaires, car ceux-ci sont bien renseignés par le WP_Query principal, mais uniquement pour le cas du fil de commentaires.