Check if current page is the Blog Page

I'm new to WordPress. I am looking for a way to check if current page is the blog page in the code of the header file.

I've checked but I can't find a way. Help me, Pls.

Topic blog blog-page php Wordpress

Category Web


This worked for me... Even if I go inside individual posts blog menu is activated. With this, you can always target the blog page.

[Note: This will work when if your blog is the 'Posts Page'] enter image description here

   <li <?php if(get_post_type() == 'post' )
     {echo 'class="current-menu-item"';} ?> >
       <a href="<?php echo site_url('/blog');?>">
         Blog
       </a>
    </li>

In my opinion, the best solution instead of checking if the page is home or archive or not OR & AND you can simply check the template you use.

For example: I use in my blog posts page this template:

template-blog.php

So, I can distinguish it from any other page as follow:

if( is_page_template('template-blog.php') ) {}

Hope this help.


You can use..

<?php if ( is_single() ) { ?>

Do stuff here

<?php } ?>

to check if it's a single blog post. Or...

<?php if ( is_home() ) { ?>

Do stuff here

<?php } ?>

to check if it's the blog homepage


To get the blog index page, I found that

if ( !is_front_page() && is_home() ) {
  // blog page
}

is not working for me, I had to use the get_option('page_for_posts') function to identify the Blog Page post_id, my answer is

if ( !is_front_page() && is_home() ){  

    if ( empty ( $post_id) ) {
        global $post;
        $post_id =  get_option( 'page_for_posts' );
    }

    //blog page
}

I guess its very simple I was in a same situation and I used the following technique which is to use the page slug.

if( is_page('blog') ) {
echo "This is your blog page"; 
}

But make sure you've not selected homepage to display recent blog posts and you have set a specific page for blogs like blog or news etc, just use that page slug and you'd be fine.


HOMEPAGE

if(is_home() && is_front_page() || is_front_page()): // static or default hompage
 ...
endif;

BLOG

if(is_home() && !is_front_page()): // blog
 ...
endif;

There is a tricky method.

http://example.com/blog

Suppose if your blog page slug is blog, you can use this code.

global $wp_query;
if($wp_query->query['pagename']=='blog'){
// this is blog page
}

If by 'blog page' you meant a static page set as posts page in the Reading:

global $wp_query;

if ( isset( $wp_query ) && (bool) $wp_query->is_posts_page ) {
    //static blog page
}

PS. This solution also works on template_redirect action


You can use the following in your themes functions.php file:

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

And then put this in the file you are checking:

<?php if (is_blog()) { echo 'You are on a blog page'; } ?>

You can use Hooks in your functions.php file to hook the above, to make that appear on every page.


I use this way

// Get body classes as array
$body_classes = get_body_class();
// Check if "blog" class exists in the array
if(in_array("blog", $body_classes)) {
   // Do stuff
}

If by 'blog page' you meant a static page set as posts page in the Reading Settings, then you could check it by doing this:

if ( is_front_page() && is_home() ) {
  // Default homepage
} elseif ( is_front_page() ) {
  // static homepage
} elseif ( is_home() ) {
  // blog page
} else {
  //everyting else
}

When you use is_home() and is_front_page(), you have to use them in the right order to avoid bugs and to test every user configuration.

(Source: Conditional Tags - The Blog Page)

Or simply:

if ( !is_front_page() && is_home() ) {
  // blog page
}

Or more simply (I suppose):

if ( is_home() ) {
  // blog page
}

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.