Obter o URL da página atual (incluindo paginação)

13

Existe uma função WP para obter automaticamente o URL correto da página atual? Ou seja, se eu apenas abrisse uma única postagem, a função retornaria o mesmo que get_permalink(), mas se eu estiver em uma instância paginada de uma página (ao paginar pelos comentários), a função retornará o mesmo que retornaria get_pagenum_link(get_query_var('paged')).

Eu procurei no códice, mas não encontrei o que estava procurando. (Mas ainda get_pagenum_link()não está documentado lá.)

Eu já conheço essa função , mas ficaria feliz se houvesse uma função WP "nativa" que faça o trabalho.

Desde já, obrigado! Atenciosamente, René

René Schubert
fonte

Respostas:

27

Além da resposta de Rajeev Vyas, você não precisa passar parâmetros não vazios para add_query_arg(). O seguinte sempre funcionou bem para mim:

// relative current URI:
$current_rel_uri = add_query_arg( NULL, NULL );

// absolute current URI (on single site):
$current_uri = home_url( add_query_arg( NULL, NULL ) );

A função retorna $_SERVER[ 'REQUEST_URI' ]e se aplica urlencode_deep()a ela. Consulte https://github.com/WordPress/WordPress/blob/3.8/wp-includes/functions.php#L673

Editar: como $_SERVER[ 'REQUEST_URI' ]representa a entrada não filtrada do usuário, deve-se sempre escapar do valor de retorno add_query_arg()quando o contexto for alterado. Por exemplo, use esc_url_raw()para uso de banco de dados ou esc_attr()ou esc_url()para HTML.

Atualizar

O exemplo mostrado que deve criar um URI absoluto (contendo esquema e host) não funciona em vários locais com subdiretórios, pois home_url()retornaria o URI completo, incluindo um segmento de caminho. Uma solução melhor para código com reconhecimento de vários sites seria esta:

// absolute URI in multisite aware environment
$parts = parse_url( home_url() );
$current_uri = "{$parts['scheme']}://{$parts['host']}" . add_query_arg( NULL, NULL );

O núcleo do WordPress não suporta porta, usuário ou senha em uma URL de site multissite, portanto isso deve ser suficiente.

David
fonte
Frustrante que o OP não tenha selecionado essa resposta como a Solução, qual é. Obrigado.
cfx 9/08/19
3
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );

Não é uma função, mas definitivamente usando o código wordpress ..

http://kovshenin.com/2012/current-url-in-wordpress/

Rajeev Vyas
fonte
2
Funciona parcialmente, mas algumas coisas não funcionam como eu as quero: parâmetros como yearsão adicionados à string de consulta, mesmo que eles não existam antes, e outros parâmetros, por exemplo, o replytocomparâmetro, se perdem. Você conhece uma solução para isso?
René Schubert
0

1) $_SERVER['REQUEST_URI']- Retorna a URL para acessar a página que está executando o script. Se você precisar digitar http://www.example.com/product.php?id=5para acessar a página, $_SERVER['REQUEST_URI']retornará /product.php?id=5.

2) $_SERVER['DOCUMENT_ROOT']- Retorna o diretório raiz do servidor especificado no arquivo de configuração do servidor. Essa variável geralmente retorna o caminho como /usr/yoursite/wwwno Linux e D:/xamps/xampp/htdocsno Windows.

3) $_SERVER['HTTP_HOST']- Retorna o nome do host conforme encontrado no cabeçalho http. Essa variável geralmente retorna o caminho como example.comquando você encontra http://example.comna barra de endereços do navegador e retorna www.example.comquando você vê http://www.example.comna barra de endereços. Isso é bastante útil quando você precisa preservar a sessão enquanto faz o pagamento on-line usando PHP, pois a sessão armazenada para http://example.comnão é a mesma que para o http://www.example.com.

4) $_SERVER['HTTP_USER_AGENT']- Retorna os detalhes do agente do usuário (navegador) acessando a página da web. Podemos usar strpos($_SERVER["HTTP_USER_AGENT"],”MSIE”)para detectar o Microsoft Internet Explorer ou você pode strpos($_SERVER["HTTP_USER_AGENT"],”Firefox”)detectar o navegador firefox em PHP.

5) $_SERVER['PHP_SELF']- Retorna o nome do arquivo do script atualmente em execução. Vamos supor que você esteja acessando a URL http://www.example.com/product.php?id=5e $_SERVER['PHP_SELF']retorne /product.phpem seu script.

