首页 后端开发 php教程 WordPress中对访客评论功能的一些优化方法_php实例

WordPress中对访客评论功能的一些优化方法_php实例

Jun 07, 2016 pm 05:10 PM
php wordpress 评论

前几天见到某 Blog (忘记名字和网址了) 有一个相当实用的评论功能. 访客留言之后资料输入框会被隐藏起来, 如同登录了一般. 访客可以选择修改相关资料再进行评论. 给予访客很好的用户体验. 今天我将这个功能移植到了自己的主题上, 制作不难, 分享一下吧.

20151124150133394.png (445×225)

需求

细心的朋友可能已经注意到了: 当在某个 WordPress 发表评论后再次访问该 Blog, 资料就不需要再次填写, 因为它们都已经在资料输入框里面. 但没评论过的或者清除了 Cookie 之后, 资料输入框将空空如也.

1. 当访客的资料已经存在的情况下, 访客很少关注资料本身, 那些资料输入框就会变成 "碍眼的东西", 我们要想办法将它们隐藏起来. 同时, 我们需要将这位访客的名字显示出来, 否则他/她根本不知道自己的身份.

2. 访客有可能邮箱更换了, 或者就想换个酷点的名字, 此时的他/她肯定想更改一下那些资料. 所以要求有一些措施, 让访客可以重新看到资料输入框.

3. 对于那些从未提供资料的访客, 资料输入框必须让他们看到.

分析

由需求可以看到, 我们要处理的是两种状态的访客: 有资料的, 无资料的.
对于有资料的, 具有显示资料输入框 (显示昵称) 和 隐藏资料输入框 (显示昵称) 两种状态.
而无资料的访客只有显示资料输入框 (没有昵称) 一种状态.
好, 我们就为有资料的访客配备两个按钮 (更改和取消), 一个用来显示资料输入框, 一个用来隐藏它.

思路

1. 页面怎么写? 编码前, 我们还应该理一下头绪. 用伪代码吧.

if (有资料的访客) {
    放置访客昵称
    放置更改按钮 (点击后: 隐藏更改按钮, 显示取消按钮, 显示资料输入框)
    放置取消按钮 (点击后: 显示更改按钮, 隐藏取消按钮, 隐藏资料输入框)
}
放置资料输入框
if (有资料的访客) {
    隐藏取消按钮
    隐藏资料输入框
}
2. 怎么获知访客是否评论过? 前面已经谈到, 已评论访客的资料会在显示出来, 也就是说, 代码中已经实现了获取资料的方法. 那我们找找吧...

1

<input type="text" name="author" id="author" value="<&#63;php echo $comment_author; &#63;>" tabindex="1" />

登录后复制

就是它! $comment_author 是访客的昵称, 当它为空的时候就说明访客资料为空.

3. 有些控件又显示又隐藏的, 怎么弄呢? 我们不需要为此转跳页面, 用 JavaScript 吧. 我们可以写一个方法, 用来设定某些控件的显示与否, 只是一个很简单的方法:

1

2

3

4

5

6

7

8

/**

 * 设定控件的显示风格

 * @param id    控件的 ID

 * @param status  控件的显示状态 (显示时为 '', 隐藏时为 'none')

 */

function setStyleDisplay(id, status) {

 document.getElementById(id).style.display = status;

}

登录后复制

编码

接着干嘛? 大概可以写代码了. 看我的...

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

<!-- 有资料的访客 -->

