WordPress 2.7自定义单条评论结构

WordPress 2.7内置了threaded comment之后,原来主题的comments.php文件中繁琐的评论循环简化成了一个函数调用:wp_list_comments.

然而不加任何参数调用该函数的话,它输出的HTML结构是固定的。尽管它给每个元素都提供了丰富的class name供CSS样式使用,但是CSS并不足够灵活(除非使用一些我认为不是太好的方式,比如大量绝对定位),可以任意显示固定的DOM结构。某些情况下,我们还是希望能够自己来定义DOM结构。

WordPress开发者当然考虑到了这一点,在Codex上的文档页就给出了一个例子。实际上就是wp_list_comments接收的数组参数中可以传入两个回调函数。一个是callback,负责输出一条评论的主体部分。另一个是end-callback,负责输出评论的结束部分。

解释一下。threaded comments实际上在内部就是一个“森林”,每一条顶层评论和它的所有回复、回复的回复构成一棵树。wp_list_comments对每棵树做一次遍历,首先调用参数callback指定的函数,然后递归遍历其子节点(输出回复评论),完成之后再调用参数end-callback指定的函数。如果不指定这两个函数,WordPress就会输出默认的结构,实际上大家都是把默认输出复制到自己的回调函数中,然后修改一下结构。简单的说,就是callback输出一个块的开头加上该评论自己的内容,end-callback输出这个块的结尾,中间是子评论。如下图所示的遍历顺序,偏下的箭头表示调用callback,偏上的箭头表示调用end-callback.

tree (by qingbo)

以上提到的关键代码都在wp-includes/comment-template.php中。

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.