6) $_SERVER['QUERY_STRING']- Retorna a string de consulta se a string de consulta for usada para acessar o script atualmente em execução. As cadeias de consulta são aquelas que estão disponíveis após "?" sign.if você usar $_SERVER['QUERY_STRING']no script executando o seguinte URL http://www.example.com/index.php?id=5&page=product, ele retornará id=5&page=productno seu script.

7) $_SERVER['REMOTE_ADDR']- Retorna o endereço IP da máquina remota acessando a página atual. Mas você não pode confiar $_SERVER['REMOTE_ADDR']para obter o endereço IP real da máquina do cliente. Veja este artigo para saber como obter endereços IP reais em PHP.

8) $_SERVER['SCRIPT_FILENAME']- Retorna o caminho absoluto do arquivo que está sendo executado no momento. Ele retorna o caminho como var/example.com/www/product.phpno Linux e o caminho D:/xampp/xampp/htdocs/test/example.phpno Windows.

Foxsk8
fonte
1
Lembre-se de que nenhum deles está disponível na sua CLI e, portanto, é inútil para tarefas cron.
Kaiser
0

wp_guess_url é o que você está procurando.

Adivinhe a URL do site.

Remove os links wp-admin para recuperar apenas os URLs de retorno que não estão no diretório wp-admin.

Jesse
fonte
Isso retorna um URL totalmente diferente, além da página atual, quando tentei usá-lo.
21915 Kirby
0

add_query_args( null, null ) criará um elemento de matriz com a chave vazia ( $qs[""] = null), embora não afete o resultado.


De acordo com add_query_arg () | Função | Os Recursos para desenvolvedores do WordPress , os segundo e terceiro parâmetros são opcionais e podem ser omitidos.

add_query_args( null, null )pode ser mais curto .

$current_url = add_query_args( [] );

Também existe a versão mais curta, embora não seja recomendada, pois o 1º parâmetro é o parâmetro necessário.

$current_url = add_query_args();

Além disso, nota que tanto home_url( add_query_vars( [] ) )e home_url( add_query_arg( null, null ) ) pode não retornar URL real quando WordPress está instalado em um sub-diretório.

por exemplo, https://example.com/wp/wp/foopode ser retornado quando o WordPress estiver instalado https://example.com/wp/.


Atualização: 23/01/2017

Minha versão baseada na solução de David para obter URL absoluta.

$parts = parse_url(home_url());
$uri   = $parts['scheme'] . '://' . $parts['host'];

if (array_key_exists('port', $parts)) {
    $uri .= ':' . $parts['port'];
}

$uri .= add_query_arg([]);
Whizark
fonte
0

Para mim <?php esc_url(the_permalink()); ?>funciona (em uma página de arquivo com paginação).

Henning Fischer
fonte
Impossível. the_permalink()ecoa o permalink escapado, ele não retorna nada. O esc_url()arquivo não recebe nada e, se receber, seria um URL de escape.
fuxia
Você está certo, funcionou apenas por causa do cache de links permanentes, eu acho.
Henning Fischer
-1

Agora não faço paginação, mas você pode usar esta função para obter URL dentro do loop

<?php $ID = get_the_ID(); 
echo get_permalink( $ID ); ?>

Ou então, se você não preferir usar o php, também pode optar pelo método jquery aqui (isso ajudará você a fazê-lo funcionar fora do loop)

$(document).ready(function () {
var vhref = $(location).attr('href');
var vTitle = $(this).attr('title');
$('#spnTitle').html('' + vTitle + '');
$('#spnURL').html('' + vhref + '');
});​

ou se você preferir usar a função php, você precisa obter o ID fora do loop

vaibhav
fonte
1
Desculpe, mas isso não é o que eu pedi ... + the_permalink()não precisa do ID quando é chamado dentro do loop.
René Schubert
2
Essa resposta teve muito pouco a ver com a pergunta original. Não respondeu corretamente nem realmente forneceu informações valiosas sobre o tópico.
Jounileander 04/07
-2

Você pode usar a função wordpress para obter o URL da página atual

the_permalink()

Isso retornará o link do URL da página atual.

Vivek Pandey
fonte
4
Quase; the_permalink()irá imprimir o URL do post atual. Mas não funcionará para outras solicitações e não incluirá variáveis ​​como paginação. Portanto, não é realmente a resposta que René Schubert está procurando.
TheDeadMedic