Obține URL-ul paginii curente (inclusiv paginația)

1 feb. 2013, 00:05:33
Vizualizări: 75.8K
Voturi: 18

Există o funcție WordPress pentru a obține automat URL-ul corect al paginii curente? Adică dacă tocmai am deschis o postare individuală, funcția să returneze același lucru ca get_permalink(), dar dacă sunt pe o instanță paginată a unei pagini (când navighez prin comentarii), funcția să returneze același lucru pe care l-ar face get_pagenum_link(get_query_var('paged')).

Am căutat în codex dar nu am găsit ceea ce căutam. (Nici măcar get_pagenum_link() nu este documentată acolo.)

Știu deja despre această funcție, dar aș fi bucuros dacă ar exista o funcție WordPress "nativă" care să facă acest lucru.

0
Toate răspunsurile la întrebare 8
1
37

În plus față de răspunsul lui Rajeev Vyas, nu este nevoie să transmiți parametri ne-goali la add_query_arg(). Următoarea metodă a funcționat întotdeauna bine pentru mine:

// URI relativ curent:
$current_rel_uri = add_query_arg( NULL, NULL );

// URI absolut curent (pe un singur site):
$current_uri = home_url( add_query_arg( NULL, NULL ) );

Funcția se bazează pe $_SERVER[ 'REQUEST_URI' ] și aplică urlencode_deep() asupra acestuia. Vezi https://github.com/WordPress/WordPress/blob/3.8/wp-includes/functions.php#L673

Editare: Deoarece $_SERVER[ 'REQUEST_URI' ] reprezintă input utilizator nefiltrat, ar trebui să escapăm întotdeauna valoarea returnată de add_query_arg() când contextul se schimbă. De exemplu, folosește esc_url_raw() pentru utilizare în baza de date sau esc_attr() sau esc_url() pentru HTML.

Actualizare

Exemplul prezentat care ar trebui să creeze un URI absolut (conținând schema și hostul) nu funcționează pe multisite cu subdirectoare, deoarece home_url() ar returna întregul URI inclusiv un segment de cale. O soluție mai bună pentru cod care funcționează în medii multisite ar fi aceasta:

// URI absolut în mediu multisite
$parts = parse_url( home_url() );
$current_uri = "{$parts['scheme']}://{$parts['host']}" . add_query_arg( NULL, NULL );

WordPress nu suportă port, utilizator sau parolă în URL-ul unui site multisite, așa că această soluție ar trebui să fie suficientă.

15 dec. 2013 14:04:44
Comentarii

Frustrant că OP nu a selectat acest răspuns ca Soluție, ceea ce este. Mulțumesc.

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

Nu este o funcție, dar folosește cu siguranță cod WordPress..

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

1 feb. 2013 08:17:45
Comentarii

Funcționează parțial, dar unele lucruri nu funcționează așa cum aș vrea: Parametrii precum year sunt adăugați la șirul de interogare, chiar dacă nu au fost acolo înainte, iar alți parametri, de exemplu parametrul replytocom, se pierd. Cunoști o soluție pentru aceasta?

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

add_query_args( null, null ) va crea un element de array cu cheie goală ($qs[""] = null), deși nu va afecta rezultatul.


Conform add_query_arg() | Funcție | Resurse pentru Dezvoltatori WordPress, al doilea și al treilea parametru sunt opționali și pot fi omiși.

add_query_args( null, null ) poate fi și mai scurt.

$current_url = add_query_args( [] );

Există și cea mai scurtă variantă, deși nu este recomandată, deoarece primul parametru este obligatoriu.

$current_url = add_query_args();

În plus, rețineți că atât home_url( add_query_vars( [] ) ) cât și home_url( add_query_arg( null, null ) ) s-ar putea să nu returneze URL-ul real atunci când WordPress este instalat într-un subdirector.

De exemplu, https://example.com/wp/wp/foo ar putea fi returnat când WordPress este instalat în https://example.com/wp/.


Actualizare: 2017/01/23

Versiunea mea bazată pe soluția lui David pentru a obține URL-ul absolut.

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

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

$uri .= add_query_arg([]);
29 aug. 2016 19:35:32
2

Pentru mine <?php esc_url(the_permalink()); ?> funcționează (pe o pagină de arhivă cu paginare).

6 feb. 2017 10:56:57
Comentarii

Imposibil. the_permalink() afișează permalink-ul escapat, nu returnează nimic. Funcția esc_url() nu primește nimic, iar dacă ar primi, ar fi un URL escapat.

fuxia fuxia
6 feb. 2017 11:38:37

Ai dreptate, cred că a funcționat doar datorită cache-ului pentru permalink.

herrfischer herrfischer
6 feb. 2017 17:33:21
1

