Categorias: Code WordPress

Como pegar a URL da página que está sendo visitada, no WordPress

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>';