Gravatar头像

9条评论

使用Gravatar头像

Gravatar即全球通用头像。这里所说的头像,是用户在论坛、聊天系统、网站或者其它类型的虚拟社区中使用的、与其它用户不同的图标或象征事物。网络头像通常是一个长宽均为80像素的图片,图片内容由用户自行选择。由Tom Werner开发的Gravatar头像系统使用户在所有网站上使用同一个头像成为可能。

日志评论框中的Gravatar头像

Gravatar头像与普通头像几乎没有什么差别,不同的是,所有Gravatar头像都被寄存在一个单独的服务器上,服务器通过调用由MD5算法加密的用户电子邮件地址来帮助获取用户头像。与其在我们常访问的论坛、博客上使用不同的头像,不如注册一个Gravatar头像,在所有网站上使用相同的头像。

要在WordPress中使用Gravatar头像也很容易,可以利用Gravatar WordPress Plugin插件,也可以在index.php, comments.php 以及comments-popup.php模板文件中手动添加Gravatar头像。

Gravatar头像的构成

Gravatar头像是从服务器中调用的动态图片资源。下面分片段介绍调用头像时所用的URL地址。URL地址的开始部分是:

http://www.gravatar.com/avatar.php?  

紧接着开始部分的是一个强制性参数gravatar_id。参数值即被调用的用户电子邮件地址的十六进制MD5散列表,其中的空格都需要被删除。参数值对大小写不敏感。

gravatar_id=279aa12c3326f87c460aa4f31d18a065  

之后是一个可选参数rating,该参数的值可以是G、PG、R或X,这些值决定所返回头像的最高等级。

&rating=R  

Gravatar提供不同级别的头像,用户可以自行选择头像级别。

size也是一个可选参数,该参数帮助用户指定Gravatar头像的高度和宽度。size参数值的有效范围是1到80(包括1和80)。如果参数值大于80,原始Gravatar图像会在输出前被缩减取样。

&size=40  

在size之后可能是另一个可选参数default。若当前电子邮件地址没有相关联的Gravatar头像,或Gravatar头像级别高于rating参数所规定的头像级别,default参数可规定所返回GIF, JPEG或PNG图片的完全URL、已编码URL以及包含在内的协议。

&default=http%3A%2F%2Fwww.somesite.com%2Fsomeimage.jpg  

default之后还有一个可选参数border。border参数规定了覆盖Gravatar头像的1像素边框的十六进制值。参数值可能是六个字符的十六进制字符串(如FF0000表示red),也可能是缩写成三个字符的十六进制字符串(如F00表示red)。

&border=FF0000  

在WordPress中使用Gravatar头像

Gravatar头像示例

对大多数来说,用MD5加密邮件地址不是件容易的事,需要在PHP或其它脚本上花费的时间尤其多。有些WordPress插件可以帮助我们完成这个任务,比如Gravatar.com PluginGravatars2 Enhanced Caching Plugin。插件的安装和用法请见各个插件的说明文档。

自WordPress 2.5起,Gravatar成为WordPress的自带功能,用户无需下载任何插件就可以进行基本使用和管理。

WordPress 2.5在主题开发人员和用户的管理界面中都加入了Gravatar功能。WordPress建议主题开发人员在开发主题时加入Gravatar功能。WordPress用户也可以在管理界面“设置”菜单的“讨论”选项下管理对Gravatar头像的使用。

WordPress用户可以决定:

  • 是否显示Gravatar头像
  • 所显示的头像级别

WordPress 2.5主题对Gravatar头像的支持

get_avatar函数可将Gravatar头像添加到主题中。该函数返回Gravatar头像的完整的图片HTML标签。

函数调用方式如下:

  <?php 
   echo get_avatar( $id_or_email, $size = '96', $default = '<path_to_url>' ); 
   ?>

函数接收的参数包括:

  • id_or_email(必需):主题作者的用户ID(整数或字符串),电子邮件地址(字符串)或评论循环中的评论对象。注意:推荐在大多数评论模板中使用$comment,以显示评论者的Gravatar头像。在少数模板中可以用get_the_author_id()
  • size(可选):头像的显示尺寸(最大值为512)
  • default(可选):默认Gravatar头像(为没有对应电子邮件地址的评论者所设置的头像)的绝对地址。如果default参数空缺,那么系统会将这个头像将作为默认头像。

下面是一些需要注意的问题:

  • 如果不用size参数设置头像大小,默认头像大小为96×96
  • 默认头像类型为Gravatar头像
  • 只有用户在WP管理面板中激活头像显示选项,头像才能够显示(默认情况下此选项已激活)
  • 头像只能根据用户在WP管理面板中规定的头像级别进行相应显示

代码输出:

下面列出的是默认输出内容。在img元素中使用多个类,便于我们进行元素设计。

<img alt='' src='http://gravatarurl_or_default'
class='avatar avatar-$size' height='$size' width='$size' />

如果由于缺少电子邮件地址(如pingback或trackback),Gravatar头像变成默认头像,无论我们是否指定了默认头像,img元素都会被赋予一个avatar-default CSS类。

向后兼容性

如果希望为WP 2.5之前的版本开发一个支持Gravatar头像的主题,请在代码中加入以下内容以查找Gravatar函数:

   if (function_exists('get_avatar')) {
      echo get_avatar($email);
   } else {
      //alternate gravatar code for < 2.5
      $grav_url = "http://www.gravatar.com/avatar.php?gravatar_id=" . 
         md5($email) . "&default=" . urlencode($default) . "&size=" . $size;
      echo "<img src='$grav_url'/>";
   }

查找Gravatar头像

请求Gravatar头像图片但所使用的电子邮件没有注册Gravatar时,Gravatar会返回默认头像以供使用。

但有时我们需要的不止这些,我们可能想知道,自己究竟可不可以获取一个实在的Gravatar头像,还是只能使用默认头像。

如果遇到下列情况:

  • 为没有Gravatar头像的访问者使用本地头像
  • 告诉访问者他们没有Gravatar头像,建议他们注册一个头像,但同时又不希望打扰已经注册过Gravatar的访问者

警告:以下操作需掌握一定PHP知识。

不巧的是,我们无法只通过一个语句就让Gravatar达到我们希望的效果,无论怎样,它们只能返回图片。解决方法是,在PHP中调用图片,检测图片文件的HTTP页头信息,从该信息中可以判断返回的是Gravatar头像还是默认图片。

下面是一个使用HTTP页头信息的验证函数示例。使用时根据自己的实际需要修改其中的内容:

function validate_gravatar($user_id) {
	// Mine is just for user_id, you can work out dealing with emails as well for yourself.
	$user = get_userdata($user_id);

	// Craft a potential url and test its headers
	$email = $user->user_email;
	$hash = md5($email);
	$uri = 'http://www.gravatar.com/avatar/' . $hash . '?d=identicon&r=any&size=80';
	$headers = wp_get_http_headers($uri);

	// Check the headers
	if (!is_array($headers)) :
		$has_valid_avatar = FALSE;
	elseif (isset($headers["content-disposition"]) ) :
		$has_valid_avatar = TRUE;
	else :
		$has_valid_avatar = FALSE;
	endif;

	return $has_valid_gravatar;
}

相关资料

#1
学习了。呵呵
#2
头像不能自定义