前面我们学到过wordpress的导航菜单可以使用Walker类来自定义结构,更加灵活的输出我们想要的HTML结构,更方便的匹配样式。wordpress的评论列表也一样可以使用Walker类来实现灵活的评论列表结构,下面举个例子说明Walker_Comment的用法。
此方法可自定义每一个评论HTML结构,随便你怎么写都行。
以下例子适用于themebetter官网评论样式。
复制
//自定义评论输出类 class My_Comment_Walker extends Walker_Comment { public function start_lvl(&$output, $depth = 0, $args = array()) { $output .= ''; } public function end_lvl(&$output, $depth = 0, $args = array()) { $output .= ""; } // 处理每一条评论内容,这个函数是重点 public function start_el(&$output, $comment, $depth = 0, $args = array(), $id = 0) { /* 首先是每一条评论的各种参数 */ $id = $comment->comment_ID; // 获取评论id $name = $comment->comment_author; // 获取评论作者 $url = $comment->comment_author_url; // 获取评论作者url $date = $comment->comment_date; // 获取评论日期 $avatar = get_avatar($comment->comment_author_email, 64, '', $name, array('class' => 'comment-avatar')); // 通过评论邮箱地址,从 gravatar.com 获取头像 // 评论内容处理,表情代码也在这里替换成<img>图片。 $content = str_ireplace(array("\r\n", "\n"), "<br>", $comment->comment_content); // 把换行符替换成 <br> /* 接着是输出 html 拼接 */ if ($depth == 0) { // 如果是一级评论 /* 这里可以根据需要,任意拼接每一条评论的参数 */ $output .= '<div class=comment-item id="comment-' . $id . '">'; $output .= _get_the_avatar($user_id = $comment->user_id, $user_email = $comment->comment_author_email); $output .= '<div class="text">' . $content . '</div>'; $output .= '<footer><span class="user"><a href="' . $url . '">' . $name . '</a></span>'; $output .= '<time>' . $date . '</time>'; $output .= '<a href="javascript:;" class="reply" etap="comment_reply" data-id="' . $id . '">回复</a>'; $output .= '</footer>'; } else { // 非一级评论,二级评论、三级评论等等 //$for = get_comment_author($comment->comment_parent); // 获取父评论作者名,@ 时用到 /* 这里同样可以根据需要,任意拼接每一条评论的参数 */ // $output .= "<a href=\"$url\">$name</a>:@$for $content"; // 添加 @ 符号 $output .= '<div class=comment-item id="comment-' . $id . '">'; $output .= _get_the_avatar($user_id = $comment->user_id, $user_email = $comment->comment_author_email); $output .= '<div class="text">' . $content . '</div>'; $output .= '<footer><span class="user"><a href="' . $url . '">' . $name . '</a></span>'; $output .= '<time>' . $date . '</time>'; $output .= '<a href="javascript:;" class="reply" etap="comment_reply" data-id="' . $id . '">回复</a>'; $output .= '</footer>'; } } public function end_el(&$output, $comment, $depth = 0, $args = array(), $id = 0) { $output .= "</div>"; }
使用方法
复制
<?php wp_list_comments(array( 'walker' => new My_Comment_Walker(), )); ?>
效果我就不给图了,自己去官方看吧,好像和我的评论有点像,我好像也是扒的他…..
关于Walker类的使用,建议配合此文阅读WordPress自定义导航菜单处理类Walker,最好动手写一写,看看输出的内容变化,更能理解。
评论 (1)