Ottieni l'URL della pagina corrente (inclusa l'impaginazione)


13

Esiste una funzione WP per ottenere automaticamente l'URL corretto della pagina corrente? Significa che se ho appena aperto un singolo post, la funzione restituisce lo stesso di get_permalink(), ma se mi trovo su un'istanza impaginata di una pagina (quando si impagina attraverso i commenti), la funzione restituisce lo stesso come get_pagenum_link(get_query_var('paged'))farebbe.

Ho cercato il codice ma non ho trovato quello che cercavo. (Ma get_pagenum_link()non è nemmeno documentato lì.)

Conosco già questa funzione , ma sarei felice se ci fosse una funzione WP "nativa" che fa il lavoro.

Grazie in anticipo! Saluti, René

Risposte:


27

Oltre alla risposta di Rajeev Vyas, non è necessario passare alcun parametro non vuoto a add_query_arg(). Quanto segue ha sempre funzionato bene per me:

// 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 ) );

La funzione si riaccende $_SERVER[ 'REQUEST_URI' ]e si applica urlencode_deep()ad essa. Vedi https://github.com/WordPress/WordPress/blob/3.8/wp-includes/functions.php#L673

Modifica: poiché $_SERVER[ 'REQUEST_URI' ]rappresenta l'input dell'utente non filtrato, si dovrebbe sempre sfuggire al valore restituito di add_query_arg()quando il contesto viene modificato. Ad esempio, utilizzare esc_url_raw()per l'utilizzo del DB o esc_attr()o esc_url()per HTML.

Aggiornare

L'esempio mostrato che dovrebbe creare un URI assoluto (contenente schema e host) non funziona su più siti con sottodirectory poiché home_url()restituirebbe l'URI completo, incluso un segmento di percorso. Una soluzione migliore per il codice compatibile con più siti sarebbe questa:

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

Il core di WordPress non supporta la porta, l'utente o la password in un URL di un sito multisito, quindi questo dovrebbe essere sufficiente.


Frustrante che OP non abbia selezionato questa risposta come Soluzione, quale è. Grazie.
cfx

3
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );

Non una funzione, ma sicuramente usando il codice wordpress ..

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


2
Funziona in parte, ma alcune cose non funzionano come le voglio io: parametri come yearvengono aggiunti alla stringa di query, anche se non sono mai stati lì prima, e altri parametri, ad esempio il replytocomparametro, si perdono. Conosci una soluzione per questo?
René Schubert,

0

1) $_SERVER['REQUEST_URI']- Restituisce l'URL per accedere alla pagina che sta eseguendo lo script. Se è necessario digitare http://www.example.com/product.php?id=5per accedere alla pagina, $_SERVER['REQUEST_URI']ritorna /product.php?id=5.

2) $_SERVER['DOCUMENT_ROOT']- Restituisce la directory principale del server specificata nel file di configurazione del server. Questa variabile di solito restituisce il percorso come /usr/yoursite/wwwin Linux e D:/xamps/xampp/htdocsin Windows.

3) $_SERVER['HTTP_HOST']- Restituisce il nome dell'host come si trova nell'intestazione http. Questa variabile di solito restituisce il percorso come example.comquando trovi http://example.comnella barra degli indirizzi del browser e ritorna www.example.comquando vedi http://www.example.comnella barra degli indirizzi. Questo è molto utile quando devi conservare la sessione mentre effettui un pagamento online usando PHP poiché la sessione memorizzata http://example.comnon è la stessa di http://www.example.com.

4) $_SERVER['HTTP_USER_AGENT']- Restituisce i dettagli dell'agente utente (browser) accedendo alla pagina Web. Possiamo usare strpos($_SERVER["HTTP_USER_AGENT"],”MSIE”)per rilevare Microsoft Internet Explorer o puoi usare strpos($_SERVER["HTTP_USER_AGENT"],”Firefox”)per rilevare il browser Firefox in PHP.

5) $_SERVER['PHP_SELF']- Restituisce il nome file dello script attualmente in esecuzione. Supponiamo che tu acceda all'URL e http://www.example.com/product.php?id=5poi $_SERVER['PHP_SELF']ritorni /product.phpnel tuo script.

