Uzyskaj bieżący adres URL strony (w tym podział na strony)

13

Czy jest funkcja WP, która automatycznie pobiera poprawny adres URL bieżącej strony? Oznacza to, że jeśli właśnie otworzyłem pojedynczy post, funkcja zwraca to samo co get_permalink(), ale jeśli znajduję się na paginowanej instancji strony (podczas paginacji poprzez komentarze), funkcja zwraca to samo, co get_pagenum_link(get_query_var('paged'))zrobiłaby.

Przeszukałem kodeks, ale nie znalazłem tego, czego szukałem. (Ale nawet get_pagenum_link()tam nie udokumentowano.)

Wiem już o tej funkcji , ale byłbym zadowolony, gdyby istniała „natywna” funkcja WP.

Z góry dziękuję! Pozdrawiam, René

René Schubert
źródło

Odpowiedzi:

27

Oprócz odpowiedzi Rajeeva Vyasa nie musisz przekazywać żadnych niepustych parametrów do add_query_arg(). Poniższe zawsze działało dla mnie dobrze:

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

Funkcja powraca $_SERVER[ 'REQUEST_URI' ]i ma urlencode_deep()do niej zastosowanie . Zobacz https://github.com/WordPress/WordPress/blob/3.8/wp-includes/functions.php#L673

Edycja: Ponieważ $_SERVER[ 'REQUEST_URI' ]reprezentuje niefiltrowane dane wejściowe użytkownika, należy zawsze unikać wartości zwracanej w add_query_arg()przypadku zmiany kontekstu. Na przykład użyj esc_url_raw()do użycia DB esc_attr()lub esc_url()HTML.

Aktualizacja

Pokazany przykład, który powinien utworzyć bezwzględny identyfikator URI (zawierający schemat i host), nie działa na wielu witrynach z podkatalogami, ponieważ home_url()zwróciłby pełny identyfikator URI zawierający segment ścieżki. Lepszym rozwiązaniem dla kodu obsługującego wiele lokalizacji byłoby:

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

Rdzeń WordPress nie obsługuje portu, użytkownika ani hasła w adresie URL witryny z wieloma witrynami, więc powinno to wystarczyć.

David
źródło
Frustrujące, że OP nie wybrał tej odpowiedzi jako Rozwiązania, którym jest. Dziękuję Ci.
por.
3
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );

Nie jest to funkcja, ale zdecydowanie używa kodu wordpress.

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

Rajeev Vyas
źródło
2
Działa częściowo, ale niektóre rzeczy nie działają tak, jak chcę: parametry takie jak yearsą dodawane do ciągu zapytania, nawet jeśli wcześniej ich tam nie było, a inne parametry, na przykład replytocomparametr, gubią się. Czy znasz na to rozwiązanie?
René Schubert
0

1) $_SERVER['REQUEST_URI']- Zwraca adres URL, aby uzyskać dostęp do strony wykonującej skrypt. Jeśli musisz wpisać, http://www.example.com/product.php?id=5aby uzyskać dostęp do strony, oznacza to $_SERVER['REQUEST_URI']powrót /product.php?id=5.

2) $_SERVER['DOCUMENT_ROOT']- Zwraca katalog główny serwera określony w pliku konfiguracyjnym serwera. Ta zmienna zwykle zwraca ścieżkę jak /usr/yoursite/wwww Linuksie i D:/xamps/xampp/htdocsWindows.

3) $_SERVER['HTTP_HOST']- Zwraca nazwę hosta znalezioną w nagłówku http. Zmienna ta zazwyczaj zwraca ścieżkę jak example.comwtedy, gdy znajdziesz http://example.comsię w przeglądarce adresu bar i powrotu www.example.com, kiedy widzisz http://www.example.comna adres bar. Jest to bardzo przydatne, gdy chcesz zachować sesję podczas dokonywania płatności online za pomocą PHP, ponieważ sesja przechowywana dla http://example.comnie jest taka sama jak dla http://www.example.com.

4) $_SERVER['HTTP_USER_AGENT']- Zwraca dane agenta użytkownika (przeglądarki) uzyskujące dostęp do strony internetowej. Możemy użyć strpos($_SERVER["HTTP_USER_AGENT"],”MSIE”)do wykrycia Microsoft Internet Explorera lub możesz użyć strpos($_SERVER["HTTP_USER_AGENT"],”Firefox”)do wykrycia przeglądarki Firefox w PHP.

5) $_SERVER['PHP_SELF']- Zwraca nazwę pliku aktualnie wykonywanego skryptu. Załóżmy, że uzyskujesz dostęp do adresu URL, http://www.example.com/product.php?id=5a następnie $_SERVER['PHP_SELF']zwraca /product.phpskrypt.

