Get the title for the posts page in WordPress

This little tidbit is for all you WordPress themers out there.  It is important that your theme displays the proper title on the page no matter what settings a user has on their site.  As you probably are already aware, a user can go to ‘Settings’ -> ‘Reading’ in the WordPress admin menu and change what pages are used for the front page and the posts page (aka blog page).

Set Blog Page in WordPress

So in the example above, I want to set a static page as my homepage and delegate another page to host my blog (aka posts page).  So now that my posts page is no longer the front page, I want to display the page title that the user assigned to that page in my theme.  This helps add clarity for users and makes all of my pages have a more consistent appearance.  As an example, it could be that I am using the posts page for displaying news items and want to label my posts page ‘News’.

Rather than leaving it up to the user to go in and try to hack your theme to get the page title to appear, you decide you want to display this page title for them automatically.

WordPress provides you with the the_title() function, which works great inside the loop.  Problem is, you are using that inside the loop to display the title for all of your blog entries on the page and that won’t do you any good when trying to fetch the page title outside the loop.  If you try to use this function for the page title outside the loop, all you get is the title of the first post on the page.

So how do we fetch the page title for our posts page?

There are two ways to do it.  First is the easy way:

single_post_title();

The only problem you might encounter with this method is that the function echos our title immediately.  If you want to get the title as a variable for any reason, you would have to use output buffering to do it.

You can use the get_the_title() function to get the title of a page as a variable just by providing the ID.  If you don’t provide an ID, then the function will try to fetch the ID for the current page.  Unfortunately, this function doesn’t detect the current page ID properly in our use case, which is why using the_title() function didn’t work for us earlier:  the_title() is just a wrapper function for get_the_title().

Luckily for us, WordPress does store the ID of the page you want to use for the posts page in the database.  So we can fetch the title as a variable, like this:

$our_title = get_the_title( get_option('page_for_posts', true) );

This may be more than you ever needed to know about fetching the title for an assigned posts page, but now you know! ;)

Be Sociable, Share!

Related Posts:

17 thoughts on “Get the title for the posts page in WordPress

  1. I am aware of getting the title of a specific page, searching for static posts page.found this page and used this function for my website.
    thanks

  2. You can actually use single_post_title(); as a variable just by specifying false as the second parameter: $our_title = single_post_title(“”, false);

  3. This is exactly what I’m looking for. Unfortunately, I’m a newb at proper coding…. any advice on where exactly to put that code?

    Thanks!

    1. Stephen, that code is intended to go into the home.php template file. The home.php template file is what handles the blog, whether it is on the front page of the site or not. This code is meant to be used when the blog is not on the front page. This code would go in your h1 tags, or whatever markup you are using, for the page heading.

      1. I’m SO new at this…I don’t see a home.php file when I look in the theme editor in WP or in my files folder on the hosting site. Would it be called something else? maybe single.php? Thx!!

  4. WooWW, thanks alloottttttttt.

    You should have ended up this post by just giving this single_post_title(); function.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>