Ottenere l'URL della pagina corrente (inclusa la paginazione)
Esiste una funzione WordPress per ottenere automaticamente l'URL corretto della pagina corrente?
Cioè se ho appena aperto un singolo post, la funzione restituisce lo stesso risultato di get_permalink()
, ma se mi trovo su un'istanza paginata di una pagina (quando si naviga tra i commenti), la funzione restituisce lo stesso risultato che darebbe get_pagenum_link(get_query_var('paged'))
.
Ho cercato nel codex ma non ho trovato quello che cercavo. (E nemmeno get_pagenum_link()
è documentato lì.)
Conosco già questa funzione, ma sarei felice se ci fosse una funzione WordPress "nativa" che facesse questo lavoro.

In aggiunta alla risposta di Rajeev Vyas, non è necessario passare alcun parametro non vuoto a add_query_arg()
. Il seguente codice ha sempre funzionato bene per me:
// URI relativo corrente:
$current_rel_uri = add_query_arg( NULL, NULL );
// URI assoluto corrente (su sito singolo):
$current_uri = home_url( add_query_arg( NULL, NULL ) );
La funzione fa fallback su $_SERVER[ 'REQUEST_URI' ]
e applica urlencode_deep()
ad esso. Vedi https://github.com/WordPress/WordPress/blob/3.8/wp-includes/functions.php#L673
Modifica:
Poiché $_SERVER[ 'REQUEST_URI' ]
rappresenta un input utente non filtrato, si dovrebbe sempre eseguire l'escape del valore restituito da add_query_arg()
quando il contesto cambia. Ad esempio, usare esc_url_raw()
per utilizzi nel database o esc_attr()
oppure esc_url()
per HTML.
Aggiornamento
L'esempio mostrato che dovrebbe creare un URI assoluto (contenente schema e host) non funziona su multisite con sottodirectory poiché home_url()
restituirebbe l'URI completo includendo un segmento di percorso. Una soluzione migliore per codice compatibile con multisite sarebbe questa:
// URI assoluto in ambiente multisite
$parts = parse_url( home_url() );
$current_uri = "{$parts['scheme']}://{$parts['host']}" . add_query_arg( NULL, NULL );
Il core di WordPress non supporta porta, utente o password nell'URL di un sito multisite, quindi questo dovrebbe essere sufficiente.

global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );
Non è una funzione, ma utilizza sicuramente codice WordPress..

add_query_args( null, null )
creerà un elemento dell'array con una chiave vuota ($qs[""] = null
) anche se non influenzerà il risultato.
Secondo add_query_arg() | Funzione | Risorse per Sviluppatori WordPress, il 2° e il 3° parametro sono opzionali e possono essere omessi.
add_query_args( null, null )
può essere ancora più breve.
$current_url = add_query_args( [] );
Esiste anche la versione più breve anche se non è raccomandata poiché il 1° parametro è obbligatorio.
$current_url = add_query_args();
Inoltre, nota che sia home_url( add_query_vars( [] ) )
che home_url( add_query_arg( null, null ) )
potrebbero non restituire l'URL effettivo quando WordPress è installato in una sottodirectory.
Ad esempio, potrebbe essere restituito https://example.com/wp/wp/foo
quando WordPress è installato in https://example.com/wp/
.
Aggiornamento: 23/01/2017
La mia versione basata sulla soluzione di David per ottenere un URL assoluto.
$parts = parse_url(home_url());
$uri = $parts['scheme'] . '://' . $parts['host'];
if (array_key_exists('port', $parts)) {
$uri .= ':' . $parts['port'];
}
$uri .= add_query_arg([]);

Impossibile. the_permalink()
restituisce il permalink già escapato, non restituisce nulla. La funzione esc_url()
non riceve nulla, e se lo facesse, riceverebbe un URL già escapato.

1) $_SERVER['REQUEST_URI']
- Restituisce l'URL utilizzato per accedere alla pagina che sta eseguendo lo script. Se devi digitare http://www.example.com/product.php?id=5
per accedere alla pagina, allora $_SERVER['REQUEST_URI']
restituirà /product.php?id=5
.
2) $_SERVER['DOCUMENT_ROOT']
– Restituisce la directory radice del server specificata nel file di configurazione del server. Questa variabile solitamente restituisce un percorso come /usr/yoursite/www
su Linux e D:/xamps/xampp/htdocs
su Windows.
3) $_SERVER['HTTP_HOST']
– Restituisce il nome dell'host come trovato nell'header HTTP. Questa variabile solitamente restituisce un percorso come example.com
quando vedi http://example.com
nella barra degli indirizzi del browser e restituisce www.example.com
quando vedi http://www.example.com
nella barra degli indirizzi. È molto utile quando devi mantenere la sessione durante un pagamento online con PHP, poiché la sessione memorizzata per http://example.com
non è la stessa di quella per http://www.example.com
.
4) $_SERVER['HTTP_USER_AGENT']
- Restituisce i dettagli dell'agente utente (browser) che sta accedendo alla pagina web. Possiamo usare strpos($_SERVER["HTTP_USER_AGENT"],”MSIE”)
per rilevare Microsoft Internet Explorer oppure strpos($_SERVER["HTTP_USER_AGENT"],”Firefox”)
per rilevare il browser Firefox in PHP.
5) $_SERVER['PHP_SELF']
- Restituisce il nome del file dello script attualmente in esecuzione. Supponiamo che stai accedendo all'URL http://www.example.com/product.php?id=5
, allora $_SERVER['PHP_SELF']
restituirà /product.php
nel tuo script.
6) $_SERVER['QUERY_STRING']
– Restituisce la query string se viene utilizzata per accedere allo script attualmente in esecuzione. Le query string sono quelle stringhe che appaiono dopo il segno "?". Se usi $_SERVER['QUERY_STRING']
nello script che esegue il seguente URL http://www.example.com/index.php?id=5&page=product
, allora restituirà id=5&page=product
nel tuo script.
7) $_SERVER['REMOTE_ADDR']
– Restituisce l'indirizzo IP della macchina remota che sta accedendo alla pagina corrente. Tuttavia, non puoi fare affidamento su $_SERVER['REMOTE_ADDR']
per ottenere il vero indirizzo IP della macchina del client. Consulta questo articolo per sapere come ottenere il vero indirizzo IP in PHP.
8) $_SERVER['SCRIPT_FILENAME']
- Restituisce il percorso assoluto del file attualmente in esecuzione. Restituisce un percorso come var/example.com/www/product.php
su Linux e un percorso come D:/xampp/xampp/htdocs/test/example.php
su Windows.

Non conosco la paginazione ma Puoi usare questa funzione per ottenere l'URL all'interno del loop
<?php $ID = get_the_ID();
echo get_permalink( $ID ); ?>
In alternativa, se preferisci non usare PHP puoi optare per il metodo jQuery (questo ti aiuterà a farlo funzionare anche fuori dal loop)
$(document).ready(function () {
var vhref = $(location).attr('href');
var vTitle = $(this).attr('title');
$('#spnTitle').html('' + vTitle + '');
$('#spnURL').html('' + vhref + '');
});
Oppure, se preferisci usare una funzione PHP, devi ottenere l'ID fuori dal loop

Scusa, ma non è proprio quello che ho chiesto... + the_permalink()
non ha bisogno dell'id quando viene chiamato all'interno del loop.

wp_guess_url è ciò che stai cercando.
Indovina l'URL del sito.
Rimuoverà i link wp-admin per recuperare solo gli URL che non si trovano nella directory wp-admin.
