Parar o WordPress redirecionando comment-page-1 para a página de postagem?

8

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

Vou verificar o URL para ver se "comment-page-x" está nele e exibir a página de forma diferente (remova a postagem, para que as pessoas não precisem passar por isso todas as vezes e também estilizar coisas um pouco diferente).

Isso funcionaria, mas o WordPress redireciona comment-page-1para a página de postagem - eu preciso mantê comment-page-1-la no URL.

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

Shaun
fonte
11
upvotet o P. Como Mike disse: bom :)
kaiser

Respostas:

7

Ó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].phpno 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!

Captura de tela do modelo de página personalizado do WordPress para comentários
(fonte: mikeschinkel.com )

MikeSchinkel
fonte
Curto .... uau! Pena que não podemos fazer um 10 por aqui ...
kaiser
Obrigado pela resposta detalhada, mas uma pergunta - onde posso colocar esse código? Eu tentei no functions.php, mas não tendo muita sorte. Supondo que estou usando o tema twentyten, onde no arquivo adiciono o código?
Shaun
@ Shaun - Figuras. :) Na ocasião em que não adicionei o seguinte texto à minha resposta, solicitei: "Você pode adicionar o seguinte código ao functions.phparquivo do seu tema ou no .phparquivo de um plug-in que possa estar escrevendo." Mas você diz que não está funcionando? O que exatamente isso não está fazendo? Você colocou echo "Test"; exit;instruções em cada uma das funções para garantir que os ganchos estejam disparando? Você tem plug-ins que podem estar em conflito? Você tentou mudar 11em dois lugares para 100?Você incluiu todo o código? Você criou um arquivo de modelo de tema chamado single[comments].php?
117611 MikeSchinkel
@MikeSchinkel Brilliant, obrigado. Eu não criei o single [comments] .php!
Shaun
@ Shaun - Ainda bem que pude ajudar!
117611 MikeSchinkel