Ottenere l'URL della pagina corrente (inclusa la paginazione)

1 feb 2013, 00:05:33
Visualizzazioni: 75.8K
Voti: 18

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.

0
Tutte le risposte alla domanda 8
1
37

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.

15 dic 2013 14:04:44
Commenti

È frustrante che l'OP non abbia selezionato questa risposta come Soluzione, quando invece lo è. Grazie.

cfx cfx
9 ago 2019 19:05:43
1
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );

Non è una funzione, ma utilizza sicuramente codice WordPress..

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

1 feb 2013 08:17:45
Commenti

Funziona in parte, ma alcune cose non funzionano come vorrei: Parametri come year vengono aggiunti alla query string, anche se prima non erano presenti, mentre altri parametri, ad esempio il parametro replytocom, si perdono. Conosci una soluzione per questo?

René René
1 feb 2013 15:32:56
0

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([]);
29 ago 2016 19:35:32
2

Per me <?php esc_url(the_permalink()); ?> funziona (su una pagina di archivio con impaginazione).

6 feb 2017 10:56:57
Commenti

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.

fuxia fuxia
6 feb 2017 11:38:37

Hai ragione, ha funzionato solo grazie alla cache dei permalink credo.

herrfischer herrfischer
6 feb 2017 17:33:21
1

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.

2 feb 2014 22:49:58
Commenti

Tieni presente che nessuna di queste è disponibile nella tua CLI e quindi inutile per i cron job.

kaiser kaiser
26 feb 2014 13:38:11
2
-1

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

1 feb 2013 07:55:02
Commenti

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

René René
1 feb 2013 12:04:53

Questa risposta aveva pochissimo a che fare con la domanda originale. Non ha risposto correttamente né ha fornito informazioni davaluable riguardo all'argomento.

jounileander jounileander
4 lug 2013 11:22:21
1
-1

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.

11 mar 2013 12:15:23
Commenti

Questo restituisce un URL completamente diverso rispetto alla pagina corrente quando ho provato a usarlo.

Kirby Kirby
19 mag 2015 19:10:40
1
-2

Puoi utilizzare la funzione di WordPress per ottenere l'URL della pagina corrente

the_permalink()

Questo restituirà il link dell'URL della pagina corrente.

26 feb 2014 12:15:51
Commenti

Quasi; the_permalink() stamperà l'URL del post corrente. Ma non funzionerà per altre richieste e non includerà variabili come la paginazione. Quindi non è proprio la risposta che @René Schubert sta cercando.

TheDeadMedic TheDeadMedic
26 feb 2014 13:10:24