51

I'm pretty new to WordPress and I was wondering if I could get a page id with its slug. Is it possible please let me know?

7 Answers 7

75

Use get_page_by_path($page_path):

$page = get_page_by_path( 'about' );
echo get_the_title( $page );

This will return a regular post object.
Documentation:
https://developer.wordpress.org/reference/functions/get_page_by_path/
https://developer.wordpress.org/reference/functions/get_the_title/

6
  • What if it's a child page's id I want?
    – freaky
    Commented Jun 13, 2013 at 11:10
  • 2
    @freaky The function takes just the page slug, not the parent slug. Since slugs are unique, you will always get just one page.
    – fuxia
    Commented Jun 13, 2013 at 11:12
  • 3
    Thank you it is working and for child page I had to navigate like hits $page = get_page_by_path( 'about/child' );
    – freaky
    Commented Jun 13, 2013 at 11:15
  • Just to clarify, get_page_by_path uses the post_name field internally, not post_slug.
    – colefner
    Commented Apr 9, 2018 at 19:04
  • 1
    Just to be clear, this uses the page path and not the page name, correct? Then a page named "About us" the argument should be "about-us", correct? with no beginning or trailing slashes?
    – user658182
    Commented Jul 25, 2018 at 16:01
23

I've been using this ..

function get_id_by_slug($page_slug) {
    $page = get_page_by_path($page_slug);
    if ($page) {
        return $page->ID;
    } else {
        return null;
    }
} 

Hope this will help someone.

2
  • Why wrapping it in a function? get_page_by_path already returns null …
    – GDY
    Commented Mar 1, 2019 at 7:42
  • 2
    Because the OP question wants to return ID, not the page object. Commented Oct 16, 2019 at 14:34
11

It has been already asked and answered on this forum. I am pasting the same code from there. Use this function to retrieve page id.

 function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) { 
  global $wpdb; 
   $page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s AND post_status = 'publish'", $page_slug, $post_type ) ); 
     if ( $page ) 
        return get_post($page, $output); 
    return null; 
  }
0
5

There is a function url_to_postid since WordPress v1.0.0 :) This task is easiest to achieve by using this function.

url_to_postid

When page is top-level page, only slug has to be given.

e.g. url_to_postid('slug');

When the page is in lower hierarchy level (i.e. it has parent) you have to prepend parent slug divided by slash like so:

url_to_postid('parent-slug/child-slug');

Edit: if this returns 0, you should flush permalinks (open the wordpress permalinks page in admin) - this is needed only once

3

I had problems with the chosen answer when trying to use the code several times in the same page. It kept on displaying all of my pages content at the same time in every instance. So I went back to thinking and came up with this simpler approach based on the WordPress Codex's documentation:

<?php $query = new WP_Query( array( 'pagename' => 'about-me' ) );
    while ( $query->have_posts() ) {
        $query->the_post();
        echo '<h2>'. get_the_title() .'</h2>';
        the_content();
    }
    wp_reset_postdata();
?>

Maybe it can still be helpful to somebody out there ;D

2

A lot of answers here that seem overly complex, or don't describe how to get the page ID specifically.

            $page = get_page_by_path("your-page-slug");
            if ($page) {
                $page_id =  $page->ID;
                echo $page_id;
            }

In the above description we've assigned the post object to $page - Once you have the post object you can get any of the info described here: https://codex.wordpress.org/Class_Reference/WP_Post

            $page->ID
            $page->post_status
            $page->post_title

and a lot more

0
<?php  function get_page_ID_by_slug( $slug ) {
    $page = get_page_by_path( $slug );
    if ( $page ) {
        return (int) $page->ID;
    }
    else {
        return null;
    }
}
?>

I hope this suggestion is helpful for someone.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.