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).
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:
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
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!