_s, I came across an issue asking if we could remove the loop syntax in singular templates since there is never more than one post. I asked for Michael Field‘s opinion on the matter and he pointed me to a core ticket for Twenty Eleven about the same issue.
<?php while ( have_posts() ) : the_post(); ?> // Code here... <?php endwhile; ?>
have_posts() is called for the first time, it will return
true and we can go about our business of calling
the_post() and displaying the content. One of the things
the_post() does, is to set the internal
in_the_loop property to true, signalling – you guessed it – that we are in the loop. In the second iteration of the while loop, there is no post and
in_the_loop back to false.
This is important! It makes the
in_the_loop() (#) conditional tag work, that plugins might rely on to properly work. If we would not call
in_the_loop attribute would stay true for the rest of the page load, possibly causing havoc in widgets or other parts of the page.