How do I get a post (page or CPT) ID from a title or slug?

I’ve scoured the Codex, failed to get get_page_by_title() to work and am quite surprised that there doesn’t seem to be a standard WP function for this task.

I need to get the ID of any given post/ cpt or page using either the slug of the post/ page title. Ideally I’m looking for the following:

get_post_ID_by_title('My post title', 'customposttype');

What should I be doing?

Solutions Collecting From Web of "How do I get a post (page or CPT) ID from a title or slug?"

you can use this function that jumps by google “get post by title”

* Retrieve a post given its title.
* @uses $wpdb
* @param string $post_title Page title
* @param string $post_type post type ('post','page','any custom type')
* @param string $output Optional. Output type. OBJECT, ARRAY_N, or ARRAY_A.
* @return mixed
function get_post_by_title($page_title, $post_type ='post' , $output = OBJECT) {
    global $wpdb;
        $post = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type= %s", $page_title, $post_type));
        if ( $post )
            return get_post($post, $output);

    return null;

You are missing a function parameter. Throw a null in for the second optional paramter $output and this function should work for you.

get_post_ID_by_title('My post title', null, 'customposttype');

I just ran into the same issue and adding the null fixed it for me.

I tend to shy away from direct DB queries. Instead, I use the WP_Query object to parse things for me.

This is, basically, a function I use in one of my themes to get a post based on a given slug:

function get_post_id( $slug, $post_type ) {
    $query = new WP_Query(
            'name' => $slug,
            'post_type' => $post_type


    return get_the_ID();

This will create a query using the WP API to fetch a post of a specific type with a given slug, will run the regular loop functions on the result, and return the ID of the post. You could also use it to return the entire post by modifying the function a bit, but that’s up to you.

This is a few years old now, but it still pops up when searching for this on Google. So, here’s a simple way to do it:

$page = get_page_by_title( 'my post title' );


$page = get_post_ID_by_title('my post title', OBJECT, 'customposttype');

Then just use the $page object to grab the ID: