WordPress 嵌套回复
WordPress 2.7 开始引入了原生的嵌套回复功能. 这是一个有争议的功能, 也是制作主题中一个难度较高的模块, 所以大家对它一直讨论不断.
要不要使用嵌套回复? (优缺点对照)
一部分人对这个功能垂涎已久, 在 WordPress 原生支持嵌套回复之前就尝试使用一些插件来支持该功能. 嵌套回复有很多优点:
1. 它可以提高用户体验, 调动访客回复的积极性, 从而增加评论的数量, 能让博客变得像社区一样活跃.
2. 博客的回复邮件通知功能越来越被重视, 因为它可以为你挽留一些游客. 另外评论者发表评论后也不用经常回来查看是否被答复, 可以在一定程度上提高互动性. 嵌套回复可以有针对性的对评论进行答复, 评论者只要收到邮件便可知其所答.
另一部分人不使用嵌套回复, 我就是其中之一. 为什么呢? 且听我慢慢道来. 任何事物都有其利弊, 嵌套回复也存在一些缺点:
1. 嵌套回复是一种依赖程序的显示结构, 也就是说, 只要你使用了一次, 以后必须使用, 否则评论的顺序就乱了. 假设现在有 A, B, C 三人, 他们都进行了一次评论, 操作如下:
A 添加了一条评论.
B 也添加了一条评论.
C 回复了 A 的评论.
如果主题支持嵌套回复, 会得到以下的显示结构:
A
C
B
但如果主题不支持嵌套, 则会显示如下:
A
B
C
也就是说, 页面结构将变得无比的混乱, 你不得不让当前主题支持嵌套回复, 或者使用插件对其进行支持. 这就是对程序的依赖, 除非精通其制作原理, 否则它会限制你对主题和插件的选择.
2. 嵌套回复有针对性的回复功能 (针对某条评论进行回复) 是它的优势, 同时也是他的劣势. 如果有 100 个人在你的一篇文章中发表了评论, 并且你习惯对大部分评论都进行回复, 那是不是你也需要回复差不多 100 次? 如果这样的话, @ 回复比嵌套回复更适合你.
3. 嵌套回复依赖浏览器对 JavaScript 的支持.
我不使用嵌套回复也是因为前两个原因, 我不敢确定自己以后会一直使用嵌套回复, 并且在我的回复者中, 经常出现几个人提问同一个问题. 使用 @reply 是一个折中的选择, 我可以在一个回复中回答网友的评论, 并且我无需对相同的提问进行多次回答; 另外, 通过一些插件, 我同样可以实现回复邮件通知的功能, 仅是邮件内容稍为复杂罢了.
怎样将嵌套回复功能集成到主题中?
在主题中实现嵌套回复的方法有二, 包括 WordPress 提供的默认方法和自定义的回调方法. 下面我会讲解一下如何实现起嵌套结构, CSS 部分请自行研究.
默认方法:
WordPress 提供的基本的嵌套风格, default 主题用的就是这种模式.
优点: 方便使用, 减少代码量.
缺点: 代码结构不好, 不可能适合所有的主题.
实现步骤如下:
1. 在 header.php 的 <?php wp_head(); ?> 前方添加以下代码.
<?php if(is_singular()) wp_enqueue_script( 'comment-reply' ); ?>
其作用是加载嵌套回复所需的 JavaScript 代码. (也就是说, 如果浏览器不支持 JavaScript, 嵌套回复就没法实现)
2. 在 comments.php 文件的顶部添加以下代码.
<?php if (!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME'])) { die (__('Please do not load this page directly. Thanks!')); } ?>
3. 在 comments.php 文件的评论列表元素中添加以下代码调用所有相关评论.
<?php wp_list_comments(); ?>
4. 在 comments.php 的 id="commentform" 元素内部添加以下代码.
<?php comment_id_fields(); ?>
和表单的适当取消回复按钮, 代码如下.
<?php cancel_comment_reply_link() ?>
5. 将所有调用评论部分的代码由
<?php comments_template(); ?>
修改为一下代码
<?php comments_template('', true); ?>
回调方法:
在基本嵌套的基础上, 定义 callback 方法以重新定义评论的内容和布局.
优点: 灵活多变
缺点: 增加大量代码
关于自定义嵌套回复, 我在之前的文章 "更新至 WordPress 2.7 正式版" 中误报了一个 bug. 在此, 我向所有读过此文的读者道歉.
1. 在默认方法的基础上, 添加一个回调函数, 以取代 WordPress 默认的评论布局. 我在 function.php 中添加了一个名为 custom_comments 的方法. 这里需要注意, 请不要加上结束的 </li> 标签, 我会在后续文章中说明具体为何不能加上.
2. 在 comments.php 中将
<?php wp_list_comments(); ?>
修改为以下代码以调用自定义的 custom_comments 方法
<?php wp_list_comments('callback=custom_comments'); ?>
详细代码可以参考本人制作的 Blocks 主题.
什么主题适合添加嵌套回复?
在主题中添加嵌套回复是个麻烦事, 它很折腾人, 而且会打乱整个主题结构, 直到现在我还在怀疑官方是否应该原生地支持嵌套回复. 但既然支持了很应该尝试一下, 那是不是所有的主题都适合添加嵌套回复功能? 我觉得不是.
对于一些图片较多的, 或者评论页面结构复杂的主题, 显然是不适合的, 这就是为什么我一直不在 iNove 添加嵌套回复功能的原因. 但是对于一些不依赖图片的主题, 如 Blocks 就很适合添加.
另外, 还需要根据你的需求判断是否支持嵌套回复, 支持多少层的回复? 最深层次是 10, 但我们可以只支持到第二或者第三层, 以降低开发成本.
后记
不知为何, 没有使用嵌套回复的我被多次问及相关的问题. 因为嵌套回复实现复杂, 难以维护, 和其他一些原因, 很多主题没有支持嵌套回复, 但很多人却是对它情有独钟, 我觉得可以将我的理解和大家分享一下.
接下来, 我还会另起文章讲解一下 "嵌套回复的工作原理" 和 "如何在兼容多个 WordPress 版本的前提下实现嵌套回复", 如果你有更好的建议或者任何意见, 请在此留言.
好东西,收藏了
学习中,这个功能不错的。
我想要嵌套回复
终于搞定了,谢谢~
本来打算弄成嵌套回复的, 看了博主的文章, 放弃了..
不懂,直接插件完成
@ElvisZhu
我是来试回复看效果的,你可以把我当成打酱油的!谢谢!
@ElvisZhu
试试回复了
我也觉得
朋友你好 你能帮我看看我的网站http://www.dream58.net 为啥没有回复功能呢!跟我用同样主题的他们都有的 我的为啥没有呢 谢谢
你现在的这个评论模式就比较好
請問怎麽判斷嵌套是否到達上限?比如我在後台設定只能嵌套2層,當到第3層的時候便不能再嵌套了,WP是如何得知呢?如果我要人手判斷,應如何做?
了解了
@yimu
代码, ... 我发布的主题里面有代码, 你下载一个来分析吧.
@Dim
不是不想, 制作不成插件.
@星点
私人主题, 不提供分享.
@AnQ
可以请人的, 呵呵~
@wuleilei
我写过一篇关于嵌套回复原理的文章.
http://www.neoease.com/wordpress-walker-comments/
@Nox
谢谢帮忙回答这么多问题.
@ckqee
祝你成功.
@junghae
嵌套回复太多副作用, 不用~
@mg12 mg12,用嵌套吧,别犹豫了,哈哈!你现在的我看的头晕,相信其应该有其他人跟我一样感觉的吧!!!
@园子
这个呢...
@neo
回复效果看看,,准备弄这个也可以 这个简单
很好,谢谢了。
可以考虑递归,我正打算把评论改成嵌套回复,折腾
不知道博主能不能提供非WordPress的评论嵌套制作思路呢?
@Nox 多谢多谢。哈,到你的站看看去。哈
@锋
mg12的找不到了,我发木木的教程给你吧
http://immmmm.com/sharing-articles-telescopic-effect-code.html
@Nox 教程是哪篇呀。发我下。哈。多谢
@锋
一般提供下载的主题没有这个功能,但是mg12已经提供了修改教程,可以自己DIY。
@Nox 难怪这么强。原来是高人呀。哎。初来乍道,失敬失敬。不知道下载的有没有加那个日志收起展开功能。
@锋
你问的实在是太经典了。。。 mg12制作的iNove主题,在wp官方下载排行榜首居第一。你认为这个主题是他下载的,还是自己制作的?
你的主题是下的还是自己做的呀,真不错
留爪,备用,晚上回去白老鼠
评论的嵌套,这个好难啊,对于我这样的菜鸟,无法实现这样的修改,叹
这今天正在搞这个,太折腾了算了我还是用插件吧
呵呵,很喜欢你现在用的主题,能分享吗?哈哈
能下载源码不
太有用了
thanks admin
Are you really cool
非常喜欢您这个回复评论模式,
是否能制作以插件形式提供呢?
想问一下,@reply是如何实现的,代码或是插件
还有quote是如何实现的呢
@闻人卯
我修改了 comment vote 这个插件.
@houkai
这个不是 bug, 是 JavaScript 被重载了, 暂时我还不想处理, 正在考虑替代方法.
报告bug 这篇日志打开默认评论是第二页 如果翻到第一页 回复的显示层就不会出现了
请教博主,你的评论回复怎么弄的,能否写个菜鸟教程!
@LAONB
哈哈, 我喜欢用隐喻, 职业病.
@neo
WOW, how many languages you can read?
Great tutorial.
Will test it if got free time.
I will consider also your pros & cons.
Thanks.