在wordpress中采用Gravatar固然可用增加网站的交互性乐趣,但是由于Gravatar加载缓慢,有的时候严重拖拉网站的加载速度,于是将Gravatar本地化,即将Gravatar头像存储在网站目录里不失为不错的选择。且该方法支持wordpress最新的wordpress4.5.2版本,而且在国内主机中同样适用。
1.首先在网站的根目录下创建文件夹avatar,权限为755,
2.然后制作一个默认的gravatar头像,即default.jpg,并上传该default.jpg图像到上一步的avatar文件夹中,
3.在主题的function.php中添加以下代码(记得备份文件):
- function fa_cache_avatar($avatar, $id_or_email, $size, $default, $alt)
- {
- $avatar = str_replace(array(“www.gravatar.com”, “0.gravatar.com”, “1.gravatar.com”, “2.gravatar.com”), “cn.gravatar.com”, $avatar);
- $tmp = strpos($avatar, ‘http’);
- $url = get_avatar_url( $id_or_email, $size ) ;
- $url = str_replace(array(“www.gravatar.com”, “0.gravatar.com”, “1.gravatar.com”, “2.gravatar.com”), “cn.gravatar.com”, $url);
- $avatar2x = get_avatar_url( $id_or_email, ( $size * 2 ) ) ;
- $avatar2x = str_replace(array(“www.gravatar.com”, “0.gravatar.com”, “1.gravatar.com”, “2.gravatar.com”), “cn.gravatar.com”, $avatar2x);
- $g = substr($avatar, $tmp, strpos($avatar, “‘”, $tmp) – $tmp);
- $tmp = strpos($g, ‘avatar/’) + 7;
- $f = substr($g, $tmp, strpos($g, “?”, $tmp) – $tmp);
- $w = home_url();
- $e = ABSPATH .’avatar/’. $size . ‘*’. $f .’.jpg’;
- $e2x = ABSPATH .’avatar/’. ( $size * 2 ) . ‘*’. $f .’.jpg’;
- $t = 1209600;
- if ( (!is_file($e) || (time() – filemtime($e)) > $t) && (!is_file($e2x) || (time() – filemtime($e2x)) > $t ) ) {
- copy(htmlspecialchars_decode($g), $e);
- copy(htmlspecialchars_decode($avatar2x), $e2x);
- } else { $avatar = $w.’/avatar/’. $size . ‘*’.$f.’.jpg’;
- $avatar2x = $w.’/avatar/’. ( $size * 2) . ‘*’.$f.’.jpg’;
- if (filesize($e) < 1000) copy($w.’/avatar/default.jpg’, $e);
- if (filesize($e2x) < 1000) copy($w.’/avatar/default.jpg’, $e2x);
- $avatar = “<img alt='{$alt}’ src='{$avatar}’ srcset='{$avatar2x}’ class=’avatar avatar-{$size} photo’ height='{$size}’ width='{$size}’ />”;
- }
- return $avatar;
- }
- add_filter(‘get_avatar’, ‘fa_cache_avatar’,1,5);
PS:强烈建议将更新频率更改更长天数。
最终效果如下:

Related Posts
Leave a Reply