Obține URL-ul paginii curente (inclusiv paginația)
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.

Î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ă.

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..

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([]);

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.

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

Î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.

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.
