Wordpress - Get page permalink without wpurl

There's actually a core function for this now. wp_make_link_relative($url)

Convert full URL paths to relative paths.

Removes the http or https protocols and the domain. Keeps the path '/' at the beginning, so it isn't a true relative link, but from the web root base.

Example

<?php echo wp_make_link_relative('http://localhost/wp_test/sample-page/'); ?>

This will output /wp_test/sample-page/

Example with Post ID <?php echo wp_make_link_relative(get_permalink( $post->ID )); ?>

Example for current post <?php echo wp_make_link_relative(get_permalink()); ?>

More about this can be found in the documentation.


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 );
}

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.

Tags:

Permalinks