デフォルトの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回取得されるのを防ぎますか。
通常のクエリを実行した後に、wp-queryオブジェクトに実際のコメントが含まれるケースを実際に見つけましたか?
Class-wp-query.phpのコードを調べると、「comments-feed」が照会されているときにはcommentsフィールドにのみコメントが入力されていることがわかります。
通常の操作では、コメントはWP_Queryによって取得されるのではなく、WP_Comment_Queryを使用して取得されます。これは、テーマがcomments_template()関数を呼び出すまで行われません。
そのため、 'comments_template_query_args'フィルタを使用して、コメントがページに表示される前にそのクラスに渡された引数をフィルタ処理できます。これはコメントフィードには影響しません。なぜならそれらは実際にはメインのWP_Queryによって移入されているからですが、コメントフィードの場合だけです。