Skip to content

Instantly share code, notes, and snippets.

@wesbos
Created September 2, 2011 19:32
Show Gist options
  • Star 66 You must be signed in to star a gist
  • Fork 23 You must be signed in to fork a gist
  • Save wesbos/1189639 to your computer and use it in GitHub Desktop.
Save wesbos/1189639 to your computer and use it in GitHub Desktop.
WordPress is_blog()
function is_blog () {
global $post;
$posttype = get_post_type($post );
return ( ((is_archive()) || (is_author()) || (is_category()) || (is_home()) || (is_single()) || (is_tag())) && ( $posttype == 'post') ) ? true : false ;
}
Usage:
<?php if (is_blog()) { echo 'You are on a blog page'; } ?>
@wesbos
Copy link
Author

wesbos commented Sep 6, 2011

Updated it to ignore custom post types

@eggfriedrice
Copy link

Thanks for this function, exactly what I needed today. I can't believe it's not a builtin!

@rutger1140
Copy link

Thanks @wesbos!

@grantnorwood
Copy link

Very helpful, thanks! However, the is_archive() function covers the is_post_type_archive(), is_date(), is_author(), is_category(), is_tag(), and is_tax() functions, so you can safely remove them. See http://core.trac.wordpress.org/browser/tags/3.4.1/wp-includes/query.php#L1572.

The revised function might look like:

/**
 * WordPress' missing is_blog_page() function.  Determines if the currently viewed page is
 * one of the blog pages, including the blog home page, archive, category/tag, author, or single
 * post pages.
 *
 * @return bool
 */
function is_blog_page() {

    global $post;

    //Post type must be 'post'.
    $post_type = get_post_type($post);

    //Check all blog-related conditional tags, as well as the current post type, 
    //to determine if we're viewing a blog page.
    return (
        ( is_home() || is_archive() || is_single() )
        && ($post_type == 'post')
    ) ? true : false ;

}

@thefuxia
Copy link

The ? true : false at the end is not needed. The function will return boolean anyway.

@jacobdubail
Copy link

Does this function register early enough to use it in a pre_get_posts action?

@abouolia
Copy link

abouolia commented May 3, 2014

is_archive! but what about is_search() ?! even this contains on blog posts

@joshuaanderton
Copy link

Awesome. So useful, thanks!

@codename065
Copy link

How about this:

function is_blog(){
        if ( is_front_page() && is_home() ) {
            return false;
        } elseif ( is_front_page() ) {
            return false;
        } elseif ( is_home() ) {
            return get_option( 'page_for_posts' ); // Returns blog page ID
        } else {
            return false;
        }
    }

Ref: https://codex.wordpress.org/Conditional_Tags#The_Blog_Page

@jancbeck
Copy link

Less verbose:

function is_blog() {
    return ( is_author() || is_category() || is_tag() || is_date() || is_home() || is_single() ) && 'post' == get_post_type();
}

I removed is_archive because I am using custom post types and taxonomies.

@AlbertParera
Copy link

How about this?
in fact, is_singular() is the same as if ( is_single() || is_page() || is_attachment() )

if ( is_singular( 'post' ) ) {
	echo 'You are on a blog page'; 
}

@philtune
Copy link

philtune commented Sep 5, 2018

Taking @grantnorwood's code from 2012:

  • The ternary return is unnecessary so let's just return the comparisons.
  • Also, $post_type == 'post' is the cheaper operation so let's put it first.
  • Finally using triple equals as there should be no type conversion.
/**
 * WordPress' missing is_blog_page() function.  Determines if the currently viewed page is
 * one of the blog pages, including the blog home page, archive, category/tag, author, or single
 * post pages.
 *
 * @return bool
 */
function is_blog_page()
{
    global $post;

    // Post type must be 'post'.
    $post_type = get_post_type($post);

    // Check all blog-related conditional tags, as well as the current post type, 
    // to determine if we're viewing a blog page.
    return ( $post_type === 'post' ) && ( is_home() || is_archive() || is_single() );
}

@andrewitomic
Copy link

Has anyone noticed that this fails when there are no posts assigned to a tag or category? $post is NULL when you visit a category/tag archive that has no posts to display. I've been using this for years and seen it on and off - i mostly use this just for page titles, which weren't showing in this case. I never looked into it because usually the categories/tags fill up with posts and it's not an issue! But clients sometimes...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment