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.