Skip to content
Create a gist now

Instantly share code, notes, and snippets.

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 ;
<?php if (is_blog()) { echo 'You are on a blog page'; } ?>

The only stubborn component currently difficult to check for consistently (across all installs) is custom post type indexes.

wesbos commented Sep 2, 2011

@gavinsmith Ah yeah, does is_archive() trigger on CPT archive?

wesbos commented Sep 6, 2011

Updated it to ignore custom post types


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


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

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 ;

toscho commented Oct 12, 2012

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


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

abouolia commented May 3, 2014

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


Awesome. So useful, thanks!


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;



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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.