14

I'm trying to get page content when I only know the slug string.

Is there a function for this, or an easy way to do this or is this a case of doing it via SQL?

Thanks very much

4 Answers 4

37

Use get_posts() and the parameter name which is the slug:

$page = get_posts([ 'name' => 'your-slug' ]);

if ( $page )
{
    echo $page[0]->post_content;
}

Be aware that the post type in get_posts() defaults to 'post'. If you want a page use …

$page = get_posts([
    'name'      => 'your-slug',
    'post_type' => 'page'
]);

If you want all public post types (except attachments) set the post type argument to 'any'. Then you could get more than one result because slugs are not unique across different post types.

5

You can get a page by its title using get_page_by_title() function.

You can use it like this (assuming you want to show the content):

$page = get_page_by_title('Your Title'); 
$content = apply_filters('the_content', $page->post_content);
echo $content;

BTW, to Get page using slug:

function get_page_id_by_slug($slug){
    global $wpdb;
    $id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = '".$slug."'AND post_type = 'page'");
    return $id;
}

$page = get_post(get_page_id_by_slug('my-slug'));
5

If on the page with the slug in question

Read up on conditional tags:
is_page() also takes the slug as an argument.

Hence,

if( is_page( 'your-slug' ) ) {
     // fetch content
}

will do what you want.

If on another page

Should you be interested on how to fetch post/page content based on a slug when not on said page, you can feed get_posts a slug as well. This is not documented in the codex.

The following will fetch the id from a slug:

$args = array(
    'name' => 'your-slug'
);
$posts_from_slug = get_posts( $args );

// echo fetched content
echo $posts_from_slug[0]->post_content;
3

Use get_page_by_path to retrieve the WP_Post object, then you can extract the post content and filter for HTML output if necessary.

Syntax

get_page_by_path( string $page_path, string $output = OBJECT, string|array $post_type = 'page' )

Example:

I use this code when populating a theme template from a page, to ensure the content is rendered as HTML:

<?php
$about = get_page_by_path('about'); 
$content = apply_filters( 'the_content', $about->post_content ); 
echo $content;
?>

To get a post of a different type, pass in the other two parameters:

get_page_by_path('cat', OBJECT, 'animal');

for more reference see WordPress Function Reference

Parameters

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.