it-swarm.com.de

WordPress anhalten, die Kommentarseite-1 zur Beitragsseite umzuleiten?

Ich möchte eine separate Seite für die Kommentare zu einem Beitrag haben, so dass auf dieser Seite: /2011/02/post-name/ nur der Beitrag angezeigt wird und Sie dann auf einen Link klicken, um die Kommentare anzuzeigen, und Sie zu einer Seite wie dieser weiterleiten: /2011/02/post-name/comment-page-1/

Ich überprüfe dann die URL, um festzustellen, ob "comment-page-x" enthalten ist, und zeige die Seite in diesem Fall anders an (entfernen Sie den Beitrag, damit die Benutzer nicht jedes Mal darüber hinwegblättern müssen und auch Dinge wie a formatieren etwas anders).

Dies würde funktionieren, aber WordPress leitet comment-page-1 auf die Beitragsseite um - ich brauche es, um comment-page-1 dort in der URL zu belassen.

Ist das möglich? Wie kann ich es tun? Vielen Dank!

8
Shaun

Gute Frage! WordPress weist Ihre Kommentarseitennummer der Abfrage var 'cpage' zu, die festgelegt wird, wenn Ihre URL am Ende /comment-page-1/ enthält. Ihr Schuldiger befindet sich also in der Funktion redirect_canonical(), Zeile 192 von /wp-includes/canoncial.php.

if ( get_query_var('paged') || is_feed() || get_query_var('cpage') ) {

Da die Funktion redirect_canonical() als Aktion festgelegt wird, können wir stattdessen unsere eigene aufzurufende Funktion einfügen. Lassen Sie unsere Funktion die Abfragevariable 'cpage' auf false setzen, rufen Sie redirect_canonical() auf und setzen Sie 'cpage' dann auf den ursprünglichen Wert zurück. das hält WordPress davon ab, auf Sie weiterzuleiten.

Um Ihre eigene Funktion einzufügen, müssen Sie die beiden Hooks 'init' und 'template_redirect' aufrufen, um sicherzustellen, dass der 'init'-Hook nach der do_action() im WordPress-Core aufgerufen wird, der redirect_canonical() hinzufügt:

add_action('init','yoursite_init',11); //11=lower priority
function yoursite_init() {
  remove_action('template_redirect','redirect_canonical');
  add_action('template_redirect','yoursite_redirect_canonical');
}

add_action('template_redirect','yoursite_redirect_canonical');
function yoursite_redirect_canonical($requested_url=null, $do_redirect=true) {
  $cpage = get_query_var('cpage');
  set_query_var('cpage',false);
  redirect_canonical($requested_url, $do_redirect);
  set_query_var('cpage',$cpage);
}

Dann musst du natürlich etwas mit deinem 'cpage' machen. Sie können entweder den von get_query_var('cpage') zurückgegebenen Wert überprüfen oder einen weiteren Hook hinzufügen, um eine kommentarspezifische Vorlage zu erstellen, wie ich es getan habe. Es wird ein Look für eine Designvorlagendatei hinzugefügt, die dieselbe hat, wie sie normalerweise geladen wird, jedoch [comments].php am Ende des Namens anstelle von .php, d. H. single[comments].php. Hinweis dass ich die Priorität für diesen Filter auf 11 gesetzt habe; Möglicherweise müssen Sie eine noch größere Zahl festlegen, wenn sich ein von Ihnen verwendetes Plugin nach Ihrem Hooks selbst hinzufügt:

add_filter('single_template','yoursite_single_template',11);
function yoursite_single_template($template) {
  if (get_query_var('cpage'))
    $template = str_replace('.php','[comments].php',$template);
  return $template;
}

Und hier ist der Beweis, dass alles funktioniert!

 Screenshot of Custom WordPress Page Template for Comments 
(Quelle: mikeschinkel.com )

7
MikeSchinkel