WordPress 免插件仅代码实现 Gravatar 头像缓存

Gravatar是一项用于提供在全球范围内使用的头像服务。只要你在Gravatar的服务器上上传了你自己的头像,你便可以在其他任何支持Gravatar的博客、论坛等地方使用它。但由于大中华局域网的原因, Gravatar 头像所托管的网站有时候会挂掉,就算不挂速度也很慢。所以,有必要在自己的服务器端来缓存 Gravatar 头像,这样做也会给你的博客也提提速,那怕是那几毫秒。

20141030000443

下面的代码来自于Willin Kan,由于Willin Kan大神不玩WordPress了,所以这段代码绝对值得收藏。

WordPress免插件仅代码实现Gravatar头像缓存的方法

一、将下面的代码丢入主题的funtions.php文件的最后一个 ?> 前:

function my_avatar($avatar) {
  $tmp = strpos($avatar, 'http');
  $g = substr($avatar, $tmp, strpos($avatar, "'", $tmp) - $tmp);
  $tmp = strpos($g, 'avatar/') + 7;
  $f = substr($g, $tmp, strpos($g, "?", $tmp) - $tmp);
  $w = get_bloginfo('wpurl');
  $e = ABSPATH .'avatar/'. $f .'.jpg';
  $t = 1209600; //設定14天, 單位:秒
  if ( !is_file($e) || (time() - filemtime($e)) > $t ) { //當頭像不存在或文件超過14天才更新
    copy(htmlspecialchars_decode($g), $e);
  } else  $avatar = strtr($avatar, array($g => $w.'/avatar/'.$f.'.jpg'));
  if (filesize($e) < 500) copy($w.'/avatar/default.jpg', $e);
  return $avatar;
}
add_filter('get_avatar', 'my_avatar');

默认缓存时候为14天,其实缓存为一个月也不为过,因为这东东一般很少人更改。

二、在WordPress安装根目(即跟wp-content等文件夹同一目录下)下新建一个名为 avatar 的文件夹 ,设置该文件夹的权限为 0755 (如果 0755 不行,就试一下 0777)。放入一张同尺寸的头像图片命名为default.jpg。

唔,就这样可以了,你刷新一下含有评论的文章,然后去 avatar 的文件夹看看有没有已缓存的头像。有没有感觉网页打开的速度快了那么一些。

24 thoughts on “WordPress 免插件仅代码实现 Gravatar 头像缓存

  1. 土木坛子

    头像是第三方图片资源,就算无法加载,网站的网页本身加载是不会受影响的吧。
    如果头像一多,本身的服务器性能不佳,估计加载也会很慢,毕竟对自身服务器会调用许多图片资源,增多进程。
    我的理解是这样。

    回复
  2. 佐仔

    如果头像是第三方图片资源无法加载,就像Google字体那样,会拖慢一些网页显示的速度,同时无法显示头像。
    每一篇文章的评论数量都不会很多,而且我只是设置评论分页,故就算自身服务器不佳,加载的速度都不会影响很大。

    回复
  3. 马光

    非常奇怪的是,我使用360极速浏览器(7.5.3.312)浏览这篇文章是,有几段是空白的,比如
    “夹 ,设置该文件夹的权限为 0755 (如果 0755 不行,就试一下 0777)。放入一张同尺寸的头像图片命名为default.jpg。”
    就是直接空白,代码也有几行是空白的。文字看不到,但是能复制下来。使用IE和chrome显示正常,其它文章也正常,单独这一篇不正常,奇葩啊,从来没有遇到过这么有趣的事儿。截图如下:

    回复
  4. 马光

    上个评论的截图似乎没正常:https://lh3.googleusercontent.com/-rYonP88bCf8/VGDN5klnGrI/AAAAAAAAD_A/E2T4_GanOfU/s638-no/%E6%98%BE%E7%A4%BA%E9%94%99%E8%AF%AF.png

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注