
随着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
}
?>