6) $_SERVER['QUERY_STRING']- Restituisce la stringa di query se la stringa di query viene utilizzata per accedere allo script attualmente in esecuzione. Le stringhe di query sono quelle stringhe disponibili dopo "?" sign.se si utilizza $_SERVER['QUERY_STRING']nello script eseguendo il seguente URL, http://www.example.com/index.php?id=5&page=productquindi viene restituito id=5&page=productnello script.

7) $_SERVER['REMOTE_ADDR']- Restituisce l'indirizzo IP della macchina remota che accede alla pagina corrente. Ma non puoi fare affidamento $_SERVER['REMOTE_ADDR']per ottenere il vero indirizzo IP del computer client. Vedi questo articolo per sapere come ottenere veri addipendenti IP in PHP.

8) $_SERVER['SCRIPT_FILENAME']- Restituisce il percorso assoluto del file che è attualmente in esecuzione. Restituisce il percorso come var/example.com/www/product.phpin Linux e il percorso come D:/xampp/xampp/htdocs/test/example.phpin Windows.


1
Tieni presente che nessuno di questi è disponibile nella tua CLI e quindi inutile per i lavori cron.
Kaiser,

0

wp_guess_url è quello che stai cercando.

Indovina l'URL del sito.

Rimuoverà i collegamenti wp-admin per recuperare solo gli URL di ritorno che non si trovano nella directory wp-admin.


Questo restituisce un URL totalmente diverso da quello della pagina corrente quando ho provato ad usarlo.
Kirby,

0

add_query_args( null, null ) creerà un elemento array con chiave vuota ( $qs[""] = null) sebbene non influisca sul risultato.


Secondo add_query_arg () | Funzione | Risorse per sviluppatori WordPress , il 2o, 3o parametro sono opzionali e possono essere omessi.

add_query_args( null, null )può essere più breve .

$current_url = add_query_args( [] );

Esiste anche la versione più breve sebbene non sia raccomandata poiché il primo parametro è il parametro richiesto.

$current_url = add_query_args();

Inoltre, tieni presente che entrambi home_url( add_query_vars( [] ) )e home_url( add_query_arg( null, null ) ) potrebbero non restituire l'URL effettivo quando WordPress è installato in una sottodirectory.

ad esempio, https://example.com/wp/wp/foopotrebbe essere restituito quando WordPress è installato in https://example.com/wp/.


Aggiornamento: 2017/01/23

La mia versione basata sulla soluzione di David per ottenere l'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([]);

0

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


Impossibile. the_permalink()fa eco al permalink evaso, non restituisce nulla. Il esc_url()non ottiene nulla, e se sarebbe, sarebbe un URL sfuggito.
fuxia

Hai ragione, ha funzionato solo a causa della memorizzazione nella cache del permalink, penso.
Henning Fischer,

-1

Ora non impaginazione ma è possibile utilizzare questa funzione per ottenere l'URL all'interno del ciclo

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

Altrimenti se non preferisci usare php puoi anche optare per il metodo jquery qui (questo ti aiuterà a farlo funzionare al di fuori del ciclo)

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

o se preferisci usare la funzione php devi ottenere l'id al di fuori del ciclo


1
Ci dispiace, ma questo non è proprio quello che ho chiesto ... + the_permalink()non ha bisogno dell'id quando viene chiamato all'interno del loop.
René Schubert,

2
Questa risposta aveva ben poco a che fare con la domanda originale. Non ha risposto correttamente né ha fornito informazioni preziose sull'argomento.
jounileander,

-2

È possibile utilizzare la funzione wordpress per ottenere l'URL della pagina corrente

the_permalink()

Questo ti restituirà il link URL della pagina corrente.


4
Quasi; the_permalink()sarà stampare l'URL del post corrente. Ma non funzionerà per altre richieste e non includerà variabili come l'impaginazione. Quindi non proprio la risposta @ René Schubert sta cercando.
TheDeadMedic il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.