web-dev-qa-db-fra.com

Exclure des commentaires d'un objet WP_Query?

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?

4
Swen

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.

5
Otto