Since WordPress 2.1, when the static front page functionality was introduced, the blog posts index and site front page have been treated as two different query contexts, with is_home() applying to the blog posts index, and is_front_page() applying to the site front page.
Be careful not to confuse the two query conditionals:
On the site front page, is_front_page() will always return true, regardless of whether the site front page displays the blog posts index or a static page.
On the blog posts index, is_home() will always return true, regardless of whether the blog posts index is displayed on the site front page or a separate page.
Whether is_home() or is_front_page() return true or false depends on the values of certain option values:
get_option( 'show_on_front' ): returns either 'posts' or 'page'
get_option( 'page_on_front' ): returns the ID of the static page assigned to the front page
get_option( 'page_for_posts' ): returns the ID of the static page assigned to the blog posts index (posts page)
When using these query conditionals:
If 'posts' == get_option( 'show_on_front' ):
On the site front page:
is_front_page() will return true
is_home() will return true
If assigned, WordPress ignores the pages assigned to display the site front page or the blog posts index
If 'page' == get_option( 'show_on_front' ):
On the page assigned to display the site front page:
is_front_page() will return true
is_home() will return false
On the page assigned to display the blog posts index:
function is_home() {
global $wp_query;
if ( ! isset( $wp_query ) ) {
_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
return false;
}
return $wp_query->is_home();
}
The following example can be used in your sidebar to display different content when displaying the blog posts index.