无需插件创建 WordPress 倒序留言簿
这篇文章是 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…
学习了,如果能用在zblog就更好了
@仁心博客
惭愧啊, 初次建博就选择了 wp, 对其它博客程序无知~ 留言簿归根到底 没有什么, 简单的说一个页面就可以, 只是改个名罢了.
我只是将 comments_template() 这个函数改了改。在comments_template( $file = ‘/comments.php’, $separate_comments = false, $desc = ” )最后加了个参数,默认空。然后这个函数中的sql语句 ” ORDER BY comment_date_gmt “(注意引号前留空格)后加上 .$desc ,如果想将留言簿倒序的话这样调用:, 参数加在最后是保证其兼容性。
我的个人网站tuibang.com还在制作中。调整样式很麻烦哪。
@tuibang
应该是tuibang.com
貌似。。。html都不会写了。多发几条评论,主人勿怪啊。。。
@tuibang
不怪不怪, 哈, 上述的代码貌似不全面.
comments_template(“, true) 函数其实这样的, 前者指定留言模板的位置, 后者指定是否区分留言, 当然, 默认是 false 的, 详细如下:
嘿~
这个方法蛮不错的
你的blog主题inove改的不错,我的也改了些,有空可以来看看。有机会的话想请教一下。
@先看看
还好吧, 自己看着舒服就行, 嘿~
学习了 ~ 我去试试看 ~~
方法 很多 见仁见智啊 ,其实 自己有时候倒是蛮习惯最初的排序!