<&#63;php if ( $comment_author != "" ) : &#63;>

 <!--

 转换显示状态用的 JavaScript

 Q1: 为什么这段代码放在这里呢&#63;

 A1: 因为只有当访客有资料时, 它才被用上, 这样可以减少无资料访客下载页面时的开销.

 Q2: 为什么不用外部文件将 JavaScript 放起来&#63; 也许那样维护起来更方便.

 A2: 因为它只在这个地方用到了. 而且加载文件的数量也会影响页面下载速度, 为了这么点字节的代码, 不值得新开一个文件.

 -->

 <script type="text/javascript">function setStyleDisplay(id, status){document.getElementById(id).style.display = status;}</script>

 <div class="form_row small">

 <!-- 访客昵称 (随便欢迎一下) -->

 <&#63;php printf(__('Welcome back <strong>%s</strong>.'), $comment_author) &#63;>

  

 <!-- 更改按钮 (点击后: 隐藏更改按钮, 显示取消按钮, 显示资料输入框) -->

 <span id="show_author_info"><a href="javascript:setStyleDisplay('author_info','');setStyleDisplay('show_author_info','none');setStyleDisplay('hide_author_info','');"><&#63;php _e('Change &raquo;'); &#63;></a></span>

  

 <!-- 取消按钮 (点击后: 显示更改按钮, 隐藏取消按钮, 隐藏资料输入框) -->

 <span id="hide_author_info"><a href="javascript:setStyleDisplay('author_info','none');setStyleDisplay('show_author_info','');setStyleDisplay('hide_author_info','none');"><&#63;php _e('Close &raquo;'); &#63;></a></span>

 </div>

<&#63;php endif; &#63;>

  

<!-- 资料输入框 -->

<div id="author_info">

 <div class="form_row">

 <input type="text" name="author" id="author" value="<&#63;php echo $comment_author; &#63;>" tabindex="1" />

 <label for="author" class="small"><&#63;php _e('Name'); &#63;> <&#63;php if ($req) _e('(required)'); &#63;></label>

 </div>

 <div class="form_row">

 <input type="text" name="email" id="email" value="<&#63;php echo $comment_author_email; &#63;>" tabindex="2" />

 <label for="email" class="small"><&#63;php _e('E-Mail (will not be published)');&#63;> <&#63;php if ($req) _e('(required)'); &#63;></label>

 </div>

 <div class="form_row">

 <input type="text" name="url" id="url" value="<&#63;php echo $comment_author_url; &#63;>" tabindex="3" />

 <label for="url" class="small"><&#63;php _e('Website'); &#63;></label>

 </div>

  

</div>

  

<!-- 有资料的访客 -->

<&#63;php if ( $comment_author != "" ) : &#63;>

 <!-- 隐藏取消按钮, 隐藏资料输入框 -->

 <script type="text/javascript">setStyleDisplay('hide_author_info','none');setStyleDisplay('author_info','none');</script>

<&#63;php endif; &#63;>

登录后复制


访客评论显示欢迎信息

20151124150152167.png (840×400)

关键问题:获取访客信息

花点时间去研究,其实整个实现过程并不复杂。这里的关键点是,如何判断访客已经在近期发表过评论。

当访客评论时,会在 Cookie 中保存评论者的信息。我们可以通过 Firebug 或者 Chrome 的 Developer Tool 来查看:

1

2

>>> document.cookie

"comment_author_bbfa5b726c6b7a9cf3cda9370be3ee91=helloworld; comment_author_email_bbfa5b726c6b7a9cf3cda9370be3ee91=dangoakachan%40gmail.com; comment_author_url_bbfa5b726c6b7a9cf3cda9370be3ee91=http%3A%2F%2Fexample.com"

登录后复制

从上面可以看到有三个与评论相关的信息,它们分别是comment_author,comment_author_url,comment_author_email。不过中间夹杂着字符串 bbfa5b726c6b7a9cf3cda9370be3ee91,我们可以看下 default-constants.php 的代码,就可以知道这一段叫做 COOKIEHASH,它的值是博客 URL 的 md5值。

1

2

3

>>> import hashlib

>>> hashlib.md5('http://localhost/wordpress').hexdigest()

'bbfa5b726c6b7a9cf3cda9370be3ee91'

登录后复制

我们只需要了解到这一点就可以了,因为这些信息 WordPress 已经在comments_template方法中,通过wp_get_current_commenter为我们从 Cookie 中解析了访客的信息。例如,我们可以在 comment.php 文件中,直接用$comment_author来获取保存在 Cookie 中的访客姓名。

代码实现

接下来的实现就很简单了,我们通过判断$comment_author变量值是否为空,来确定访客是否在近期有评论(有 Cookie)。

1

2

3

if (!is_user_logged_in() && !empty($comment_author)) {

...

}

登录后复制

如果有,则在评论框上方显示欢迎信息:

