Ótima pergunta! O WordPress atribui o número da página de comentários à consulta var, 'cpage'
que é definida quando o seu URL /comment-page-1/
termina no final. Portanto, seu culpado está na redirect_canonical()
função, linha 192 de /wp-includes/canoncial.php
.
if ( get_query_var('paged') || is_feed() || get_query_var('cpage') ) {
Como a redirect_canonical()
função é definida como uma ação, o que podemos fazer é inserir nossa própria função a ser chamada, fazer com que nossa função defina a 'cpage'
consulta var como false
, call redirect_canonical()
e, em seguida, 'cpage'
retorne ao que era; que impedirá o WordPress de redirecionar para você.
Para inserir sua própria função, você precisa chamar o gancho dois 'init'
e, 'template_redirect'
assim, não se esqueça de definir o 'init'
gancho para ser chamado após o do_action()
núcleo interno do WordPress que adiciona 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);
}
Então é claro que você precisa fazer algo com o seu 'cpage'
. Você pode verificar o valor retornado por get_query_var('cpage')
ou adicionar outro gancho para permitir a criação de um modelo específico para comentários, o que eu fiz. Ele adicionará um arquivo de modelo de tema com o mesmo que normalmente carregaria, mas com [comments].php
no final do nome em vez de .php
, ie single[comments].php
. Observe que eu defino a prioridade desse filtro como 11; pode ser necessário definir um número ainda maior se um plug-in usado se adicionar após o seu gancho:
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;
}
E aqui está a prova de que tudo funciona!
(fonte: mikeschinkel.com )