Resposta de comentário não encadeada com link para o comentário original

10

Vou explicar o que estou tentando realizar.

Eu gostaria de ter comentários regulares não-encadeados (planos / clássicos) com um link de resposta para cada comentário. Quando alguém responde a um comentário, o comentário de resposta terminará na parte superior (ou inferior) como o último comentário, como faria nos comentários padrão não segmentados, mas, ao contrário do comentário padrão não segmentado, a resposta deve exibir um link para o comentário / autor original.

Existe uma solução proposta no fórum do wordpress:

enlace

Eu simplesmente não consigo trabalhar. Não tenho certeza em quais arquivos o pôster está colocando as diferentes partes do código. Eu tentei usar o código e ligar uma função para comment_post:

add_action('comment_post', 'print_reply_link', 10, 2);

function print_reply_link( $comment_id, $approved ){
  if( $approved ){
    $comment = get_comment( $comment_id );
    if ( $comment->comment_parent ) {
    $parent = get_comment( $comment->comment_parent );
    $parent_link = esc_url( get_comment_link( $comment->comment_parent ) );
    printf( ' in reply to <a href="%1$s">%2$s</a>', $parent_link, $parent->comment_author );
    } 
  }
}

Isso retornou uma página em branco com "em resposta a authorname ". Depois de recarregar a postagem, um comentário de resposta é exibido corretamente, mas sem nenhum link para o comentário original

Minhas habilidades de codificação são realmente muito básicas, então não tenho idéia de como devo proceder. Ficaria muito grato por qualquer ajuda.

    
por sarytash 05.02.2012 / 04:10

1 resposta

4

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>&darr;</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.

    
por s_ha_dum 03.11.2012 / 18:43

Tags