Grande pergunta! O WordPress atribui o número da sua página de comentários à consulta var 'cpage'
, que é definida quando seu URL tem /comment-page-1/
no final. Então, seu culpado está na função redirect_canonical()
, linha 192 de /wp-includes/canoncial.php
.
if ( get_query_var('paged') || is_feed() || get_query_var('cpage') ) {
Como a função redirect_canonical()
é 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 'cpage'
query var como false
, call redirect_canonical()
e então defina 'cpage'
de volta para o que era; que impedirá o WordPress de redirecionar em você.
Para inserir sua própria função, é necessário chamar os dois ganchos 'init'
e 'template_redirect'
, por isso, certifique-se de definir o gancho 'init'
a ser chamado depois do do_action()
no núcleo 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 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 de comentário, que é o que eu fiz. Ele adicionará a aparência de um arquivo de modelo de tema com o mesmo valor que normalmente carregaria, mas com [comments].php
no final do nome em vez de .php
, ou seja, single[comments].php
. Note que eu defini a prioridade para este filtro ser 11; você pode precisar definir um número ainda maior se um plug-in que você usar for adicionado 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!