》最新代码移步到这里:只在WP主评论加上楼层号的方法『支持顺序、倒序』(2012.11.17)
很久没折腾 WordPress 相关的伪技术了,今天突然想起自从 WordPress 2.7 支持嵌套后久久没实现的评论楼层号,如果按照老式的方法给主评论和嵌套评论都加上楼层号,我个人认为是没有什么意义的,而且感觉会乱七八糟,但是只为主评论加上楼层号,那么就不同了,因为每层楼就是一个讨论组,可以当作是一个论坛贴,嵌套评论就是参加讨论的人。
我记得4月份在《凤凰不归巢》那里看到一篇文章《WP非插件显示谁坐了沙发》里面有相关主次评论判断方法,于是今早无聊就折腾了一番,没想到真给我折腾出来了。
效果看我现在用的主题 zSnos 的评论,下面是方法
前提:
1. 当然是要在 WordPress 后台开启嵌套评论和评论分页
2. 所用主题支持嵌套(目前的主题基本都支持吧)
3. 主题有使用 mytheme_comment 回调函数(http://codex.wordpress.org/Template_Tags/wp_list_comments)
下面拿默认的评论函数来说明
1. 先看看WP官方的默认 mytheme_comment 回调函数
function mytheme_comment($comment, $args, $depth){ $GLOBALS['comment'] = $comment; ?> <li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>"> <div id="comment-<?php comment_ID(); ?>"> <div class="comment-author vcard"> <?php echo get_avatar($comment,$size='48',$default='<path_to_url>' ); ?> <?php printf(__('<cite class="fn">%s</cite> <span class="says">says:</span>'), get_comment_author_link()) ?> </div> <?php if ($comment->comment_approved == '0') : ?> <em><?php _e('Your comment is awaiting moderation.') ?></em> <br /> <?php endif; ?> <div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( 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 comment_text() ?> <div class="reply"> <?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?> </div> </div> <?php }
2. 那么现在开始添加楼层计数参数 $commentcount 等代码,具体看代码中的注释
(2010.10.28 Update:优化了查询数)
function mytheme_comment($comment, $args, $depth){ $GLOBALS['comment'] = $comment; //主评论计数器初始化 begin - by zwwooooo global $commentcount; if(!$commentcount) { //初始化楼层计数器 $page = get_query_var('cpage')-1; $cpp=get_option('comments_per_page');//获取每页评论数 $commentcount = $cpp * $page; } //主评论计数器初始化 end - by zwwooooo ?> <li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>"> <div id="comment-<?php comment_ID(); ?>"> <div class="comment-author vcard"> <?php echo get_avatar($comment,$size='48',$default='<path_to_url>' ); ?> <?php printf(__('<cite class="fn">%s</cite> <span class="says">says:</span>'), get_comment_author_link()) ?> </div> <?php if ($comment->comment_approved == '0') : ?> <em><?php _e('Your comment is awaiting moderation.') ?></em> <br /> <?php endif; ?> <div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( 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 comment_text() ?> <div class="reply"> <?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?> </div> <div class="floor"><!-- 主评论楼层号 by zwwooooo --> <?php if(!$parent_id = $comment->comment_parent) {printf('#%1$s', ++$commentcount);} ?><!-- 当前页每个主评论自动+1 --> </div> </div> <?php }
3. 从上面代码可以看出我给楼层号特意加上一个 div 来显示,如果你的主题评论结构够标准,那么可以参考下面的 css
ol.commentlist li div.floor{position:absolute;top:0;right:0;}
OK,搞定,有兴趣的朋友玩玩吧,这个唯一不好的就是会增加数据库查询次数,不过这应该是微不足道。
zww
赏
oooo
or
- 本文标题:只在WP主评论加上楼层号的方法(支持评论分页)
- 本文链接:https://zww.me/archives/25161
- 发布时间:2010年05月25日 14:55
- 版权声明:除非注明,文章均为 zwwooooo 原创,转载请以链接形式标明本文地址!
請問一下,如果要實現這個功能,是直接拿你的代碼複製貼上嗎?
因為我照著貼上之後,樓層整個變成負的,而且是倒序,沒辦法跟你的留言一樣效果
這是我的blog顯示頁面
http://blog.mukispace.com/do-not-come-alone/
@muki
抱歉,剛嘗試了一下,發現是我沒開評論分頁。開了之後就會正了,但是另外一個問題出現了
就是我的留言還是沒有依序出現
不是1、2、3...這樣的次序,而是1、3、....
@muki
貌似是你没有开启嵌套,你只是定义了回复样式(你的回复也是主评论,而你定义的主评论没有显示楼层号吧)
@zwwooooo
先謝謝你的回覆~
我在後台有開啟嵌套回覆(預設兩層),可以看到我一樓下面有一個"muki reply"的地方,那個就是用嵌套回覆的留言,只是我把一些資訊隱藏起來~~~
@zwwooooo
看到你的測試了
我終於知道問題出在哪兒了...
你說的沒錯,之前那句話非嵌套回覆,我剛剛啟用之後,忘了那句不是嵌套所留的留言。
真的很抱歉造成你的困擾~~~
也謝謝你願意幫我測試!!
@muki
看来是你的评论结构样式问题,我回复后的样式和主评论一样。另外博主的回复会变成子评论的样式,而评论又属于主评论,加上你隐藏了floor这个div,所以第2个楼层号没显示出来。
看来是你的评论结构搞乱了。
@zwwooooo
是阿...因為我本來是打算用template tag的login函式,判斷只有管理者登入才會出現reply的字樣。
結果沒想到他的判斷方法不是管理者登入,而是只要有登入wordpress就會出現reply可以點選...:(
@muki
判断管理者?很简单吧
[...] 這是我參考的文章:只在WP主評論加上樓層號的方法(支持評論分頁),不過要使用這個方法的話,請先開啟評論分頁(後台→設定→討論)。如果你跟我一樣不想使用評論分頁的話,可以使用他提供的語法再做一點小修改,將$commentcount = $cpp * $page; 改成 $commentcount = 0; 即可。這邊要謝謝風痕影的幫忙:)。 [...]
[...] http://zww.me/archives/25161 alimama_pid="mm_10147772_223266_1873839"; alimama_titlecolor="0000FF"; alimama_descolor [...]
各种高级呀,非得在后台启用分页才能正常利用。
@不羡鱼
因为用了分页参数
我是搜索来的,感谢了
诚祝来年快乐、家庭幸福!
平安,如意!
@踏浪者
同祝!
[...] 只在WP主评论加上楼层号的方法(支持评论分页) [...]
是否把那些代码加入到function.php中?不过我把它们加入到function.php中后,评论出问题了
@亿品元素
说明你没加好。
求救!!~发现我的主题中的functions.php 没有~mytheme_comment 回调函数~~ 要怎样才能显示 楼层~~
@Junan
没有自己写个评论结构进去
@zwwooooo
太复杂了~
@Junan
不懂的话就复杂点,不过可以考虑copy
@zwwooooo 很多主题的参数不同~~我换了主题默认就有了~哈哈~
@Junan
你用的是mg12的主题了?哈,不过那楼层号是直接计数得出的,子评论也计数,如果我本来是3,如果我在3前面插入个子评论,那么我就又变成4了。也就是说你所用主题自带的计数器是针对老评论结构(非嵌套),我记得mg12说过他不喜欢嵌套,所以他的主题都没加支持。
@zwwooooo
高手果然是高手~确实MG12的主题连ADMIN评论也记上了~~那我想请教一下~此文的数据支持MG12的主题么?
@Junan
需要修改,稍微麻烦点吧,具体没修改过。
@zwwooooo
那算了~~博客刚刚稳定下来~~就不折腾了~迟点再折腾~到时可能要请教您了~
@Junan
慢慢折腾
@zwwooooo
HELP~~发现我的主题中的functions.php没有mytheme_comment函数~~怎么办~~
@Junan
1. 自己加
2. 换主题
3. 花钱请别人帮你加
@zwwooooo
那就不折腾了~折腾另一个算了~
@Junan
你用的不是mg12的嘛,有这个函数,只是函数名不同吧,具体看comments.php的回调函数名
@zwwooooo
是呀~好的~谢谢提醒了~改天再折腾了~
你这个有问题的,如果评论不分页,就会出现负数
应该把
改成
@gry
但我这不会出现这个情况,按道理$page不会小于0
@zwwooooo
不分页时page应该等于0吧,而你又在后面减了1
@gry
只有一页时get_query_var('cpage')的值是1,所以要减 1 处理,然后计数器得到0值,没有错。。
@zwwooooo
如果没开启评论分页get_query_var('cpage')的值是0
@gry
呵呵,这里的代码针对开启嵌套
@gry
我也发现这个问题了,如果没有开启分页显示评论的话,会出错的。不过不知道为什么,我这里的page永远是-1,奇怪了。
@gry
我再次验证了一下,我发现,如果没有开启分页显示评论的话,get_query_var()返回的是null。
@Laycher
分页也要开启,代码木有做判断。看来要抽时间完善下
可不可不以帮我看下怎么回事,楼层的位置css里不会改,能帮下忙吗,谢谢了。
http://yc4u.com/archives/492.html
@艺创网
你好像没加楼层代码
求解为Ajax comments评论增加楼层的方法。
@Allan
我这个不就是ajax评论提交么?
一定要开启评论分页才行的吗?不开启的话,为什么是从高到低,比如我的是分页15楼。然后第一层就是14楼了,何解。。
@扣剑
一定要分页,不分页需要改改代码
@扣剑
不分页只要加个计数器就行了,简单的很。
请教一下,我几乎是完全按你的代码copy的,但是在我那里有点问题,无分页是正常,第一楼是最旧的评论。但是如果有分页,就不正常了,第一楼不是最新评论,也不是最旧评论,评论楼层会随着评论的增加而序列变动,请帮忙看看http://www.epinv.com/post/595.html/
后台的评论那里设置的是“默认显示最后页面”,顶部显示“最新评论”其实我几种组合都试过,还是不能和你现在的评论这样显示,我就想楼层数随着评论的增加而变化,只有这样在有需要时才好告诉别人在第多少个楼层的留言内容
我现在的楼层是评论一个,楼层变化一次,都不是固定的
评论框的邻居我去看望过了,你懂的
@亿品元素
感谢!
博主知道我那啥原因引起的么??
@亿品元素
通常WP开启评论分页、显示最新的评论就OK的,我去你那看了,也没发现神马问题啊?
这么久过去了,这条折腾偶还是搞不定……
@有点蓝
厄,有这么难么?很简单的
@zwwooooo
真是……会者不难。找了无数个线索,从万戈的此文里找到答案了。http://wange.im/diy-wordpress-comment-style.html
@有点蓝
原来你不懂回调函数啊……囧
呵呵是啊是啊,看了好多遍你这篇文章,好不容易注意到一个“mytheme_comment 回调函数”,然后才知道问题出在哪儿。
@有点蓝
要仔细看文章
这个Ajax评论楼层能更新么
@chungee
不能,这不是为ajax设计的