Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I include this logic in my template all the time

if (have_posts()):
 //show content
else:
 //show content not found
endif;

But recently i began to doubt its necessarity, wordpress will turn to 404.php when no post found, it seems no need to add this logic in normal templates, "else" will never be triggered, is it?

share|improve this question

2 Answers 2

up vote 5 down vote accepted

When I look at WP::handle_404(), I think that the 404.php template will not be loaded, even if there are no posts, if:

  • We are on the homepage
  • It is a search
  • It is a taxonomy term that exists, but has no posts attached to it (and it's not paged)
  • It is an author that exists, which has written no posts (yet) (and it's not paged)

So in these template files, have_posts() can be useful.

share|improve this answer
    
Makes sense. I've run into a case myself when loading the standard 404 template would not be desirable. –  scribu May 6 '11 at 1:27

No, in most cases it's not needed.

if ( have_posts() ) would only be useful on the index.php file, if you don't have a 404.php template.

And even in that case, you could use is_404() instead.

share|improve this answer
    
When I look at the code, I see some cases where the 404.php file will not be loaded. I provided details in my answer. –  Jan Fabry May 5 '11 at 7:32

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.