I'm using the following code to insert the content from another wp page into my main home page.

Is it possible to make it work with a page title instead of an id number?

Eg. Not $page_id = 518 but $page_id = 'about' instead????

$page_id = 518; //Your Page ID
$page_data = get_page( $page_id );
// Displays the title
echo '<h1>'. $page_data->post_title .'</h1>';
// Displays the content
echo apply_filters('the_content', $page_data->post_content);

2 Answers 2


There is a function exactly for that:

get_page_by_title( $page_title, $output = OBJECT, $post_type = 'page' );

You can use it like this:

$page = get_page_by_title( 'Start' );

To get the page from a specific post type:

$custom = get_page_by_title( 'Start', OBJECT, 'your_custom_post_type' );
$post   = get_page_by_title( 'Start', OBJECT, 'post' );

Be aware, this function will search in all post statuses. So you might get a draft, a trashed or private post. You should check the result with:

$status = get_post_status( $page );

if ( 'publish' !== $status )
    return; // do not show unpublished posts

A related function is get_page_by_path():

$page = get_page_by_path( 'about/contact' );

Function get_page_by_title() is deprecated. Use WP_Query instead or try something like this:

     * Retrieves a link to a page object based on page title  
     * @param $title string Page title
     * @return $link Page object permalink
    function get_page_object( $title ) {
       $array_of_objects = get_posts([
            'title' => $title,
            'post_type' => 'page',
        $id = $array_of_objects[0]; 
        $id = $id->ID;
        $link = get_permalink($id); 
        return $link;

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.