Aktuelle Seiten-URL abrufen (einschließlich Paginierung)

13

Gibt es eine WP-Funktion, um automatisch die richtige URL der aktuellen Seite abzurufen? Das heißt, wenn ich gerade einen einzelnen Beitrag geöffnet habe, gibt die Funktion dasselbe zurück wie get_permalink(), aber wenn ich mich auf einer paginierten Instanz einer Seite befinde (wenn ich durch die Kommentare paginiere), gibt die Funktion dasselbe zurück, wie get_pagenum_link(get_query_var('paged'))es der Fall wäre.

Ich habe den Codex durchsucht, aber nicht gefunden, wonach ich gesucht habe. (Ist get_pagenum_link()dort aber auch nicht dokumentiert.)

Ich kenne diese Funktion bereits, würde mich aber freuen, wenn es eine "native" WP-Funktion geben würde, die diese Aufgabe übernimmt.

Danke im Voraus! Grüße, René

René Schubert
quelle

Antworten:

27

Zusätzlich zur Antwort von Rajeev Vyas müssen Sie keine nicht leeren Parameter an übergeben add_query_arg(). Folgendes hat bei mir immer gut funktioniert:

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

Die Funktion $_SERVER[ 'REQUEST_URI' ]greift zurück und gilt urlencode_deep()für sie. Siehe https://github.com/WordPress/WordPress/blob/3.8/wp-includes/functions.php#L673

Bearbeiten: Da es sich $_SERVER[ 'REQUEST_URI' ]um eine ungefilterte Benutzereingabe handelt, sollte der Rückgabewert immer von dem Wert abweichen, add_query_arg()wenn der Kontext geändert wird. Verwenden Sie beispielsweise esc_url_raw()für die DB-Verwendung oder esc_attr()oder esc_url()für HTML.

Aktualisieren

Das angezeigte Beispiel, das einen absoluten URI erstellen sollte (der Schema und Host enthält), funktioniert nicht auf Multisite-Verzeichnissen mit Unterverzeichnissen, da home_url()der vollständige URI einschließlich eines Pfadsegments zurückgegeben würde. Eine bessere Lösung für Multisite-fähigen Code wäre:

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

Der WordPress-Core unterstützt keine Ports, Benutzer oder Kennwörter in einer URL mit mehreren Sites. Dies sollte also ausreichen.

David
quelle
Frustrierend, dass OP diese Antwort nicht als die Lösung ausgewählt hat, die es ist. Vielen Dank.
CFX
3
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );

Keine Funktion, aber definitiv mit WordPress-Code.

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

Rajeev Vyas
quelle
2
Es funktioniert teilweise, aber einige Dinge funktionieren nicht so, wie ich es möchte: Parameter wie yearwerden der Abfragezeichenfolge hinzugefügt, obwohl sie vorher noch nicht vorhanden waren, und andere Parameter, z. B. der replytocomParameter, gehen verloren. Kennen Sie eine Lösung dafür?
René Schubert
0

1) $_SERVER['REQUEST_URI']- Gibt die URL für den Zugriff auf die Seite zurück, auf der das Skript ausgeführt wird. Wenn Sie http://www.example.com/product.php?id=5eingeben müssen, um auf die Seite zuzugreifen, $_SERVER['REQUEST_URI']kehren Sie zurück /product.php?id=5.

2) $_SERVER['DOCUMENT_ROOT']- Gibt das Stammverzeichnis des Servers zurück, das in der Konfigurationsdatei des Servers angegeben ist. Diese Variable gibt normalerweise den Pfad wie /usr/yoursite/wwwin Linux und D:/xamps/xampp/htdocsin Windows zurück.

3) $_SERVER['HTTP_HOST']- Gibt den Hostnamen zurück, der im http-Header enthalten ist. Diese Variable gibt normalerweise den Pfad so , example.comwenn die Sie finden http://example.comin Browser-Adressleiste und Rückkehr , www.example.comwenn Sie sehen http://www.example.comin der Adressleiste. Dies ist sehr nützlich, wenn Sie die Sitzung bei der Online-Zahlung mit PHP beibehalten möchten, da die für gespeicherte Sitzung http://example.comnicht mit der für die Sitzung identisch ist http://www.example.com.

4) $_SERVER['HTTP_USER_AGENT']- Gibt die Details des Benutzeragenten (Browsers) zurück, der auf die Webseite zugreift. Wir können strpos($_SERVER["HTTP_USER_AGENT"],”MSIE”)Microsoft Internet Explorer erkennen oder Sie können strpos($_SERVER["HTTP_USER_AGENT"],”Firefox”)Firefox-Browser in PHP erkennen.

5) $_SERVER['PHP_SELF']- Gibt den Dateinamen des aktuell ausgeführten Skripts zurück. Angenommen, Sie greifen auf die URL zu http://www.example.com/product.php?id=5und $_SERVER['PHP_SELF']kehren /product.phpin Ihrem Skript zurück.

