随着WordPress的升级,显示评论和评论表单的代码也不断变化,过去是在comments.php中直接写输出评论的循环结构,现在这些工作都被一个函数替代了——wp_list_comments。
过去为评论添加个楼层数,只需要更改comments.php中输出评论循环,设置一个变量,并让变量自增即可,如今这些细节都被wp_list_comments函数隐藏了,该如何实现添加评论楼数和高亮显示作者回复呢?
俗话说解铃还须系铃人。
目录
关于wp_list_comments()函数
<?php $args = array( 'walker' => null, 'max_depth' => , 'style' => 'ul', 'callback' => null, 'end-callback' => null, 'type' => 'all', 'page' => , 'per_page' => , 'avatar_size' => 32, 'reverse_top_level' => null, 'reverse_children' => ); ?>
以上是wp_list_comments()的参数,通过传参数我们可以控制输出。
给参数分个类。
第一类:从后台控制更容易
max_depth、 per_page、reverse_top_level
第二类:值是字符串的参数
style、type、page、avatar_size、reverse_children
第三类:值是函数的参数
walker、callback、end-callback
我们要用的是第三类参数中的callback参数,通过向该参数传递一个用户自定义函数,就可以更改每条评论显示的方式。
自定义评论结构
首先,在comments.php中调用wp_list_comments函数时要加上callback参数,向callback传递用户自定义函数的名称,如下所示
wp_list_comments('type=comment&avatar_size=38
&callback=sola_custom_comment');
自定义函数的名字叫做sola_custom_comment
我要在这个函数中加三个结构:
1. 自增变量
<?php static $comment_number=1; ?>
2. 显示楼层数的代码
<span class="commentnumber <?php if(1 == $comment->user_id) { echo 'auth-commentnumber'; } ?>"><?php echo $comment_number++; ?>
3. 在需要突出作者的地方写如下代码
if(1 == $comment->user_id) { // whatever you need to do }
1 == $comment->user_id只适用于单作者的博客,或者你只想突出管理员的回复。当然很多情况下管理员的ID可以不是1,但聪明的你肯定知道如何更改代码来适应这些变化。
如果博客有多个作者,只想高亮显示当前文章的作者评论,而不是管理员的评论,那么用下面的代码
$author_id = get_the_author_meta('ID'); if( $author_id == $comment->user_id ) { // whatever you need to do }
高亮显示管理员回复的代码
<?php function sola_custom_comment($comment, $args, $depth) { $GLOBALS['comment'] = $comment; /*记录评论楼数的变量*/ static $comment_number=1; ?> <ul> <li id="li-comment-<?php comment_ID() ?>"> <?php /*显示评论楼数*/ ?> <span class="commentnumber <?php if(1 == $comment->user_id) {echo 'auth-commentnumber'; } ?>"> <?php echo $comment_number++; ?> </span> <div id="comment-<?php comment_ID(); ?>"> <?php /* 通过评论作者的id判断是否为文章作者,如果是则增加authComment class*/ ?> <div class="comment-author vcard <?php if(1 == $comment->user_id ) {echo 'authComment';} ?>"> <?php echo get_avatar( $comment->comment_author_email, $args['avatar_size'] ); ?> <?php if(1 == $comment->user_id) { echo '<p class="authIdentify">博主回复'; } ?> <?php printf(__('<cite class="fn">%s</cite>:'), get_comment_author_link()) ?> </div> <?php if ($comment->comment_approved == '0') : ?> <em><?php _e('多谢留言,您的评论正在等待审核,请稍等^_^') ?></em> <?php endif; ?> <?php /*评论meta信息和编辑评论链接*/ ?> <div class="comment-meta commentmetadata"> <a href="<?php echo esc_url( get_comment_link( $comment->comment_ID ) ) ?>"> <?php printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?> </a> <?php edit_comment_link(__('(Edit)'),' ','') ?> </div> <?php /*评论内容*/ ?> <?php comment_text() ?> <?php /*回复链接*/ ?> <div class="reply"> <?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?> </div> </div> </li> </ul> <?php } ?>