Using is_home() after the loop
-
Hi, after much searching of various sites and reading of the codex, I’m stumped. I’m making a new theme and I need to check if I’m on the homepage in the file footer.php
I can use is_home() in header.php and in index.php, but using it in footer.php returns false, even when the same use in the other files returns true. The only thing which I can spot is that is_home() doesn’t work after the loop. Can someone point out something that I’ve obviously missed or is this a bug introduced in 2.6?
Cheers,
Jim
-
Nope, your wrong on both accounts.
done properly is_home works fine in the footer.
http://www.pajamadeen.com/cherie/
see the footer.
http://www.pajamadeen.com/cherie/?p=1
see the footer 🙂
🙂 That throws my theory out the window then. Do you have any suggestion on what might be causing my use of is_home in the footer.php to break then?
did you review the page in the codex?
http://codex.wordpress.org/Conditional_Tags
taking note of the “note”?
Could have a problem if you are using the “Front page displays – A static page” Setting->Reading option.
Oops, same point as whooami is making…
Nope, not using a static page for the homepage.
Might post your code, both the index.php and the footer.php, in a pastebin and report the link back here.
Ignore the formatting and what not, the theme is a work in progress. This is just the contents of the index.php file. You’ll notice there’s an if-else before the main body of content and an if-else afterward just containing echo’s. The first one outputs HOMEPAGE and the second one doesn’t. Any thoughts, greatly appreciated.
<?php get_header(); if (is_front_page() || is_home()) echo 'HOMEPAGE'; else echo 'HMM NOT HOMEPAGE'; // IF [homepage] if (is_front_page() || is_home()) { $controlPanel = get_option('controlPanel'); ?> <script type="text/javascript"> //swfobject.embedSWF('<?php bloginfo('template_directory'); ?>/assets/flash/introduction.swf', 'flash', '495', '240', '9.0.0', {}, {title: '<?php echo $controlPanel['homepageFlashText']; ?>'}, {}); </script> <img id="flash" class="screen" src="<?php bloginfo('template_directory'); ?>/assets/images/noFlash.png" alt="<?php echo stripslashes($controlPanel['homepageFlashText']); ?>" width="495px" height="240px" /> <p id="introduction"><?php echo stripslashes($controlPanel['homepageIntroduction']); ?></p> <h3>Latest News</h3> <?php query_posts('showposts=1&category_name=news'); global $more; $more = 0; if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="post split"> <div class="image"> <div class="container"> <img src="<?php echo get_bloginfo('url').'/'.get_option('upload_path').'/'.get_post_meta($post->ID, 'thumbnail', true); ?>" alt="<?php the_title(); ?>" /> </div> </div> <div class="text"> <h3><?php the_title(); ?></h3> <?php the_content('Read More'); ?> <p class="date"><?php the_time('F j, Y'); ?> at <?php the_time('G:i'); ?></p> </div> </div> <?php endwhile; else: ?> <div class="post"> <p>There are currently no news items to display.</p> </div> <?php endif; ?> <h3>Case Studies</h3> <?php query_posts('showposts=1&category_name=casestudies'); global $more; $more = 0; if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="post split"> <div class="image"> thumbnail here </div> <div class="text"> <h3><?php the_title(); ?></h3> <?php the_content('Read More'); ?> <p class="date"><?php the_time('F j, Y'); ?> at <?php the_time('G:i'); ?></p> </div> </div> <?php endwhile; else: ?> <div class="post"> <p>There are currently no case studies to display.</p> </div> <?php endif; // IF [static page] } else if (is_page()) { if (have_posts()) : while (have_posts()) : the_post(); ?> <div id="banner"> <h2><?php the_title(); ?></h2> <?php $site->breadcrumbs($post, null); ?> </div> <?php $site->subpages($post); the_content(); endwhile; endif; // IF [single post] } else if (is_single()) { if (have_posts()) : while (have_posts()) : the_post(); ?> <div id="banner"> <h2><?php the_title(); ?></h2> <?php $site->breadcrumbs($post, get_the_category()); ?> </div> <?php the_content(); ?> <p class="date"><?php the_time('F j, Y'); ?> at <?php the_time('G:i'); ?></p> <?php endwhile; endif; } if (is_front_page() || is_home()) echo 'HOMEPAGE'; else echo 'HMM NOT HOMEPAGE'; get_footer(); ?>Ok people after an exhaustive trial and error exercise, I’ve narrowed the problem down to my usage of query_posts() in the top (ignoring the debugging echos) if statement. I’m using query_posts() to display the last post in the category news, then a bit of html, then the last post in category casestudies. This then causes the bottom echo, testing is_home() to fail even though the top one passes. I have read the codex on query_posts() but have to say I’m still at a loss as to solving the problem. Does anyone have any suggestions?
Cheers,
JimJim, thanks for posting your research. I had the same problem – is_front_page was not working in footer.php. My problem was likely the use of “get_post” within the page.
To work around the problem, I call is_front_page at the top of the page (while it still works) and save the result in a variable $front_page. Then within footer.php I used:
<?php
global $front_page;
if ($front_page) {
// do special front page stuff
}
?>Sometimes when I use query_posts() I’ll save and restore a clone of the original query object by wrapping the new loop in the following commands:
$query_backup = clone($GLOBALS['wp_query']); [...] $GLOBALS['wp_query'] = $query_backup;Note that the clone method requires php5, but you can fake compatibility with something like this: clone for PHP4
Hi!
I had the same problem! is_home() or is_front_page() did not work in the footer. I figured out it turns FALSE after the query_posts() or get_post() (as BStofko wrote).
So instead of using a variable for this and struggle with GLOBALS I’ve found and used this wordpress function after finishing the query:
<?php wp_reset_query(); ?>Works like a charm for me. 🙂
wp_reset_query (line 75)
Destroy the previous query and setup a new query.This should be used after query_posts() and before another query_posts(). This will remove obscure bugs that occur when the previous wp_query object is not destroyed properly before another is setup.
since: 2.3.0
uses: $wp_query
void wp_reset_query ()The above quote is from: here
Another forum post about this: here
@agenerousdesigner – I was having a similar problem and putting the
<?php wp_reset_query(); ?>right before myis_home()call did the trick!
Thanks!
-Don
The topic ‘Using is_home() after the loop’ is closed to new replies.