O WordPress tem algumas funções que retornam a URL da página atual.
Na função abaixo, reuni as funções padrão de forma dinâmica, e um fallback para caso a página visitada seja diferente daquelas previstas.
É possível usar usar em qualquer página do site, que ele vai retornar a URL da página visitada.
/**
* get current page url
*
* @author Difluir
* @link https://difluir.com/
*/
if ( ! function_exists('difluir_get_current_page_url') ) :
function difluir_get_current_page_url() {
// if is front page
if ( is_front_page() ) {
$front_page = get_option( 'page_on_front' );
return ( isset($front_page) && !empty($front_page) ) ? esc_url( get_permalink($front_page) ) : esc_url( home_url('/') );
}
// if is home page (blog posts)
elseif ( is_home() ) {
$page_for_posts = get_option( 'page_for_posts' );
return ( isset($page_for_posts) && !empty($page_for_posts) ) ? esc_url( get_permalink($page_for_posts) ) : esc_url( home_url('/') );
}
// if is category, tag or taxonomy
elseif ( is_category() || is_tag() || is_tax() ) {
$obj_id = get_queried_object_id();
return esc_url( get_term_link( $obj_id ) );
}
// if is author
elseif ( is_author() ) {
$obj_id = get_queried_object_id();
return esc_url( get_author_posts_url( $obj_id ) );
}
// if is a custom post type
elseif ( is_post_type_archive() ) {
$post_type = get_query_var( 'post_type' );
return esc_url( get_post_type_archive_link( $post_type ) );
}
// if is a page or single post
elseif ( is_singular() ) {
return esc_url( get_permalink() );
}
// everything else
else {
global $wp;
$slug = add_query_arg( array(), $wp->request );
return esc_url( home_url( $slug ) );
}
}
endif;
E quando precisar usar, é só chamar a função:
echo '<a href="'.difluir_get_current_page_url().'">Current page URL</a>';