wp_list_comments

随着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-&gt;user_id) {
   // whatever you need to do
}

1 == $comment->user_id只适用于单作者的博客,或者你只想突出管理员的回复。当然很多情况下管理员的ID可以不是1,但聪明的你肯定知道如何更改代码来适应这些变化。

如果博客有多个作者,只想高亮显示当前文章的作者评论,而不是管理员的评论,那么用下面的代码

$author_id = get_the_author_meta(&#39;ID&#39;);
if( $author_id == $comment-&gt;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
}
?>