Smettere di WordPress reindirizzare comment-page-1 alla pagina dei post?


8

Vorrei avere una pagina separata per i commenti su un post, in modo che questa pagina: /2011/02/post-name/mostri solo il post e quindi fai clic su un collegamento per visualizzare i commenti, portandoti a una pagina come questa:/2011/02/post-name/comment-page-1/

Verificherò quindi l'URL per vedere se "comment-page-x" è presente e visualizzerò la pagina in modo diverso in tal caso (rimuovi il post, in modo che le persone non debbano scorrere oltre ogni volta, e anche lo stile delle cose un in modo diverso).

Funzionerebbe, ma WordPress reindirizza comment-page-1alla pagina dei post: ne ho bisogno per mantenerlo comment-page-1nell'URL.

È possibile? Come posso farlo? Grazie!


1
upvotet the Q. Come ha detto Mike: bravo :)
Kaiser

Risposte:


7

Ottima domanda! WordPress assegna il numero della tua pagina di commento alla query var 'cpage'che viene impostata /comment-page-1/alla fine dell'URL . Quindi il tuo colpevole è nella redirect_canonical()funzione, riga 192 di /wp-includes/canoncial.php.

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

Dato che la redirect_canonical()funzione viene impostata come azione, ciò che possiamo fare è inserire la nostra funzione da chiamare invece, impostare la nostra funzione su 'cpage'query var false, call redirect_canonical()e quindi 'cpage'riportarla su ciò che era; ciò impedirà a WordPress di reindirizzare su di te.

Per inserire la tua funzione devi chiamare i due hook 'init'e 'template_redirect'così, assicurandoti di impostare l' 'init'hook da chiamare dopo il do_action()core interno di WordPress che aggiunge redirect_canonical():

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

Quindi ovviamente devi fare qualcosa con il tuo 'cpage'. Puoi verificare il valore restituito da get_query_var('cpage')oppure puoi aggiungere un altro hook per permetterti di creare un modello specifico per i commenti che è quello che ho fatto. Aggiungerà la ricerca di un file modello tema con lo stesso di quello che normalmente si carica ma con [comments].phpalla fine del nome anziché .php, ad es single[comments].php. Nota che ho impostato la priorità per questo filtro su 11; potresti dover impostare un numero ancora maggiore se un plugin che usi si aggiunge dopo il tuo hook:

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;
}

Ed ecco la prova che tutto funziona!

Schermata del modello di pagina WordPress personalizzato per i commenti
(fonte: mikeschinkel.com )


Insomma .... wow! Peccato che non possiamo fare un +10 qui ...
Kaiser

Grazie per la risposta dettagliata, ma una domanda: dove posso inserire questo codice? Ho provato a Functions.php ma non ho avuto molta fortuna. Supponendo che sto usando il tema ventiquattro, dove nel file devo aggiungere il codice?
Shaun,

@Shaun - Figure. :) Una volta non ho aggiunto il seguente testo alla mia risposta, mi viene richiesto: "Puoi aggiungere il seguente codice al functions.phpfile del tuo tema o in un .phpfile di un plugin che potresti scrivere". Ma dici che non funziona? Cosa non sta esattamente facendo? Hai inserito delle echo "Test"; exit;dichiarazioni in ciascuna delle funzioni per assicurarti che gli hook si attivino? Hai plugin che potrebbero essere in conflitto? Hai provato a cambiare 11in due punti in 100?Hai incluso tutto il codice? Hai creato un file modello tema chiamato single[comments].php?
MikeSchinkel,

@MikeSchinkel Brilliant, grazie. Non ho creato il singolo [commenti] .php!
Shaun,

@Shaun - Sono contento di poterti aiutare!
MikeSchinkel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.