Pare o WordPress redirecionando o comment-page-1 para a página do post?

8

Eu gostaria de ter uma página separada para os comentários em uma postagem, de forma que esta página: /2011/02/post-name/ apenas mostre a postagem e você clique em um link para visualizar os comentários, direcionando você para uma página como esta:/2011/02/post-name/comment-page-1/

Verificarei a URL para ver se "comment-page-x" está nela e mostrarei a página de maneira diferente (remova a postagem, para que as pessoas não tenham que passar por ela toda vez, e também estilo coisas um pouco diferente).

Isso funcionaria, mas o WordPress redireciona comment-page-1 para a página de postagem. Eu preciso que ele mantenha comment-page-1 no URL.

Isso é possível? Como eu posso fazer isso? Obrigado!

    
por Shaun 11.02.2011 / 12:42

1 resposta

7

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!

    
por MikeSchinkel 11.02.2011 / 15:06

Tags