Esta é a minha solução e não a solução proposta sugerida nos fóruns do WordPress. Acaba sendo bastante fácil, mas envolve alguns passos.
1) Vá para wp-admin- > Configurações- > Discussão e desative os comentários encadeados. Isso desativará o encadeamento, o que desejamos, mas também removerá a capacidade de "responder" a um determinado comentário. Nós temos que colocar isso de volta.
2) Adicione o script abaixo ao functions.php do seu tema ou a um plugin.
function load_script_for_fake_threading() {
if (is_singular()) wp_enqueue_script('comment-reply');
}
add_action('wp_enqueue_scripts','load_script_for_fake_threading');
3) A impressão dos comentários é feita por um retorno de chamada para wp_list_comments . TwentyEleven usa a função twentyeleven_comment()
em seu functions.php
. Se o seu tema não tiver um retorno de chamada, você precisará criar um. Por padrão, o conteúdo do método start_el da classe Walker_Comment em "wp-includes / comment-template.php" é usado. Copie ou copie o retorno de chamada do tema e renomeie a função para fake_threaded_comment
.
3) Encontre a função wp_list_comments no comments.php
do seu tema e altere o retorno de chamada. Deveria se parecer com:
wp_list_comments(array('callback'=>'fake_threaded_comment'));
4) Agora vamos trapacear um pouco. Nesse retorno de chamada, "fake_threaded_comment", deve haver uma ligação para a função comment_reply_link . Precisamos editá-lo para passarmos os argumentos 'depth' e 'max_depth' codificados. Estamos definindo 'depth' para 1 e max_depth para 2. Isso fará com que nosso botão / link "Responder" volte.
comment_reply_link(
array_merge(
$args,
array(
'reply_text' => __( 'Reply <span>↓</span>',
'themetextdomainname' ),
'depth' => 1,
'max_depth' => 2
)));
5) Configure o link para o comentário pai. Na lateral da função de retorno de chamada, você deve ter notado referências a $comment
. $comment->comment_parent
é o ID do comentário respondido e get_comment_link($comment->comment_parent)
fornece o URL do comentário pai (não a marcação de âncora completa). get_comment($comment->comment_parent)
obterá os dados do comentário pai. Então, algo como ...
$pcom = get_comment($comment->comment_parent);
echo '<a href="'.get_comment_link($comment->comment_parent).'">This is a reply to '.$pcom->comment_author.'</a>';
É isso. Agora você pode comentar comentários específicos, mas, uma vez publicado, o comentário será exibido no final ou no início da lista de comentários, dependendo da ordem de carregamento.
Testado com TwentyEleven no WordPress 3.4.1 (um pouco desatualizado, mas já está no meu servidor de desenvolvimento). Tenho certeza de que há coisas que os temas ou plugins poderiam fazer para quebrar isso, mas não acho que um tema ou um plug-in bem comportado o quebraria.
Essa é minha boa ação para o dia. Por favor, deixe-me saber se algo der errado.