Wenn ein einzelner Beitrag auf einer Kategorieseite oder auf einer beliebigen Seite angeklickt wird, können Sie die URL dieses Verweises abrufen und analysieren, um die Abfragezeichenfolge abzurufen. Dies funktioniert jedoch nur mit der Standard-Permalink-Struktur
Beispiel, wenn der Referrer eine Kategorieseite ist:
A var_dump( parse_url( wp_get_referer() ) );
gibt die folgende Ausgabe mit der Standard-Permalink-Struktur aus
array(4) {
["scheme"]=>
string(4) "http"
["host"]=>
string(9) "localhost"
["path"]=>
string(11) "/wordpress/"
["query"]=>
string(5) "cat=7"
}
Mit dem gleichen var_dump()
Permalinks mit auf /%postname%/
, das ist , was man bekommt
array(3) {
["scheme"]=>
string(4) "http"
["host"]=>
string(9) "localhost"
["path"]=>
string(32) "/wordpress/category/uit-my-lewe/"
}
Ich kann den path
aus dem zweiten Codeblock mit verwenden get_category_by_path()
, ich kann die Kategorie Objekte bekommen
Mein Problem ist, wie mache ich das für Taxonomie-Begriffe.
Ich habe einen Test gemacht. Ich habe eine benutzerdefinierte Taxonomie event_cat
. Wenn ich es umschreiben event-slug
, erhalte ich die folgende path
Verwendung /%postname%/
als Permalink - Struktur
/wordpress/event-slug/5-star/
und
event_cat=5-star
mit der Standardstruktur
Automatisch wird mein Taxonomiename nicht in der URL angezeigt, sondern nur der Slug meines Begriffs. Dies ist also keine sehr ausfallsichere Methode, um Objekte aus dem Begriff abzurufen.
Meine Frage ist, wie bekomme ich die Standard-Permalink-Struktur richtig, die Abfragezeichenfolge oder die Abfragezeichenfolge oder die Taxonomie und den /%postname%/
Termnamen aus der Permalink-Struktur
quelle
Antworten:
Zunächst muss ich sagen, dass
wp_get_referer()
es nicht 100% zuverlässig ist, weil es darauf beruht,$_SERVER['HTTP_REFERER']
dass es nicht 100% zuverlässig ist, von php.net docs:Alternative Lösung
Wenn Sie der Post-URL ein Abfrage-Argument hinzufügen können, das angibt, woher die Post stammt, ist dies zuverlässiger und Sie müssen keine URL analysieren , um ein Term-Objekt abzurufen.
Beispiel:
Wenn Sie dies tun, werden Sie durch Anklicken von Post-Permalinks auf einer Kategorieseite zu einer URL wie der folgenden weitergeleitet
Und Sie können leicht verstehen, woher der Benutzer kommt, ohne sich darauf verlassen zu müssen
$_SERVER['HTTP_REFERER']
und ohne weitere Anstrengungen.Beantworte deine Frage
Das Abrufen von Abfrageinformationen ab einer URL ist eine Aufgabe von WordPress innerhalb der
WP::parse_request()
Methode.Diese Methode soll nur einmal und nur für "Haupt" -URL (die URL, die ein Benutzer anzeigt) und nicht für beliebige URLs verwendet werden.
Vor ein paar Monaten habe ich das Plugin Url To Query geschrieben, mit dem Ziel, dasselbe für beliebige URLs zu tun.
Was ich getan habe, war
WP::parse_request()
, es zu einem vernünftigeren OOP-Code umzugestalten und es mit beliebigen URLs arbeiten zu lassen (z. B. wird die zu verarbeitende URL als Argumente empfangen, anstatt von$_SERVER
var übernommen zu werden).Mit meinem Plugin kannst du
Sie erhalten also die Abfrageargumente (etwas, an das Sie direkt übergeben können
new WP_Query
), beginnend mit einer URL, und genau dasWP::parse_request()
tut es.In Ihrem Fall könnten Sie wahrscheinlich das Array args überprüfen, ohne tatsächlich eine Abfrage ausführen zu müssen.
Dies kann sicherlich funktionieren, aber ich denke, dass der zusätzliche Aufwand zum Parsen der URL und die Unzuverlässigkeit von
$_SERVER['HTTP_REFERER']
die erste Lösung für Ihre Bereiche verbessern.quelle
Die ursprüngliche Absicht dieser Frage war es, zu wissen, woher ein einzelner Beitrag verwiesen wurde, und danach den nächsten und den vorherigen Beitrag gemäß dem Beitragsverweis aufzuschalten.
Was ich erreichen wollte, war zum Beispiel:
Ein Beitrag wird auf einer Kategorie-, Taxonomie-, Tag-, Such- oder Autorenarchivseite angeklickt. Diese Archive dienen als Verweise. Normalerweise würde man nun, wie in meiner Frage,
wp_get_referer()
diesen Referrer verwenden, um ihn in weiteren Abfragen zu verwenden. Wie von @GM in seiner oben akzeptierten Antwort beschrieben , ist diese Methode nicht zuverlässig, daher habe ich seine alternative Lösung verwendet .Das andere Problem bestand darin, eine Art Cookie oder eine Sitzung zum Speichern dieses Referrers zu verwenden, damit Sie weiterhin Beiträge des ursprünglichen Referrers aufteilen, wenn Sie von dem ursprünglichen einzelnen Beitrag weg navigieren, auf den aus dem bestimmten Archiv geklickt wurde. Da Cookies auch vom Endbenutzer kontrolliert werden und daher nicht zuverlässig sind und WordPress standardmäßig keine Sitzungen verwendet, habe ich die Links zum nächsten und vorherigen Beitrag mithilfe von @GM Alternative Solution überarbeitet , um eine zuverlässige Möglichkeit zum Überprüfen und Speichern meines Originals zu erhalten Überweiser.
Dies ist, was ich mir ausgedacht habe, und ich hoffe, dass es jemand in naher Zukunft nützlich finden wird. Bitte verwenden und missbrauchen Sie den Code, um Ihre Anforderungen zu erfüllen. Nur eine Anfrage: Verlinken Sie zurück zu dieser Frage. :-)
HINWEISE ZUM CODE ZU FOLGEN
Dieser Code ist ziemlich lang und intensiv, daher werde ich nicht auf Details eingehen. Der Code wurde gut kommentiert
Dieser Code bietet die Möglichkeit, innerhalb desselben Begriffs zwischen Beiträgen zu blättern, genau wie der Standard
next_post_link()
und dieprevious_post_link()
Funktionen in WordPress. Genau wie bei den nativen Funktionen müssen Sie die Taxonomie festlegen. Der Standardwert fürin_same_term
isttrue
und die Taxonomie istcategory
Am wichtigsten ist, dass dieser Code PHP 5.4+ benötigt
DER CODE
VERWENDUNG IN EINZELNEN VORLAGEN
Wenn Sie nicht in Beiträgen innerhalb desselben Begriffs navigieren müssen, Beiträge von allen Beitragstypen abrufen und den nächsten und vorherigen Text mit Ihrem Link anpassen müssen, haben Sie folgende Möglichkeiten:
EDIT 1
Auf Anfrage von einem Beitrag auf SO und als Teil von a habe
@todo
ich nun die Unterstützung eingeführt, um nicht nur zwischen Beiträgen des Beitragstyps des aktuellen Beitrags zu navigieren, sondern auch zwischen einer Reihe von Beitragstypen, die vom Benutzer mithilfe despost_types
Parameters in der Funktion festgelegt wurden. Bitte beachten Sie den aktualisierten Code.BEARBEITEN 2
In
'suppress_filters' => true,
aufWP_Query
Argumente , so dass die Paginierung geändert wird nicht durch Filter können verwendet werden ,WP_Query
quelle