Vou explicar o que estou tentando realizar.
Eu gostaria de ter comentários regulares não-encadeados (simples / clássicos) com um link de resposta para cada comentário. Quando alguém responde a um comentário, o comentário da resposta termina na parte superior (ou inferior) como o comentário mais recente, como faria nos comentários não encadeados padrão, mas, diferentemente do comentário não encadeado padrão, a resposta deve exibir um link para o comentário / autor original.
Existe uma solução proposta no fórum wordpress:
http://wordpress.org/support/topic/reply-to-link-for-chronological-non-threaded-comments
Eu simplesmente não faço isso funcionar. Não sei 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 ao nome do usuário ". Após recarregar a postagem, um comentário de resposta aparece 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 uma boa ideia de como devo proceder. Ficaria muito grato por qualquer ajuda.
href
aa
seguir 'em resposta a' de acordo com a ferramenta 'Inspecionar elemento' no Chrome (ou similar no navegador de sua escolha)?s
in%1$s
significa que o argumento é tratado como e apresentado como uma string. Isso é explicado em detalhes no manual do php para a função sprintf: php.net/manual/en/function.sprintf.phpRespostas:
Esta é a minha solução e não a solução proposta sugerida nos fóruns do WordPress. Acontece que é bastante fácil, mas envolve algumas etapas.
1) Vá para wp-admin-> Configurações-> Discussão e desative os comentários encadeados. Isso desativará o encadeamento, o que queremos, mas também removerá a capacidade de "responder" a um comentário específico. Temos que colocar isso de volta.
2) Adicione o script abaixo ao functions.php do seu tema ou a um plugin.
3) A impressão dos comentários é tratada por um retorno de chamada para wp_list_comments . TwentyEleven usa a função
twentyeleven_comment()
em seufunctions.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 isso ou copie o retorno de chamada do tema e renomeie a função parafake_threaded_comment
.3) Encontre a função wp_list_comments no seu tema
comments.php
e altere o retorno de chamada. Deve parecer com:4) Agora vamos trapacear um pouco. Nesse retorno de chamada, 'fake_threaded_comment', deve haver uma chamada para a função comment_reply_link . Precisamos editá-lo para que passemos os argumentos codificados 'depth' e 'max_depth'. Estamos definindo 'depth' como 1 e max_depth como 2. Isso fará com que nosso botão / link "Responder" volte.
5) Configure o link para o comentário principal. No lado da função de retorno de chamada, você deve ter notado referências
$comment
.$comment->comment_parent
é o ID do comentário respondido eget_comment_link($comment->comment_parent)
fornece o URL do comentário pai (não a marcação completa da âncora).get_comment($comment->comment_parent)
obterá os dados do comentário pai. Então, algo como ...É isso aí. 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). Estou certo de que existem coisas que temas ou plug-ins poderiam fazer para resolver isso, mas não acho que um tema ou plug-in bem comportado possa quebrá-lo.
Essa é a minha boa ação do dia. Informe-me se algo der errado.
fonte