wp_list_comments()使用回调函数自定义评论展示方式

1、用法

  1. <?php  wp_list_comments( $args ); ?>

2、参数使用

  1. <?php $args = array(
  2.     'walker'            => null,
  3.     'max_depth'         => ,
  4.     'style'             => 'ul',
  5.     'callback'          => null,
  6.     'end-callback'      => null,
  7.     'type'              => 'all',
  8.     'page'              => ,
  9.     'per_page'          => ,
  10.     'avatar_size'       => 32,
  11.     'reverse_top_level' => null,
  12.     'reverse_children'  =>  );
  13.  ?>

3、参数说明
(1)$walker 自定义样式类名
(2)$avatar_size (可选) 头像大小 默认: 32
(3)$style (可选)评论样式控制,你可以添加 ‘div’, ‘ol’, 或者’ul’, 来展示你的评论,如:

  1. <div class="commentlist"><?php wp_list_comments(array('style' => 'div')); ?></div>

  1. <ol class="commentlist"><?php wp_list_comments(array('style' => 'ol')); ?></ol>

默认值是’ul’
(4)$type (可选) 评论展现方式,参数可以是 ‘all’、’comment’、’trackback’、’pingback’、’pings’. ‘pings’ 包括’trackback’ 和 ‘pingback’.
默认值: ‘all’
(5)$reply_text (可选) 评论的回复链接,(可以通过函数get_comment_reply_link function 获取)
默认: ‘Reply’
(6)$login_text (可选)用户必须登录后评论的提示信息,默认: ‘Log in to Reply’
(7)$callback (可选) 回调函数,通过回调函数来自定义你的评论展示方式。Default: null
(8)$end-callback (可选) 关闭评论后调用的自定义函数,Default: null
(9)$reverse_top_level (可选)评论数据是否倒序显示,Default: null
(10)$reverse_children (可选) 子评论数据是否倒序显示,Default:null
4、自定义评论列表制作
php wp_list_comments();可以实现评论列表的展示,大多数主题都是使用的默认调用函数,使用这个虽然增加了主题制作的方便性,但是它是调用系统给你定义的id和class,所以对于样式的修改带来麻烦,而且你也不敢保证wordpress的更新不会更换id和class,且自定义性较弱,需要加入一些东西比较麻烦,比如说给评论增加v认证,博主高亮,楼层显示,这无疑就要去修改wordpress系统wp-include下的comment-template.php模版,修改的东西随着更新又会消失。针对这一问题,我们需要替换评论列表的函数,在主题下的comments.php找到

  1. <?php wp_list_comments(); ?>

把这句替换为以下代码即可:

  1.  <?php wp_list_comments( array(
  2.     'callback'     =>  'bootstrapwp_comment',
  3.   ) );  ?>

其中bootstrapwp_comment自定义的回调函数。
5、在functions.php添加自定义回调函数bootstrapwp_comment,函数方法如下:

  1. /*
  2.  * 评论列表的显示
  3.  */
  4. if ( ! function_exists( 'bootstrapwp_comment' ) ) :
  5. function bootstrapwp_comment( $comment, $args, $depth ) {
  6. 	$GLOBALS['comment'] = $comment;
  7. 	switch ( $comment->comment_type ) :
  8. 		case 'pingback' :
  9. 		case 'trackback' :
  10. 	  // 用不同于其它评论的方式显示 trackbacks 。
  11. 	?>
  12. 	<li <?php comment_class(); ?> id="comment-<?php comment_ID(); ?>">
  13. 		<p><?php _e( 'Pingback:', 'bootstrapwp' ); ?> <?php comment_author_link(); ?> <?php edit_comment_link( __( '(Edit)', 'bootstrapwp' ), '<span class="edit-link">', '</span>' ); ?>
  14. 		</p>
  15. 	<?php
  16. 		break;
  17. 		default :
  18. 		// 开始正常的评论
  19. 		global $post;
  20. 	 ?>
  21. 	<li <?php comment_class(); ?> id="li-comment-<?php comment_ID(); ?>">
  22. 		<article id="comment-<?php comment_ID(); ?>" class="media comment">
  23. 			<div class="pull-left">
  24.   			<?php // 显示评论作者头像 
  25.   			  echo get_avatar( $comment, 64 ); 
  26.   			?>
  27. 			</div>
  28. 			<?php // 未审核的评论显示一行提示文字
  29. 			  if ( '0' == $comment->comment_approved ) : ?>
  30.   			<p class="comment-awaiting-moderation">
  31.   			  <?php _e( 'Your comment is awaiting moderation.', 'bootstrapwp' ); ?>
  32.   			</p>
  33. 			<?php endif; ?>
  34. 			<div class="media-body">
  35. 				<h4 class="media-heading">
  36.   				<?php // 显示评论作者名称
  37.   				    printf( '%1$s %2$s',
  38.   						get_comment_author_link(),
  39.   						// 如果当前文章的作者也是这个评论的作者,那么会出现一个标签提示。
  40.   						( $comment->user_id === $post->post_author ) ? '<span class="label label-info"> ' . __( 'Post author', 'bootstrapwp' ) . '</span>' : ''
  41.   					);
  42.   				?>
  43.   		    <small>
  44.     				<?php // 显示评论的发布时间
  45.     				    printf( '<a href="%1$s"><time datetime="%2$s">%3$s</time></a>',
  46.     						esc_url( get_comment_link( $comment->comment_ID ) ),
  47.     						get_comment_time( 'c' ),
  48.     					  // 翻译: 1: 日期, 2: 时间
  49.     						sprintf( __( '%1$s %2$s', 'fenikso' ), get_comment_date(), get_comment_time() )
  50.     					);
  51.     				?>
  52.   				</small>
  53. 				</h4>
  54. 				<?php // 显示评论内容
  55. 				  comment_text(); 
  56. 				?>
  57. 				<?php // 显示评论的编辑链接 
  58. 				  edit_comment_link( __( 'Edit', 'bootstrapwp' ), '<p class="edit-link">', '</p>' ); 
  59. 				?>
  60. 				<div class="reply">
  61. 					<?php // 显示评论的回复链接 
  62. 					  comment_reply_link( array_merge( $args, array( 
  63. 					    'reply_text' =>  __( 'Reply', 'bootstrapwp' ), 
  64. 					    'after'      =>  ' <span>&darr;</span>', 
  65. 					    'depth'      =>  $depth, 
  66. 					    'max_depth'  =>  $args['max_depth'] ) ) ); 
  67. 					?>
  68. 				</div>
  69. 			</div>
  70. 		</article>
  71. 	<?php
  72. 		break;
  73. 	endswitch; // end comment_type check
  74. }
  75. endif;

6、其他说明
在早期的主题中,wp_list_comments 函数我们不常看到,该函数是从 WordPress 2.7.0 版本后才出现的,相较于之前的获取评论对象,再进行遍历的方法,wp_list_comments 简单的用一个函数做成类似于主循环的效果,做成模块化,对于调用和定制非常方便。
函数官方文档地址(英文):
http://codex.wordpress.org/Function_Reference/wp_list_comments


发布日期:

所属分类: WordPress 函数 标签: