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

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

前面我们制作了文章单页模板,我们可以发现单页模板的代码跟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 回帖 • 315 关注

相关帖子

欢迎来到这里!

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

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

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

  • someone

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

推荐标签 标签

  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    915 引用 • 931 回帖
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    6546 引用 • 29416 回帖 • 244 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    215 引用 • 462 回帖 • 1 关注
  • 自由行
    1 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    82 引用 • 122 回帖 • 620 关注
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 3 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 623 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 643 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 2 关注
  • 导航

    各种网址链接、内容导航。

    37 引用 • 168 回帖
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 451 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    9 引用 • 32 回帖 • 166 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 602 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 133 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    123 引用 • 168 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    492 引用 • 1383 回帖 • 375 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖 • 1 关注
  • HBase

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

    17 引用 • 6 回帖 • 45 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖 • 1 关注
  • 房星科技

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

    6 引用 • 141 回帖 • 559 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 511 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    169 引用 • 799 回帖
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1083 引用 • 3461 回帖 • 286 关注
  • Markdown

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

    163 引用 • 1450 回帖
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 350 关注