1) $_SERVER['REQUEST_URI'] - Returnează URL-ul folosit pentru a accesa pagina care execută scriptul. Dacă trebuie să introduci http://www.example.com/product.php?id=5 pentru a accesa pagina, atunci $_SERVER['REQUEST_URI'] va returna /product.php?id=5.

2) $_SERVER['DOCUMENT_ROOT'] – Returnează directorul rădăcină al serverului, specificat în fișierul de configurare al serverului. Această variabilă de obicei returnează calea ca /usr/yoursite/www în Linux și D:/xamps/xampp/htdocs în Windows.

3) $_SERVER['HTTP_HOST'] – Returnează numele gazdei așa cum este găsit în antetul HTTP. Această variabilă de obicei returnează calea ca example.com când vezi http://example.com în bara de adresă a browserului și returnează www.example.com când vezi http://www.example.com în bara de adresă. Este utilă atunci când trebuie să păstrezi sesiunea în timpul efectuării plăților online folosind PHP, deoarece sesiunea stocată pentru http://example.com nu este aceeași cu cea pentru http://www.example.com.

4) $_SERVER['HTTP_USER_AGENT'] - Returnează detaliile agentului utilizator (browser-ul) care accesează pagina web. Putem folosi strpos($_SERVER["HTTP_USER_AGENT"],"MSIE") pentru a detecta Microsoft Internet Explorer sau strpos($_SERVER["HTTP_USER_AGENT"],"Firefox") pentru a detecta browserul Firefox în PHP.

5) $_SERVER['PHP_SELF'] - Returnează numele fișierului scriptului care rulează în prezent. Să presupunem că accesezi URL-ul http://www.example.com/product.php?id=5, atunci $_SERVER['PHP_SELF'] va returna /product.php în scriptul tău.

6) $_SERVER['QUERY_STRING'] – Returnează șirul de interogare dacă acesta este folosit pentru a accesa scriptul care rulează în prezent. Șirurile de interogare sunt acele stringuri care apar după semnul "?". Dacă folosești $_SERVER['QUERY_STRING'] în scriptul care rulează pentru URL-ul http://www.example.com/index.php?id=5&page=product, atunci va returna id=5&page=product în scriptul tău.

7) $_SERVER['REMOTE_ADDR'] – Returnează adresa IP a mașinii de la distanță care accesează pagina curentă. Dar nu te poți baza pe $_SERVER['REMOTE_ADDR'] pentru a obține adresa IP reală a mașinii clientului. Vezi acest articol pentru a afla cum să obții adresa IP reală în PHP.

8) $_SERVER['SCRIPT_FILENAME'] - Returnează calea absolută a fișierului care rulează în prezent. Returnează o cale precum var/example.com/www/product.php în Linux și o cale precum D:/xampp/xampp/htdocs/test/example.php în Windows.

2 feb. 2014 22:49:58
Comentarii

Ține minte că niciuna dintre acestea nu este disponibilă în CLI-ul tău și, prin urmare, inutilă pentru job-urile cron.

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

Nu știu despre paginare, dar Puteți folosi această funcție pentru a obține URL-ul în cadrul buclei

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

Sau dacă nu preferați să folosiți PHP, puteți opta pentru metoda jQuery aici (aceasta vă va ajuta să o faceți să funcționeze în afara buclei)

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

sau dacă preferați să folosiți o funcție PHP, trebuie să obțineți ID-ul în afara buclei

1 feb. 2013 07:55:02
Comentarii

Îmi pare rău, dar nu este ceea ce am cerut... + the_permalink() nu are nevoie de ID atunci când este apelat în interiorul loop-ului.

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

Acest răspuns a avut foarte puțin de-a face cu întrebarea inițială. Nu a răspuns corect și nici nu a oferit informații valoroase legate de subiect.

jounileander jounileander
4 iul. 2013 11:22:21
1
-1

wp_guess_url este ceea ce cauți.

Ghicește URL-ul pentru site.

Va elimina linkurile către wp-admin pentru a returna doar URL-uri care nu se află în directorul wp-admin.

11 mar. 2013 12:15:23
Comentarii

Aceasta returnează un URL complet diferit față de pagina curentă atunci când am încercat să o folosesc.

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

Puteți utiliza funcția WordPress pentru a obține URL-ul paginii curente

the_permalink()

Aceasta vă va returna linkul URL-ului paginii curente.

26 feb. 2014 12:15:51
Comentarii

Aproape; the_permalink() va afișa URL-ul postului curent. Dar nu va funcționa pentru alte cereri și nu va include variabile precum paginarea. Deci nu este chiar răspunsul pe care @René Schubert îl caută.

TheDeadMedic TheDeadMedic
26 feb. 2014 13:10:24