web-dev-qa-db-ja.com

WP_Queryオブジェクトからコメントを除外しますか?

デフォルトのWP_Queryオブジェクトにも投稿のコメントがすべて含まれていることに気付きました。

global $wp_query;

print_r($wp_query->comments);
// Prints an object containing all of a post's comments

私の理解では、WordPressは何らかの形で投稿クエリとコメントクエリを1つのWP_Queryオブジェクトにまとめ、$wp_query->commentsオブジェクトを読むことで投稿のコメントを表示します。

ただし、コメントをクエリし、高度なクエリ引数を渡してそれらを並べ替える必要があります。だから私はWP_Comment_Queryを使って投稿のすべてのコメントを必要な順番で含む新しいオブジェクトを作成します。

$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

しかし今ではWP_Comment_Queryを使うことは基本的にWordPressに投稿のコメントのすべてを2回ロードさせるようにします

明らかに、パフォーマンスの観点からは、これは望ましくありません。私のコメントを表示するためにデフォルトのWP_Queryのコメントオブジェクトを実際には使用しないからです。

だから私は疑問に思う:私は後でWP_Queryを使って '手動で'それらをつかむことができるようにWP_Comment_Queryが投稿のコメントをつかむのを防ぐことは可能ですか?それで、同じコメントがデータベースから2回取得されるのを防ぎますか。

4
Swen

通常のクエリを実行した後に、wp-queryオブジェクトに実際のコメントが含まれるケースを実際に見つけましたか?

Class-wp-query.phpのコードを調べると、「comments-feed」が照会されているときにはcommentsフィールドにのみコメントが入力されていることがわかります。

通常の操作では、コメントはWP_Queryによって取得されるのではなく、WP_Comment_Queryを使用して取得されます。これは、テーマがcomments_template()関数を呼び出すまで行われません。

そのため、 'comments_template_query_args'フィルタを使用して、コメントがページに表示される前にそのクラスに渡された引数をフィルタ処理できます。これはコメントフィードには影響しません。なぜならそれらは実際にはメインのWP_Queryによって移入されているからですが、コメントフィードの場合だけです。

5
Otto