Ich möchte eine separate Seite für die Kommentare zu einem Beitrag haben, so dass diese Seite: /2011/02/post-name/
nur den Beitrag anzeigt und Sie dann auf einen Link klicken, um die Kommentare anzuzeigen und zu einer Seite wie dieser zu gelangen:/2011/02/post-name/comment-page-1/
Ich werde dann die URL überprüfen, um festzustellen, ob "comment-page-x" darin enthalten ist, und die Seite in diesem Fall anders anzeigen (entfernen Sie den Beitrag, damit die Leute nicht jedes Mal darüber scrollen müssen, und gestalten Sie auch Dinge a etwas anders).
Dies würde funktionieren, aber WordPress leitet comment-page-1
zur Post-Seite weiter - ich brauche es, um comment-page-1
dort in der URL zu bleiben .
Ist das möglich? Wie kann ich es tun? Vielen Dank!
Antworten:
Gute Frage! WordPress weist Ihre Abfrageseitennummer der Abfragevariablen zu,
'cpage'
die festgelegt wird, wenn Ihre URL/comment-page-1/
am Ende steht. Ihr Schuldiger liegt also in derredirect_canonical()
Funktion, Zeile 192 von/wp-includes/canoncial.php
.Da die
redirect_canonical()
Funktion als Aktion festgelegt wird, können wir stattdessen unsere eigene Funktion einfügen, die aufgerufen werden soll. Lassen Sie unsere Funktion die'cpage'
Abfrage var auf setzenfalse
, aufrufenredirect_canonical()
und dann auf das'cpage'
zurücksetzen, was sie war. Dadurch wird verhindert, dass WordPress auf Sie umleitet.Um Ihre eigene Funktion einzufügen, müssen Sie die beiden Hooks aufrufen
'init'
und'template_redirect'
so den'init'
Hook einstellen, der nach demdo_action()
WordPress-Kern aufgerufen werden soll, der Folgendes hinzufügtredirect_canonical()
:Dann müssen Sie natürlich etwas mit Ihrem tun
'cpage'
. Sie können entweder nach dem von zurückgegebenen Wert suchenget_query_var('cpage')
oder einen weiteren Hook hinzufügen, um eine kommentarspezifische Vorlage zu erstellen, wie ich es getan habe. Es wird eine Suche nach einer Designvorlagendatei hinzugefügt, die dieselbe enthält, wie sie normalerweise geladen wird, jedoch mit[comments].php
am Ende des Namens anstelle von.php
, dhsingle[comments].php
. Beachten Sie, dass ich für diesen Filter die Priorität 11 festgelegt habe. Möglicherweise müssen Sie eine noch größere Zahl festlegen, wenn sich ein von Ihnen verwendetes Plugin nach Ihrem Hook selbst hinzufügt:Und hier ist der Beweis, dass alles funktioniert!
(Quelle: mikeschinkel.com )
quelle
functions.php
Datei Ihres Themas oder in einer.php
Datei eines Plugins hinzufügen, das Sie möglicherweise schreiben." Aber du sagst, das funktioniert nicht? Was genau macht es nicht? Haben Sieecho "Test"; exit;
Anweisungen in jede der Funktionen eingefügt, um sicherzustellen, dass die Hooks ausgelöst werden? Haben Sie Plugins, die möglicherweise in Konflikt stehen? Haben Sie versucht,11
an zwei Stellen zu Ändern in100?
Haben Sie den gesamten Code eingefügt? Haben Sie eine Themenvorlagendatei mit dem Namen erstelltsingle[comments].php
?