Home > WP Trick > 无需插件创建 WordPress 倒序留言簿

无需插件创建 WordPress 倒序留言簿

July 3rd, 2009 Huey, 5,590 Views Leave a comment Go to comments

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

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

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

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

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

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

修改 gbcomments.php 里面的评论顺序
也很简单, 只需要在文件中替换一处代码:

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

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

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

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

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

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

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

comments_template 模板函数

不知道大家有没有想过为什么独立文章页 single.php 可以留言, 而页面页 page.php 不能留言呢? 差别就是下面这段独立文章页 single.php 里有, 但页面页 page.php 没有的代码:

1
<?php comments_template(); ?>

这其实是调用主题的留言模板 comments_template. 我们将其添加到页面页 page.php 相应的位置, 即可增加页面页 page.php 的留言功能. 步骤如下:

找到

1
<div class="entry">

后面第一个

1
</div>

标签, 将上述调用留言模板的代码复制到它下面并保存. End…

声明: 本站遵循 署名-非商业性使用-相同方式共享 3.0 共享协议. 转载请注明转自 玩软部落.
  1. July 3rd, 2009 at 12:18 | #1

    学习了,如果能用在zblog就更好了

  2. July 4th, 2009 at 07:43 | #2

    @仁心博客
    惭愧啊, 初次建博就选择了 wp, 对其它博客程序无知~ 留言簿归根到底 没有什么, 简单的说一个页面就可以, 只是改个名罢了.

  3. July 4th, 2009 at 11:02 | #3

    我只是将 comments_template() 这个函数改了改。在comments_template( $file = ‘/comments.php’, $separate_comments = false, $desc = ” )最后加了个参数,默认空。然后这个函数中的sql语句 ” ORDER BY comment_date_gmt “(注意引号前留空格)后加上 .$desc ,如果想将留言簿倒序的话这样调用:, 参数加在最后是保证其兼容性。
    我的个人网站tuibang.com还在制作中。调整样式很麻烦哪。

  4. July 4th, 2009 at 11:06 | #4
  5. July 4th, 2009 at 11:07 | #5

    tuibang :@tuibang 应该是tuibang.com

    貌似。。。html都不会写了。多发几条评论,主人勿怪啊。。。

  6. July 5th, 2009 at 09:36 | #6

    @tuibang
    不怪不怪, 哈, 上述的代码貌似不全面.
    comments_template(“, true) 函数其实这样的, 前者指定留言模板的位置, 后者指定是否区分留言, 当然, 默认是 false 的, 详细如下:

    1
    
    comments_template([string $file = '/comments.php'], [bool $separate_comments = false])
  7. July 7th, 2009 at 09:14 | #7

    嘿~

    这个方法蛮不错的

  8. July 10th, 2009 at 20:38 | #8

    你的blog主题inove改的不错,我的也改了些,有空可以来看看。有机会的话想请教一下。

  9. July 11th, 2009 at 07:39 | #9

    @先看看
    还好吧, 自己看着舒服就行, 嘿~

  10. evlos
    October 5th, 2009 at 16:40 | #10

    学习了 ~ 我去试试看 ~~

  11. October 5th, 2009 at 21:12 | #11

    方法 很多 见仁见智啊 ,其实 自己有时候倒是蛮习惯最初的排序!

  1. No trackbacks yet.
How do I change my avatar? Go to gravatar.com and upload your preferred avatar. What is Gravatar?