添加WordPress评论输入邮箱实时显示Gravatar头像功能
这个不是什么新鲜的功能了,这个功能即是实现当留言评论时,你输入email后,就会实时显示你的Gravatar头像。对于提高用户体验是有非常的帮助,特别是用户评论量非常大的用户。Jeff 本来也考虑在本站DeveWork.com 的主题上实现它,但看到需要加载7kb左右的javascript文件,我就不干了——虽然7kb不大,但我在意。自己也权衡一下是否为自己的主题添加这个功能吧~
实现原理:实时显示是用JavaScript来实现的,Gravatar图片的链接没有什么秘密,很简单就能得到,“http://www.gravatar.com/avatar/”加上用md5转换email得到的一组字符串,就是该email对应的Gravatar头像图片。关键的是JavaScript没有内置md5加密函数,但也很幸运,早就有人编写了JavaScript的md5函数。既然有了md5函数,那实现实时显示Gravatar头像也就变得简单了,只需用onchange捕获email输入框中的变化,然后用hex_md5函数转换email地址并组合成对应的Gravatar图片链接,最后用setAttribute改变img的src地址就搞定了。
网络上一共有两种方法,都是大同小异的,由于不同主题的相关代码不同,如实添加代码后功能是否有效还需要多调试,要善于利用浏览器的开发者工具。
效果演示:点击查看
实现方法一:
1、打开主题的comments.php文件,在适当的位置,如我的主题是下面代码的上方:
<?php if ( get_option('comment_registration') && !$user_ID ) : ?> |
---|
加入下面的代码:
<p> <?php $useremail = ($user_ID) ? get_the_author_meta('user_email', $user_ID) : $comment_author_email;?> <img id="real-time-gravatar" src="http://www.gravatar.com/avatar/<?php echo md5($useremail);?>?s=48&d=identicon&r=G" alt="gravatar" height="48" width="48" /> </p> |
---|
PS:上面代码中的48可以修改为你想要的Gravatar头像的大小尺寸。
2、接下来,同样是在comments.php中,拉到最后一个输入框(input标签)的位置(这个位置是最佳的),也就是:
<p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" /> <label for="url"><small>Website</small></label></p> |
---|
在这段代码的下面,加入:
<!-- real time gravatar --> <script type="text/javascript" src="<?php echo get_template_directory_uri() ?>/js-md5.js"></script> <script type="text/javascript"> /* <![CDATA[ */ var ga = document.getElementById("real-time-gravatar"); var email = document.getElementById("email"); var Ka=navigator.userAgent.toLowerCase(); var chrome = Ka.indexOf('webkit') != -1; if (chrome) email.onblur = changeGravatar; else email.onchange = changeGravatar; function changeGravatar(){ email_value = email.value; email_md5 = hex_md5(email_value); new_ga = "http://www.gravatar.com/avatar/" + email_md5 +"s=48&d=identicon&r=G"; newGravatar(new_ga); } function newGravatar(new_ga){ ga.setAttribute('src', new_ga); } /* ]]> */ </script> <!-- end real time gravatar --> |
---|
PS:上面代码中的48,同样改成你想要的Gravatar头像的大小尺寸。
3、下载js-md5.js,并把它上传到主题文件夹中。完成!
实现方法二:
1. 将如下代码加到functions.php文件,在评论框里加上默认头像。
add_filter('comment_form_top', 'show_gravatar'); function show_gravatar() { global $current_user; get_currentuserinfo(); echo get_avatar( $current_user->user_email , 40 ); // 40是指头像的尺寸,第4步也一样 } |
---|
2、用CSS设置下头像的位置,这里就固定在右上角。
#commentform { position: relative } #commentform .avatar { position: absolute; top: 0; right: 20px } |
---|
3、下载md5-min.js,保存到主题文件夹里。
4. 重命名刚才的文件为gravatar.js,在这个文件的最后追加如下代码:
if (document.getElementById("email")) { document.getElementById("email").onblur = function () { if (/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(this.value)) document.getElementById("commentform").getElementsByTagName("img")[0].src = "http://www.gravatar.com/avatar/" + hex_md5(this.value) + "?d=mm&s=40"; }; }; |
---|
如果找到email输入框则当光标焦点移出email输入框时,用正则测试输入的是否是email格式,如果是就将之前插入的图片地址改为新生成的地址。
5. 打开footer.php,添加如下代码:
<?php if ( is_singular() && comments_open() ) { ?> //判断是不是单独的post页面且评论打开 <script type="text/javascript" src="<?php bloginfo('template_url'); ?>/js/gravatar.js"></script> <?php } ?> |
---|
本文非原创,方法一来源:点击查看,感谢原作者。方法二未知。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- StyleGAN2玩出新高度!从华盛顿到特朗普,无缝切换生成历届美国总统
- 深入理解MySQL中事务隔离级别的实现原理
- 浅析常见的算法范式
- 检查 JavaScript 变量是否为数字的几种方式
- 玩转Google Colab!附20种小技巧
- 猿实战19——商品发布之商详数据准备
- 【大家的项目】code-minimap
- 尤大 几天前发在 GitHub 上的 vue-lit 是啥?
- 用回溯算法求解数独问题
- bug 回忆录(四)
- 新手入门系列之-React / Vue 应用持续集成Docker 化
- Android 获取进程名函数,如何优化到极致?
- R语言做K均值聚类的一个简单小例子
- 如何自动化Salesforce应用程序
- 2万字带你学习Qos原理,还有6个实验案例,建议一定要收藏!