How can I get the current page name in WordPress?
What PHP code can be used to retrieve the current page name in a WordPress theme?
All the solutions I have seen so far (
the_title()
,
get_page()->post_name
,
get_post()
, etc.) don't work for a page that contains post entries. They will all return the name of the latest blog entry.
Stated another way, assume that you have a page created in WordPress with the name "My News". This page is set as the "post page". Add a couple of posts to the page. Now, what API can be used to retrieve the string "my-news" instead of the name of the latest post?
I've found the following variable which seems to work.
$wp_query->queried_object->post_name
This is actually the URL friendly version of the page name (slug), which is what I was looking for too. This was tested with the default template (Twenty Ten). I'm really not sure why the two variables given below do not work on my site. Thanks to
keatch
for the
print_r()
tip.
Now, why is this information hidden so deep down?
Solutions
My approach to get the slug name of the page:
$slug = basename(get_permalink());
The WordPress global variable
$pagename
should be available for you. I have just tried with the same setup you specified.
$pagename
is defined in the file wp-includes/theme.php, inside the function
get_page_template()
, which is of course is called before your page theme files are parsed, so it is available at any point inside your templates for pages.
-
Although it doesn't appear to be documented, the
$pagenamevar is only set if you use permalinks. I guess this is because if you don't use them, WordPress doesn 't need the page slug, so it doesn't set it up. -
$pagenameis not set if you use the page as a static front page.
-
This is the code inside /wp-includes/theme.php, which uses the solution you pointed out when
$pagenamecan't be set:
--
if ( !$pagename && $id > 0 ) {
// If a static page is set as the front page, $pagename will not be set. Retrieve it from the queried object
$post = $wp_query->get_queried_object();
$pagename = $post->post_name;
}
<?php wp_title(''); ?>
This worked for me.
If I understand correctly, you want to get the page name on a page that has post entries.