1

2

3

4

5

6

7

if (!is_user_logged_in() && !empty($comment_author)) {

  $welcome_login = '<p id="welcome-login"><span>欢迎回来, <strong>' . $comment_author . '</strong>.</span>';

  $welcome_login .= ' <span id="toggle-author"><u>更改</u> <i class="icon-signout"></i></span></p>';

 

  $comments_args['comment_field'] = '</div>' . $comments_args['comment_field'];

  $comments_args['comment_notes_before'] = $welcome_login . '<div id="author-info" class="hide">';

}

登录后复制

以上代码,需要添加到主题的 comment.php 文件 comment_form($comments_args) 方法调用之前。

接下来,我们通过 Javascript 来实现访客信息更改:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

/* Toggle comment user */

$('#comments').on('click', '#toggle-author', function () {

  $('#author-info').slideToggle(function () {

    if ($(this).is(':hidden')) {

      /* Update author name in the welcome messages */

      $('#welcome-login strong').html($('#author').val());

 

      /* Update the toggle action name */

      $('#toggle-author u').html('更改');

    } else {

      /* Update the toggle action name */

      $('#toggle-author u').html('隐藏');

    

  });

});

登录后复制

这样,如果用户需要更新信息时,可以点击欢迎信息右侧的更改按钮;修改完成之后,用户信息会在评论后更新。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
wordpress文章列表怎么调 wordpress文章列表怎么调 Apr 20, 2025 am 10:48 AM

有四种方法可以调整 WordPress 文章列表:使用主题选项、使用插件(如 Post Types Order、WP Post List、Boxy Stuff)、使用代码(在 functions.php 文件中添加设置)或直接修改 WordPress 数据库。

wordpress主机怎么建站 wordpress主机怎么建站 Apr 20, 2025 am 11:12 AM

要使用 WordPress 主机建站,需要:选择一个可靠的主机提供商。购买一个域名。设置 WordPress 主机帐户。选择一个主题。添加页面和文章。安装插件。自定义您的网站。发布您的网站。

wordpress主题头部图片如何更换 wordpress主题头部图片如何更换 Apr 20, 2025 am 10:00 AM

更换 WordPress 主题头部图片的分步指南:登录 WordPress 仪表盘,导航至“外观”&gt;“主题”。选择要编辑的主题,然后单击“自定义”。打开“主题选项”面板并寻找“网站标头”或“头部图片”选项。单击“选择图像”按钮并上传新的头部图片。裁剪图像并单击“保存并裁剪”。单击“保存并发布”按钮以更新更改。

IIS和PHP的兼容性:深度潜水 IIS和PHP的兼容性:深度潜水 Apr 22, 2025 am 12:01 AM

IIS和PHP可以兼容,通过FastCGI实现。1.IIS通过配置文件将.php文件请求转发给FastCGI模块。2.FastCGI模块启动PHP进程处理请求,提高性能和稳定性。3.实际应用中需注意配置细节、错误调试和性能优化。

wordpress怎么查看前端 wordpress怎么查看前端 Apr 20, 2025 am 10:30 AM

可以通过以下方法查看 WordPress 前端:登录仪表盘并切换到“查看站点”选项卡;使用无头浏览器自动化查看过程;安装 WordPress 插件在仪表盘内预览前端;通过本地 URL 查看前端(如果 WordPress 在本地设置)。

wordpress怎么导入源码 wordpress怎么导入源码 Apr 20, 2025 am 11:24 AM

导入 WordPress 源码需要以下步骤:创建子主题以进行主题修改。导入源码,覆盖子主题中的文件。激活子主题,使其生效。测试更改,确保一切正常。

如果session_start()被多次调用会发生什么? 如果session_start()被多次调用会发生什么? Apr 25, 2025 am 12:06 AM

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

wordpress编辑日期怎么取消 wordpress编辑日期怎么取消 Apr 20, 2025 am 10:54 AM

WordPress 编辑日期可以通过三种方法取消:1. 安装 Enable Post Date Disable 插件;2. 在 functions.php 文件中添加代码;3. 手动编辑 wp_posts 表中的 post_modified 列。

See all articles