This had somehow escaped my notice, but recently I was experimenting with a DRYing out my WordPress base theme and wanted to create some custom display logic for comments so I removed the call to comments_template()
from my single post template.
I had assumed that all it really did was load the comments.php
template from the theme or a fallback when needed. What I didn’t realise is that the comments for a given post or page are not loaded during the main query, but are queried directly in the comments_template()
function. (The only exception is for RSS comment feeds which are loaded as part of the main query.)
The function is also responsible for stuffing the comments into the $wp_query
global and setting the cpage
query variables correctly. It is a little frustrating as it means the theme must either some comment.php
template even if it’s empty or recreate the comment display logic from comments_template()
.