wordpress 主题制作教程(十一):评论模板 comments.php

本贴最后更新于 4107 天前,其中的信息可能已经物是人非

前面我们制作了文章单页模板,我们可以发现单页模板的代码跟index.php差不多,不过今天我们让它们的差别大一点,我们给文章模板加入评论表单,让访客可以发表评论。

首先在主题文件夹下面新建一个文件comments.php,然后打开single.php文件,将里面的评论代码剪切出来,粘贴到comments.php文件中,要剪切的代码如下:

 
<!– Comment’s List –>   
   <h3>Comments</h3>   
   <div class="hr dotted clearfix">&nbsp;</div>   
   <ol class="commentlist">   
       <li class="comment">   
           <div class="gravatar"> <img alt="" src=’images/gravatar.png’ height=’48′ width=’48′ /> <a class="comment-reply-link" href=&quot;>Reply</a> </div>  
           <div class="comment_content">   
               <div class="clearfix"> <cite class="author_name"><a href="">Joe Bloggs</a></cite>   
                   <div class="comment-meta commentmetadata">January 6, 2010 at 6:26 am</div>   
               </div>   
               <div class="comment_text">   
                   <p>Donec leo. Aliquam risus elit, luctus vel, interdum vitae, malesuada eget, elit. Nulla vitae ipsum. Donec ligula ante, bibendum sit amet, elementum quis, viverra eu, ante. Fusce tincidunt. Mauris pellentesque, arcu eget feugiat accumsan, ipsum mi molestie orci, ut pulvinar sapien lorem nec dui.</p>   
               </div>   
           </div>   
       </li>   
   </ol>   
   <div class="hr clearfix">&nbsp;</div>   
   <!– Comment Form –>   
   <form id="comment_form" action="" method="post">   
       <h3>Add a comment</h3>   
       <div class="hr dotted clearfix">&nbsp;</div>   
       <ul>   
           <li class="clearfix">   
               <label for="name">Your Name</label>   
               <input id="name" name="name" type="text" />   
           </li>   
           <li class="clearfix">   
               <label for="email">Your Email</label>   
               <input id="email" name="email" type="text" />   
           </li>   
           <li class="clearfix">   
               <label for="email">Your Website</label>   
               <input id="website" name="website" type="text" />   
           </li>   
           <li class="clearfix">   
               <label for="message">Comment</label>   
               <textarea id="message" name="message" rows="3" cols="40"></textarea>   
           </li>   
           <li class="clearfix">   
           <!– Add Comment Button –>   
           <a type="submit" class="button medium black right">Add comment</a> </li>   
       </ul>   
   </form>  

然后在single.php文件原来的位置添加代码:

<?php comments_template(); ?>  

