Como exibir o URL da página atual?

55

Quero adicionar código PHP personalizado para garantir que sempre que uma página do meu site seja carregada no meu navegador, o URL dessa página seja ecoado na tela. Eu posso usar echo get_permalink(), mas isso não funciona em todas as páginas. Algumas páginas (por exemplo, minha página inicial ) exibem várias postagens e, se eu usá get_permalink()-las, o URL da página exibida não é retornado (acredito que retorne o URL da última postagem no loop). Para essas páginas, como posso retornar o URL?

Posso conectar get_permalink()a um gancho específico que é acionado antes da execução do loop? Ou posso, de alguma forma, sair do loop ou redefini-lo quando estiver completo?

Obrigado.

cag8f
fonte
Você pode fornecer algum contexto sobre o que você gostaria de fazer com este URL? Você está tentando criar URLs compartilháveis? Montar URLs personalizados para links / ações?
Tom J Nowell
@ TomJNowell Gostaria de enfileirar um script JS específico, mas apenas em determinadas páginas (nesse caso, essas páginas são a página inicial do meu site em vários idiomas: exemplo.com , exemplo.com/fr , exemplo.com/es , etc). O arquivo JS servirá para adicionar hiperlinks a vários títulos que aparecem apenas na página inicial.
Cag8f
por que não usar is_home()or is_page( 'fr' )etc e enfileirar o script apenas se for verdade?
Tom J Nowell
@ TomJNowell Bem, agora meu código if ( home_url( $wp->request ) == home_url() ) { wp_enqueue_script();} parece ser acionado em todas as páginas iniciais , independentemente do idioma. Era isso que você estava sugerindo?
Cag8f
Por que não usar $_SERVER['REQUEST_URI']e companhia? Veja esta pergunta: stackoverflow.com/q/6768793/247696
Flimm

Respostas:

87

get_permalink() só é realmente útil para páginas e postagens únicas e funciona apenas dentro do loop.

A maneira mais simples que eu já vi é esta:

global $wp;
echo home_url( $wp->request )

$wp->requestinclui a parte do caminho da URL, por exemplo. /path/to/pagee home_url()gera o URL em Configurações> Geral, mas você pode anexar um caminho a ele; portanto, anexamos o caminho da solicitação ao URL inicial neste código.

Observe que isso provavelmente não funcionará com Permalinks definidos como Sem formatação e deixará de fora as cadeias de consulta (a ?foo=barparte da URL).

Para obter o URL quando os links permanentes estiverem definidos como simples, você pode usá-lo $wp->query_vars, passando-o para add_query_arg():

global $wp;
echo add_query_arg( $wp->query_vars, home_url() );

E você pode combinar esses dois métodos para obter o URL atual, incluindo a string de consulta, independentemente das configurações de link permanente:

global $wp;
echo add_query_arg( $wp->query_vars, home_url( $wp->request ) );
Jacob Peattie
fonte
7
Se permalinks definido para simples: echo '//' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];.
precisa
11
@ Jacob Eu tentei isso, mas parece estar retornando apenas o URL da minha página inicial. Como você pode ver no canto superior esquerdo desta página ( dev.horizonhomes-samui.com/properties/hs0540 ), onde inseri o código echo home_url( $wp->request ). Eu assegurei incluir global $wptambém. Os links permanentes não são 'Simples', mas estão definidos como 'Nome da postagem'. Também não vejo erros relevantes de PHP no log. Esta página em particular faz parte do meu site de desenvolvimento, que é bloqueado para os visitantes. Não tenho certeza se isso importa ou não. editar: Na verdade, mantenha esse pensamento - pode ser um erro do usuário. Aguardem ...
cag8f
@ Jacob editar 2: OK, seu código realmente funciona. Meu problema foi que eu estava incluindo o código no functions.php 'naked', ou seja, não em nenhuma função anexada a um gancho. Portanto, seu código estava retornando o URL da página inicial, independentemente da página exibida no meu navegador. Depois que movi o código dentro de uma função - uma função anexada a um gancho WP (wp_enqueue_scripts), ele realmente retornou o URL da página exibida. Você sabe o motivo desse comportamento? Talvez eu precise criar uma nova pergunta para isso.
Cag8f 25/07/19
3
@ cag8f Se o código estiver "nu" em functions.php, você o executará antes que todas as propriedades do objeto $ wp tenham sido configuradas. Quando você o envolve em uma função conectada a um gancho apropriado, você está atrasando sua execução até que um ponto adequado no código do Wordpress seja executado.
Andy Macaulay-Brook
Esses métodos são impressionantes e têm ótimas idéias para trabalhar com o WordPress. Você pode adicionar trailingslashit()a eles, dependendo das suas necessidades.
Jake
8

Você pode usar o código abaixo para obter todo o URL atual no WordPress:

global $wp;
$current_url = home_url(add_query_arg(array(), $wp->request));

Isso mostrará o caminho completo, incluindo parâmetros de consulta.

rescue1155
fonte
Oi - se você der uma olhada em developer.wordpress.org/reference/functions/add_query_arg, verá que seu código não preserva os parâmetros de consulta existentes.
Andy Macaulay-Brook
2
Para preservar os parâmetros de consulta, você precisa substituir o vazio array()por $_GET. ou seja:home_url(add_query_arg($_GET,$wp->request));
Brad Adams
Não vai funcionar se WordPress está instalado no subdiretório
ManzoorWani
1
function current_location()
{
    if (isset($_SERVER['HTTPS']) &&
        ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
        isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
        $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
        $protocol = 'https://';
    } else {
        $protocol = 'http://';
    }
    return $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}

echo current_location();
Shree Sthapit
fonte
Você pode explicar como e por que esse código resolve a questão?
Kero
Na minha opinião, a solução mais flexível. Funciona em qualquer página WP (mesmo em wp-admin, wp-login.php, páginas de arquivamento, etc.). Observe que ele não inclui nenhum parâmetro de URL
Philipp
1

O código a seguir fornecerá o URL atual:

global $wp;
echo home_url($wp->request)

Você pode usar o código abaixo para obter o URL completo junto com os parâmetros de consulta.

global $wp;  
$current_url = home_url(add_query_arg(array($_GET), $wp->request));

Isso mostrará o caminho completo, incluindo parâmetros de consulta. Isso preservará os parâmetros de consulta se já estiver no URL.

Adiyya Tadikamalla
fonte
Esse snippet pula wp-admin/plugins.phpno meu URL atual, é apenas o caminho raiz e as strings de consulta.
Ryszard Jędraszyk
0

Essa é uma maneira aprimorada de exemplo mencionada anteriormente. Ele funciona quando URLs bonitas são ativadas, mas descarta se houver algum parâmetro de consulta como / page-slug /? Param = 1 ou se a URL é feia.

O exemplo a seguir funcionará nos dois casos.

    $query_args = array();

    $query = wp_parse_url( $YOUR_URL );

    $permalink = get_option( 'permalink_structure' );

    if ( empty( $permalink ) ) {

        $query_args = $query['query'];

    }

    echo home_url( add_query_arg( $query_args , $wp->request ) )
tolginho
fonte
0

Talvez wp_guess_url()seja o que você precisa. Disponível desde a versão 2.6.0.

Fluxo
fonte
Isso apenas adivinha o URL base. No frontend, você acaba com um efeito semelhante ao home_url().
Jake
0

Por que não usar apenas?

get_permalink(get_the_ID());
Dario Zadro
fonte