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].php
alla 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!
(fonte: mikeschinkel.com )