Comentários do WordPress em cadeia – Respeitando hierarquia do comentário pai
Refiz recentemente o novo tema do blog da Locaweb:
http://wbruno.com.br/2012/02/24/novo-tema-wordpress-em-html5-blog-da-locaweb/
Acabei deixando passar em branco, a funcionalidade dos comentários Reply, aparecerem logo abaixo do comentário pai deles. Em cadeia mesmo.
Ficando assim:
O que é bem ruim para organização, e confunde bastante a discussão. Eu não queria ter que instalar plugins de comentário apenas para isso.
Estudei um pouquinho o tema TwentyTeen, com a dica do @ThiagoCruz, e então:
É isso. Os códigos que adicionei estão abaixo:
function.php
if ( ! function_exists( 'parent_comment' ) ) :
/**
* Template for comments and pingbacks.
*
* To override this walker in a child theme without modifying the comments template
* simply create your own twentyten_comment(), and that function will be used instead.
*
* Used as a callback by wp_list_comments() for displaying the comments.
*
* @since Twenty Ten 1.0
*/
function parent_comment( $comment, $args, $depth ) {
$GLOBALS['comment'] = $comment;
switch ( $comment->comment_type ) :
case '' :
?>
<li <?php comment_class(); ?> id="comment-<?php comment_ID() ?>"> <?php echo get_avatar( $comment, 32 ); ?>
<cite><?php comment_text() ?></cite>
<?php comment_type(_x('Comentário', 'noun'), __('Trackback'), __('Pingback')); ?>
<?php _e('por'); ?>
<?php comment_author_link() ?>
—
<time datetime="<?php echo $comment->comment_date; ?>">
<?php comment_date() ?>
@ <a href="#comment-<?php comment_ID() ?>">
<?php comment_time() ?>
</a>
</time>
<?php edit_comment_link(__("Editar"), ' | '); ?>
<?php if ( $comment->comment_approved == '0' ) : ?>
<em class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.' ); ?></em>
<?php endif; ?>
<?php comment_reply_link( array_merge( $args, array( 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>
</li>
<?php
break;
case 'pingback' :
case 'trackback' :
?>
<li class="post pingback">
<p><?php _e( 'Pingback:' ); ?> <?php comment_author_link(); ?><?php edit_comment_link( __( '(Edit)' ), ' ' ); ?></p>
<?php
break;
endswitch;
}
endif;
?>
comments.php
<?php if ( have_comments() ) : ?>
<ol id="commentlist">
<?php wp_list_comments( array( 'callback' => 'parent_comment' ) ); ?>
</ol>
<?php else : // If there are no comments yet ?>
<p><?php _e('Nenhum comentário ainda.'); ?></p>
<?php endif; ?>
style.css
#commentlist .children { margin-left: 25px; }
Ahh, e sem se esquecer do novo input hidden, para o comentário reply saber quem é o pai dele:
comments.php ou comment_form() [caso vc não tenha personalizado o form]
<input type="hidden" name="comment_parent" id="comment_parent" value="<?php if( isset( $_GET['replytocom'] ) ) echo $_GET['replytocom']; ?>" />
=)