WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I currently have an ID of a page that I want to use its permalink as the front of a permastruct of a CPT I'm setting up.

Now I can use get_permalink() but that returns the full URL:


but all I want to return is imapage/subpage/subsubpage

Is there a function that can do this or do I have to device something that can subtract the non-needed part of the url?

share|improve this question
up vote 7 down vote accepted

There's nothing built in to return the bit you want but it should be as easy as using the home_url() function and removing it's output from the full url eg:

function get_relative_permalink( $url ) {
    return str_replace( home_url(), "", $url );
share|improve this answer
I came to the same bit of code but was hoping for some function already in core that returns it the way I want. – Brady Nov 2 '11 at 17:29

You won't be able to use get_permalink() for that.

If you dig into the code for that function in /wp-includes/link-template.php you'll see why. After the permalink structure is parsed and prepared, the code does this:

$permalink = home_url( str_replace($rewritecode, $rewritereplace, $permalink) );

This is performed immediately after the structure of the link is created and before anything is passed through a useful filter.

So unfortunately, you'll have to extract the non-needed part of the URL yourself. I'd recommend using the str_replace() function that @sanchothefat suggested.

share|improve this answer

$path = parse_url(get_permalink(...), PHP_URL_PATH); ... gives the URL PATH only. This is not relative to blog root but to domain. It's the absolute URI.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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