Obtenha o Permalink sem domínio (ou seja, obtenha permalink relativo) [duplicado]

9

Este é o código que estou usando:

<?php echo str_replace( home_url(), '', get_permalink($post->ID) ); ?>

O que ele faz é enviar o permalink como um URL relativo, ou seja, apenas o slug. Por exemplo, se o permalink for http://example.com/2012/01/post-title/ , a saída relativa da URL pelo código será parecida com /2012/01/post-title/ .

Problema: Todas as postagens e páginas mostram o permalink correto, o que é ótimo. Mas todas as outras páginas (incluindo Página inicial, Pesquisa e Arquivos) mostram o URL relativo do primeiro post e não o das respectivas páginas. Alguma ideia do porquê? O que estou fazendo errado aqui?

Referência: Obtenha o permalink da página sem wpurl

EDIT: Veja o que mais eu tentei:

Em functions.php

function get_relative_permalink( $url ) {
    $url = get_permalink();
    return str_replace( home_url(), "", $url );
}

No header.php

<link rel="alternate" hreflang="en-IN" href="http://in.example.com/<?php echo get_relative_permalink(); ?>" />

O mesmo problema com isso também. Mas este também mostra um erro não tão informativo.

    
por its_me 28.08.2012 / 15:09

3 respostas

7

Use $_SERVER['REQUEST_URI'] em vez de get_permalink() para capturar o URL atual.

por exemplo. por example.com/test/page echo $_SERVER['REQUEST_URI']; imprime /test/page

    
por Tom J Nowell 28.08.2012 / 15:46
6

eu uso

str_replace(home_url(), '', get_permalink()); 

Se a raiz do site não for /

    
por Tymek 31.10.2013 / 23:40
0

Isso funciona para mim:

function force_relative_url ($url)
{
    return preg_replace ('/^(http)?s?:?\/\/[^\/]*(\/?.*)$/i', '$2', '' . $url);
}

Para usá-lo em um link permanente:

$relative_permalink = force_relative_url (get_permalink ($post->ID));
    
por gregn3 22.04.2016 / 17:05

Tags