comments_template()函数默认的就是加载主题文件夹下面的comments.php文件,这个函数也是可以带参数的,以便让你可以加载别的文件,比如某些页面你需要加载一个不一样的评论表单,你就需要使用comments_template()带上参数,这里不细说。
为了防止某些恶意用户直接打开评论文件,我们在comments.php的头部添加代码:

 
<?php   
    if (isset($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME']))   
        die ('Please do not load this page directly. Thanks!');   
?>  

修改评论列表

wordpress有自动输出评论列表的函数wp_list_comments(),所以我们将原来的评论列表代码删除,换上这个函数,但是我们还需要加一些判断功能,比如评论需要密码才能查看、评论已经关闭、还没有评论这几个情况都要有不同的输出,所以将原来的评论代码:

 
<li class="comment">   
    <div class="gravatar"> <img alt="" src=’images/gravatar.png’ height=’48′ width=’48′ /> <a class="comment-reply-link" href=&quot;>Reply</a> </div>   
    <div class="comment_content">   
        <div class="clearfix"> <cite class="author_name"><a href="">Joe Bloggs</a></cite>   
            <div class="comment-meta commentmetadata">January 6, 2010 at 6:26 am</div>   
        </div>   
        <div class="comment_text">   
        <p>Donec leo. Aliquam risus elit, luctus vel, interdum vitae, malesuada eget, elit. Nulla vitae ipsum. Donec ligul  a ante, bibendum sit amet, elementum quis, viverra eu, ante. Fusce tincidunt. Mauris pellentesque, arcu eget feugiat accumsan, ipsum mi molestie orci, ut pulvinar sapien lorem nec dui.</p>   
        </div>   
    </div>   
</li>  

替换成:

 
<?php    
   if (!emptyempty($post->post_password) && $_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) {    
       // if there's a password   
       // and it doesn't match the cookie   
   ?>   
   <li class="decmt-box">   
       <p><a href="#addcomment">请输入密码再查看评论内容.</a></p>   
   </li>   
   <?php    
       } else if ( !comments_open() ) {   
   ?>   
   <li class="decmt-box">   
       <p><a href="#addcomment">评论功能已经关闭!</a></p>   
   </li>   
   <?php    
       } else if ( !have_comments() ) {    
   ?>   
   <li class="decmt-box">   
       <p><a href="#addcomment">还没有任何评论,你来说两句吧</a></p>   
   </li>   
   <?php    
       } else {   
           wp_list_comments('type=comment&callback=aurelius_comment');   
       }   
   ?>  

上面的wp_list_comments函数中我们家里两个参数,其中type=comment意思只输出评论,除了评论还有pings\trackback\ pingback等等什么的,callback=aurelius_comment意思是调用一个自定义的函数函数aurelius_comment来显示评论。
自定义的函数我们需要添加在主题的functions.php文件中,所以请在functions.php中的“?>”前面加上下面的代码,如果你的functions.php文件中已经存在了下面的代码,就不要再添加了:

 
function aurelius_comment($comment, $args, $depth)    
{   
   $GLOBALS['comment'] = $comment; ?>   
   <li class="comment" id="li-comment-<?php comment_ID(); ?>">   
        <div class="gravatar"> <?php if (function_exists('get_avatar') && get_option('show_avatars')) { echo get_avatar($comment, 48); } ?>   
 <?php comment_reply_link(array_merge( $args, array('reply_text' => '回复','depth' => $depth, 'max_depth' => $args['max_depth']))) ?> </div>   
        <div class="comment_content" id="comment-<?php comment_ID(); ?>">      
            <div class="clearfix">   
                    <?php printf(__('<cite class="author_name">%s</cite>'), get_comment_author_link()); ?>   
                    <div class="comment-meta commentmetadata">发表于:<?php echo get_comment_time('Y-m-d H:i'); ?></div>   
                    &nbsp;&nbsp;&nbsp;<?php edit_comment_link('修改'); ?>   
            </div>
        &lt;div class=&quot;comment_text&quot;&gt;   
            &lt;?php if ($comment-&gt;comment_approved == '0') : ?&gt;   
                &lt;em&gt;你的评论正在审核,稍后会显示出来!&lt;/em&gt;&lt;br /&gt;   
    &lt;?php endif; ?&gt;   
    &lt;?php comment_text(); ?&gt;   
        &lt;/div&gt;   
    &lt;/div&gt;   
&lt;/li&gt;   

<?php } ?>

上面的自定义函数中用到的几个函数的说明如下:

 
<?php      
get_avatar($id_or_email,$size,$default, $alt);      
//$id_or_email这个参数必须,可以使一个用户ID、一个email,或者直接一个comment对象,上面代码就是直接将评论对象作为参数      
//$size,这个参数就是头像大小,默认是96,上面代码设为32      
//$default 一个图片地址,就是用户没有头像是显示的图片,默认是后台设置的那个      
//$alt 就是图片的$alt信息了,我觉得alt信息应该用评论者名字    
?>

<?php comment_reply_link();
//回复链接
?>

<?php
get_comment_author_link();
//获取评论者的链接
?>

<?php
get_comment_time();
//获取评论时间
edit_comment_link();
//编辑评论的链接
comment_text();
//输出评论内容
?>

添加了上面的代码评论已经能正确显示了,接下来添加提交评论的表单。
评论表单
将原来comments.php中的评论表单代码删除:

 
<!– Comment Form –>   
<form id="comment_form" action="" method="post">   
    <h3>Add a comment</h3>   
    <div class="hr dotted clearfix">&nbsp;</div>   
    <ul>   
        <li class="clearfix">   
            <label for="name">Your Name</label>   
            <input id="name" name="name" type="text" />   
        </li>   
        <li class="clearfix">   
            <label for="email">Your Email</label>   
            <input id="email" name="email" type="text" />   
        </li>   
        <li class="clearfix">   
            <label for="email">Your Website</label>   
            <input id="website" name="website" type="text" />   
        </li>   
        <li class="clearfix">   
            <label for="message">Comment</label>   
            <textarea id="message" name="message" rows="3" cols="40"></textarea>   
        </li>   
        <li class="clearfix">   
            <!– Add Comment Button –>   
            <a type="submit" class="button medium black right">Add comment</a> </li>   
    </ul>   
</form>  

实际上你不需要再手动输入每个表单项了,新版的wordprss提供了一个非常方便的函数:comment_form(),添加代码如下:

 
<?php if ( comments_open() ) : ?>

<?php if ( get_option('comment_registration') && !$user_ID ) : ?>
<p><?php printf(__('你需要先 <a href="%s">登录</a> 才能发表评论.'), get_option('siteurl')."/wp-login.php?redirect_to=".urlencode(get_permalink()));?></p>
<?php else : ?>

<?php $defaults = array(
'comment_notes_before' => '',
'label_submit' => __( '提交评论' ),
'comment_notes_after' =>''
);
comment_form($defaults);
endif;
else : ?>
<p><?php _e('对不起评论已经关闭.'); ?></p>
<?php endif; ?>

可以看到上面的代码中也添加了判断,看是否允许评论,是否需要登录才能评论。
你完全可以通过comment_form()函数的各个参数再配合css输出一个个性化的表单,这在以后的教程中讲。

  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    45 引用 • 113 回帖 • 318 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • someone

    elseif ($co_number == 1)在线编辑 functions.php 改了首页的评论为中文,不知道为什么一会又自动改回去了。

  • someone

    你如果用的是 bae 的话是不能在线编辑的 ,你可以在 bae 版本控制哪里编辑,或者 svn 下来修改然后上传上去

推荐标签 标签

  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 522 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    330 引用 • 614 回帖 • 1 关注
  • OnlyOffice
    4 引用 • 27 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 44 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    161 引用 • 473 回帖
  • 笔记

    好记性不如烂笔头。

    303 引用 • 777 回帖
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 619 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    21 引用 • 140 回帖 • 24 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    163 引用 • 1450 回帖
  • 职场

    找到自己的位置,萌新烦恼少。

    126 引用 • 1699 回帖
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 5 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    1 引用 • 11 回帖 • 1 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 592 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 552 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 44 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 298 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • 996
    13 引用 • 200 回帖 • 1 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 25 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 22 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    18591 引用 • 69190 回帖 • 1 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    710 引用 • 1173 回帖 • 176 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