不用插件自制 WordPress 倒序留言簿

这篇文章是我修改 留言页面 的一个总结分享,可以生成一个倒序显示的留言簿,而且输入框在评论列表上方。概要如下:建立 一个页面模板和一个评论模板,让前者 指定 后者,修改 评论模板里面的数据读取方式,如果有评论编号的话也要 倒序 一下,最后 调整 一下布局让评论输入框位于评论列表的上方。

建立一个独立的页面模板

通常文章的评论是顺序显示的,所以我们需要另建立一个倒序页面模板给留言簿。当然如果有遏制沙发党的需要也可以全站用这个方法 👿 把主题的根目录下的 single.php 或 page.php (须有评论功能) 复制重命名为 guestbook.php, 把 comments.php 复制重命名为 gbcomments.php, 名称可以自定。在 guestbook.php 的开头加入:

<?php /* Template Name: 留言簿 */ ?>

然后在它的末尾找到如下代码,另外指定一下评论调用:

<?php comments_template(); ?> //替换成:
<?php comments_template('/gbcomments.php'); ?>

新建留言簿页面

新建页面的时候选择页面模板 (Page Template) 为“留言簿”,这样它就具有了单独的页面和评论结构,供下面的步骤调试用。页面内容可以是留言簿说明。

修改 gbcomments.php 里面的评论顺序

也很简单,只需要在文件中替换一处代码:

<?php foreach ($comments as $comment) : ?>
//替换成:
<?php foreach (array_reverse($comments) as $comment) : ?>

如果有评论编号,也需要改

如果代码没写错的话,现在评论应该倒过来排了噢。但是还有个问题,不少模板的评论是带有编号的,编号还没有倒过来。有点程序基础的朋友不用想也知道,原始代码是定义了一个初始为 0 的变量 $iCommentCount (名字可能不同), 自增一次输出一次,循环就好了:

$iCommentCount = 0;
//...
<?php $iCommentCount++; echo($iCommentCount); ?>

需要改成初始值为评论总数,输出一次自减一次,循环:

$iCommentCount = get_comments_number();
//...
<?php echo($iCommentCount); $iCommentCount--; ?>

把评论输入框搬到评论列表的上方

好了,到这里基本上就改完了,最后这个步骤要看具体模板结构,看着改改就好,出错了大不了重来,而且调试的部分是独立的,不会影响到正常访问。

这样一个留言簿就做好了,比我以前用的 cbox 那可是好太多了 😛 而且最新留言也会出现在普通文章的评论一起,头像什么的更是不在话下。这个功能如果有插件能实现,估计也没有自己改好吧,主题关联度太大了。

最新评论

  • fisio 可不,Google Reader 都去世十年了… Google Reader 的分享和效率
  • 轻重 天哪!今天整理Evernote,发现这条2010年的剪藏笔记,点击连接,原网站还在!12年了,中文互联网早已面目全非! Google Reader 的分享和效率
  • 小波 重新改博客,看看以前的wp小伙伴的博客,发现绝大部分都关了,没想到你的还在,只是停在11年了 我为什么爱 Twitter
  • 心灵博客 当年有这个效果已经很不错哦 diy 山寨投影家庭影院
  • fisio 可不咋地!您也是老司机了 我为什么爱 Twitter

发表您的评论

评论将回复给

😀🙂😯😁🙁😄😆😝😜👍🌈💖🎂

目前有 66 条评论

    1. 那应该不是本文提到的修改改出的问题,仔细对比一下修改后的,和原来的,如果找不出毛病,email 给我看看 😀

      1. 哦,我觉得是 gbcomments.php post 到wp-comment-post 然后 wp-comment-post 认为是comments.php post 过来的,就把结果返回给comments.php而没找到gbcomments所以这样

    2. 我跟你情况一样,但是我把页面自定义链接(留言改成guestbook)后就不会转到首页了,不知道是不是对中文的支持问题?应该不会吧 呵呵。
      但是我的倒序功能始终没成功,郁闷

  1. 谢谢你总结 抱走了~
    经过我的应用
    也要因地制宜
    譬如有的巢型留言板
    他的那条语句是

    总之原理是一样的,都是修改这个函数
    因地制宜 🙂

    谢谢你~

      1. 那 用了 这个 wp_list_comments 的 那有没有可能按照你的修改步骤来进行修改实现呢。
        貌似结构上有所不同 所以还请回复。 谢谢……

        1. 我没有研究过 wp_list_comments, 这个函数的特点就是一句搞定,但是提供超多的 class 可供样式化。搜一下这个函数名找些资料看看吧…

  2. – -,估计被认为是垃圾评论了
    去掉所有贴出来看下行不行
    div id=”comments_wrap”
    ol class=”commentlist”
    ?php wp_list_comments(‘avatar_size=48&callback=custom_comment’); ?
    /ol
    div class=”navigation”
    div class=”fl”></div
    /div

    1. 倒不是垃圾评论,是因为大部分 标签被过滤掉了,不能插入代码哦,要贴只能用转义符,中间不空格的 &l t; = <, &g t; = >

  3. 您好,我按照您这篇文章中的方法修改了我的blog,其他部分一切正常,但是修改comments_template这一步的时候,修改完成后进入留言板页面会出现这样一句提示,PHP Error Message Warning: Division by zero in /home/a6197163/public_html/wp-content/themes/kanata/guestbook.php on line 33,我查看了一下,line 33就是comments_template这一句命令。您能帮我看看是什么原因吗?我想可能是我模板的comments比较特殊,如果您需要进一步信息的话,我可以用邮件发给您。

    1. 我想可能是这样的,wordpress 现在已经发生了一些变化,引用模板的时候在后台已经没有模板选择了,不过还是可以把通用页面的 php 复制一份通过命名来实现,比如 page-guestbook.php 自动作为 省略名为 guestbook 的页面的模板,不再需要写模板名。试试看这个办法吧?

  4. 由把评论输入框搬到评论列表的上方
    好了,到这里基本上就改完了,最后这个步骤要看具体模板结构,看着改改就好,出错了大不了重来,而且调试的部分是独立的,不会影响到正常访问。搜索而来,但是在这里并没有找到方案。。。老大忘记写上了吧 🙁




还有 6 条 pingbacks 从其它网站引用了本文