6) $_SERVER['QUERY_STRING']- Gibt die Abfragezeichenfolge zurück, wenn für den Zugriff auf das aktuell ausgeführte Skript eine Abfragezeichenfolge verwendet wird. Abfragezeichenfolgen sind Zeichenfolgen, die nach dem Zeichen "?" Verfügbar sind. Wenn Sie $_SERVER['QUERY_STRING']im Skript die folgende URL ausführen, wird http://www.example.com/index.php?id=5&page=productsie id=5&page=productin Ihrem Skript zurückgegeben.

7) $_SERVER['REMOTE_ADDR']- Gibt die IP-Adresse des Remote-Computers zurück, der auf die aktuelle Seite zugreift. Sie können sich jedoch nicht darauf verlassen $_SERVER['REMOTE_ADDR'], die tatsächliche IP-Adresse des Client-Computers zu ermitteln. In diesem Artikel erfahren Sie, wie Sie echte IP-Adressen in PHP erhalten.

8) $_SERVER['SCRIPT_FILENAME']- Gibt den absoluten Pfad der aktuell ausgeführten Datei zurück. Es gibt den Pfad wie var/example.com/www/product.phpin Linux und den Pfad wie D:/xampp/xampp/htdocs/test/example.phpin Windows zurück.

Foxsk8
quelle
1
Beachten Sie, dass keines davon in Ihrer CLI verfügbar und daher für Cron-Jobs unbrauchbar ist.
Kaiser
0

wp_guess_url ist das, wonach Sie suchen.

Errate die URL für die Site.

Entfernt wp-admin-Links, um nur die zurückgegebenen URLs abzurufen, die sich nicht im wp-admin-Verzeichnis befinden.

Jesse
quelle
Dies gibt eine völlig andere URL zurück als die aktuelle Seite, als ich sie verwendet habe.
Kirby
0

add_query_args( null, null ) erstellt ein Array-Element mit leerem Schlüssel ( $qs[""] = null), obwohl es das Ergebnis nicht beeinflusst.


Entsprechend add_query_arg () | Funktion | WordPress Developer Resources , der 2. und 3. Parameter sind optional und können weggelassen werden.

add_query_args( null, null )kann kürzer sein .

$current_url = add_query_args( [] );

Es gibt auch die kürzeste Version , die jedoch nicht empfohlen wird, da der 1. Parameter der erforderliche Parameter ist.

$current_url = add_query_args();

Beachten Sie außerdem, dass sowohl home_url( add_query_vars( [] ) )als auchhome_url( add_query_arg( null, null ) ) möglicherweise nicht die tatsächliche URL zurückgeben, wenn WordPress in einem Unterverzeichnis installiert ist.

zB https://example.com/wp/wp/fookönnte zurückgegeben werden, wenn WordPress in installiert ist https://example.com/wp/.


Aktualisierung: 23.01.2017

Meine Version basiert auf der Lösung von David, um die absolute URL zu erhalten.

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

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

$uri .= add_query_arg([]);
Whizark
quelle
0

Bei mir <?php esc_url(the_permalink()); ?>funktioniert das (auf einer Archivseite mit Paginierung).

Henning Fischer
quelle
Unmöglich. the_permalink()gibt den entkommenen Permalink wieder und gibt nichts zurück. Der esc_url()bekommt nichts, und wenn es so wäre, wäre es eine entkoppelte URL.
fuxia
Du hast recht, es hat nur funktioniert, weil ich denke, dass es Permalink-Caching gibt.
Henning Fischer
-1

Ich habe jetzt keine Paginierung, aber Sie können diese Funktion verwenden, um die URL innerhalb der Schleife abzurufen

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

Wenn Sie PHP nicht bevorzugen, können Sie sich auch hier für die jquery-Methode entscheiden.

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

oder wenn Sie die PHP-Funktion bevorzugen, müssen Sie die ID außerhalb der Schleife erhalten

Vaibhav
quelle
1
Entschuldigung, aber das ist einfach nicht das, wonach ich gefragt habe ... + the_permalink()benötigt die ID nicht, wenn sie in der Schleife aufgerufen wird.
René Schubert
2
Diese Antwort hatte sehr wenig mit der ursprünglichen Frage zu tun. Es hat weder richtig geantwortet noch wirklich wertvolle Informationen zum Thema geliefert.
Jounileander
-2

Sie können die WordPress-Funktion verwenden, um die aktuelle Seiten-URL abzurufen

the_permalink()

Dies gibt den aktuellen URL-Link zurück.

Vivek Pandey
quelle
4
Fast; the_permalink()wird drucken Sie die URL des aktuellen Beitrag. Bei anderen Anfragen funktioniert dies jedoch nicht und Variablen wie die Paginierung werden nicht berücksichtigt. Also nicht wirklich die Antwort, die @ René Schubert sucht.
TheDeadMedic