6) $_SERVER['QUERY_STRING']- Zwraca ciąg zapytania, jeśli ciąg zapytania jest używany do uzyskania dostępu do aktualnie wykonywanego skryptu. Ciągi zapytań to te, które są dostępne po „?” sign.Jeśli użyjesz $_SERVER['QUERY_STRING']w skrypcie wykonującym następujący adres URL, http://www.example.com/index.php?id=5&page=productwówczas zwraca on id=5&page=productskrypt.

7) $_SERVER['REMOTE_ADDR']- Zwraca adres IP zdalnego urządzenia uzyskującego dostęp do bieżącej strony. Ale nie można polegać na $_SERVER['REMOTE_ADDR']uzyskaniu prawdziwego adresu IP komputera klienta. Zobacz ten artykuł, aby dowiedzieć się, jak uzyskać prawdziwe dodatki IP w PHP.

8) $_SERVER['SCRIPT_FILENAME']- Zwraca bezwzględną ścieżkę do aktualnie wykonywanego pliku. Zwraca ścieżkę jak var/example.com/www/product.phpw systemie Linux i ścieżkę jak D:/xampp/xampp/htdocs/test/example.phpw systemie Windows.

Foxsk8
źródło
1
Należy pamiętać, że żaden z nich nie jest dostępny w interfejsie CLI, a zatem jest bezużyteczny dla zadań CRON.
kaiser
0

wp_guess_url jest tym, czego szukasz.

Odgadnij adres URL witryny.

Usunie linki wp-admin, aby pobierać tylko zwracane adresy URL spoza katalogu wp-admin.

Jesse
źródło
Zwraca zupełnie inny adres URL niż bieżąca strona, gdy próbowałem go użyć.
Kirby
0

add_query_args( null, null ) utworzy element tablicy z pustym key ( $qs[""] = null), chociaż nie wpłynie to na wynik.


Zgodnie z add_query_arg () | Funkcja | Zasoby dla programistów WordPress , drugi, trzeci parametr są opcjonalne i można je pominąć.

add_query_args( null, null )może być krótszy .

$current_url = add_query_args( [] );

Istnieje również najkrótsza wersja, chociaż nie jest zalecana, ponieważ wymagany jest pierwszy parametr.

$current_url = add_query_args();

Ponadto należy zauważyć, że zarówno home_url( add_query_vars( [] ) )i home_url( add_query_arg( null, null ) ) może nie powrócić rzeczywisty adres URL , gdy WordPress jest zainstalowany w podkatalogu.

np. https://example.com/wp/wp/foomoże zostać zwrócony, gdy WordPress jest zainstalowany https://example.com/wp/.


Aktualizacja: 2017/01/23

Moja wersja oparta na rozwiązaniu Davida, aby uzyskać bezwzględny adres URL.

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

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

$uri .= add_query_arg([]);
Whizark
źródło
0

Dla mnie <?php esc_url(the_permalink()); ?>działa (na stronie archiwum z paginacją).

Henning Fischer
źródło
Niemożliwy. the_permalink()powtarza ucieczkowy link bezpośredni, nic nie zwraca. esc_url()Nie dostanie nic, a jeśli miałoby to byłoby zbiegłym URL.
fuxia
Masz rację, myślę, że działało tylko z powodu buforowania bezpośredniego.
Henning Fischer,
-1

Nie chcę teraz paginacji, ale możesz użyć tej funkcji, aby uzyskać adres URL w pętli

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

Lub jeśli nie wolisz używać php, możesz również wybrać metodę jquery tutaj (pomoże to sprawić, że będzie działać poza pętlą)

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

lub jeśli wolisz korzystać z funkcji php, musisz uzyskać identyfikator poza pętlą

Vaibhav
źródło
1
Przepraszam, ale nie o to prosiłem ... + the_permalink()nie potrzebuje identyfikatora, gdy jest wywoływany w pętli.
René Schubert
2
Ta odpowiedź miała bardzo niewiele wspólnego z pierwotnym pytaniem. Nie odpowiedział na nie poprawnie, ani nie podał żadnych cennych informacji na ten temat.
jounileander
-2

Możesz użyć funkcji wordpress, aby uzyskać bieżący adres URL strony

the_permalink()

Zwróci ci link URL strony curremt.

Vivek Pandey
źródło
4
Prawie; the_permalink()będzie drukować URL bieżącego wątku. Ale to nie będzie działać dla innych żądań i nie będzie zawierać zmiennych takich jak paginacja. Tak naprawdę nie szuka odpowiedzi @ René Schubert.
TheDeadMedic