wordpress升级到2.7以后,新增了一个函数,那就是wp_list_comments,这个函数使得在主题模板的评论功能上跟以前版本有了个新的亮点,那就是Thread comment,也就是嵌套评论功能,这样的功能在以前的版本要通过特定的插件来实现。我们下载到的主题有些不一定支持wp2.7,可自己有很喜欢,也很想让这个主题支持Thread comment这样的一个功能,那要如何做呢?
1.把你的主题模板的comments.php另存为legacy.comments.php,那现在你的主题就有了一个comments.php和一个legacy.comments.php文件了;
2.打开你的header.php文件,在
1 | <?php wp_head(); ?> |
之前加入:
1 | <?php if ( is_singular() ) wp_enqueue_script( 'comment-reply' ); ?> |
这一步主要是添加 comment-reply JavaScript,让评论嵌套 (Thread comment) 能够正常运行;
3.打开主题里的functions.php文件,添加以下代码:
1 2 3 4 5 6 7 | add_filter('comments_template', 'legacy_comments');
function legacy_comments($file) {
if(!function_exists('wp_list_comments')) : // WP 2.7-only check
$file = TEMPLATEPATH . '/legacy.comments.php';
endif;
return $file;
} |
这个主要是判断 Wordpress 版本,有选择性地使用 wp_list_comments 函数
4.编辑你的comments.php文件:
4.1 请找到:
1 2 3 4 5 | <?php foreach ($comments as $comment) : ?> <?php $comment_type = get_comment_type(); ?> <?php if($comment_type == 'comment') { ?> ......//这里的内容我省略了 <?php endforeach; ?>//记住是第一个endforeach |
请替换成:
1 | <?php wp_list_comments('type=comment&avatar_size=48'); ?> |
这里限制了wp_list_comments函数显示的内容只是评论内容,不包括pings等,还限制了头像大小为48px,这里稍后还会介绍wp_list_comments,请往下看。
然后在后面加入:
1 2 | <?php previous_comments_link() ?> <?php next_comments_link() ?> |
你也可以加入这样的:
1 2 3 4 | <div class="navigation"> <div class="alignleft"><?php previous_comments_link() ?></div> <div class="alignright"><?php next_comments_link() ?></div> </div> |
然后你用css设置下风格,这一步主要是添加评论内容的分页;
4.2 如果你还能找到:
1 2 3 4 5 | <?php if ($trackback == true) { ?> // 我这里省略了,有可能有些HTML标签不同 <?php endforeach; ?> // 我这里省略了,有可能有些HTML标签不同 <?php } ?> |
请替换成:
1 2 3 4 5 6 | <?php if ( !empty($comments_by_type['pings']) ) : ?> <h4>Trackbacks</h4> <ol class="commentlist"> <?php wp_list_comments('type=pings'); ?> </ol> <?php endif; ?> |
可能上面因为每个主题模板的不同修改会有出入,这里列出Wp2.7关于评论的loop,你可以参考一下:
1 2 3 4 5 6 7 8 9 10 11 | < ?php if ($comments) : ?> < ?php comments_number(’No Comments’, ‘One Comment’, ‘% Comments’ ); ?> < ?php wp_list_comments(); ?> < ?php previous_comments_link() ?> < ?php next_comments_link() ?> < ?php else : // this is displayed if there are no comments so far ?> < ?php if (’open’ == $post->comment_status) : ?> < ?php else : // comments are closed ?> Comments are closed. < ?php endif; ?> < ?php endif; ?> |
4.3 找到:
1 | <?php if ('open' == $post->comment_status) : ?> |
在下面加入:
1 | <div id="respond"> |
再 找到</form>
在后面加入:</div>
这一步是把评论框 (Comment Form) 放入一个 ID 为 respond 的 DIV 中,不能省略
4.4 找到
1 | <input name="submit" type="submit" id="submit" //后面因为可能有所不同而省略 /> |
在下面插入:
1 | <?php comment_id_fields(); ?> |
4.5 找到:
1 | <?php if ( get_option('comment_registration') && !$user_ID ) : ?> |
在上面加入:
1 | < ?php cancel_comment_reply_link(); ?> |
这个是取消回复功能键
4.6这一步当然是保存啦!
5.wp_list_comments简要说明:
wp_list_comments这个函数是WP2.7才新增的一个函数,函数将根据用户的设置自动对评论进行切割和分页,然后返回包含评论内容的HTML代码。
5.1 wp_comment_list()4个主要参数:
(int)avatar_size:指定评论者的头像尺寸,默认是32,单位是px;
(string)style:评论代码用哪种标签包裹,可以在ul和div中进行选择,默认是ul;
(string)callback:指定一个定义在function.php文件中的函数,wp_comment_list()将根据该函数对评论内容进行HTML编码,所以该函数通常用于指定评论内容的样式 ;
type:有comment,pings。指你调用的是评论,还是ping,默认是两者都显示;
5.2 说一下callback
由于评论都封装在了wp_comment_list()中,所以如果需要修改评论的样式就需要另外写一个函数,用于wp_comment_list()的回调,我们需要在funtion.php文件中定义该函数,然后用wp_comment_list(“callback=函数名”)的方式进行调用。
在你的主题function.php文件中中定义mytheme_comment()函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?php function mytheme_comment($comment, $args, $depth) { $GLOBALS['comment'] = $comment; ?> <li <?php comment_class(); ?> id="comment-<?php comment_ID() ?>"> <div id="div-comment-<?php comment_ID() ?>"> <?php echo get_avatar( $comment, 32 ); ?> <?php if ($comment->comment_parent == '0') : ?> <p class=timestamp><a href="#comment-<?php comment_ID() ?>"> <?php comment_date('Y年n月j日') ?><br> <span class=time> <?php comment_time('H:i a') ?> </span></a></p> <?php endif; ?> <cite> <?php comment_author_link() ?> <?php edit_comment_link('(EDIT)'); ?> </cite> <?php comment_text() ?> <?php if ($comment->comment_approved == '0') : ?> <p class="moderation"> 感谢你的回复! <br/> 你的评论将经过一段时间的审核后显示在这里, 请稍等片刻. </p> <?php endif; ?> <div class="reply"> <?php comment_reply_link(array_merge( $args, array('add_below' => 'div-comment', 'depth' => $depth, 'max_depth' => $args['max_depth']))) ?> </div> <div class=hr></div> </div> <?php } ?> |
然后wp_comment_list()函数的用法:
1 | <?php wp_list_comments('callback=mytheme_comment'); ?> |

