众所周知,WordPress里面,评论的用户都会带上一个gravatar的头像。但是近期,gravatar被墙了,导致头像显示不出来,很影响美感,因此我们要想个办法来解决这个问题。
在网上搜了一下,大概有这几种方法可以解决该问题:
使用gravatar的镜像网站,或者是使用一些备用的域名。(我自己简单测了一下,很多地方的域名也已经被墙了)传送门
关闭头像(评论里的头像直接不显示,于是乎会导致原本头像的地方是一块空白,看起来怪怪的)传送门
通过修改头像的地址,将地址导向自己的图像资源(本文就是采用这种方法)
综合判断一下,个人认为第三种方法比较优秀,因此采用第三种方法:
首先我们需要准备我们自定义的头像文件,我这边是在阿里的素材库找的,这边简单举个例子,我找了21张头像图片素材。
为了保证每个用户的头像在我们的博客都是固定的,那么我们需要将用户id按照一定规则映射到这21张图片上,我这边就做得比较简单,将本来要显示的头像的链接地址中的用户id取出,然后截取前六位,再对21取余计算出来。
接着我们把头像放在我们wordpress的根目录下的avatar文件夹中:
接着我们在functions.php的结尾添加这部分代码:(不会写php,大部分从网上摘来的)
function my_avatar($avatar) {
$tmp = strpos($avatar, 'http');
$g = substr($avatar, $tmp, strpos($avatar, "'", $tmp) - $tmp);
$tmp = strpos($g, 'avatar/') + 7;
$userid_str = substr($g, $tmp, strpos($g, "?", $tmp) - $tmp); //获取原本的用户对应图片id
$userid_str_sub = substr($userid_str,0,6);//截取id的前6位,避免数字过大
$userid = hexdec($userid_str_sub);//将16进制转为10进制
$user_index = $userid % 21;//对21取余,因为我们只有21张图片
$w = get_bloginfo('wpurl');//获取WordPress 地址
$avatar = strtr($avatar, array($g => $w.'/avatar/'.$user_index.'.png'));//拼接出我们对应的图片存放地址
return $avatar;
}
add_filter('get_avatar', 'my_avatar');
接着我们刷新我们的页面,就能够出现对应的我们自己设置的头像啦~
PS:头像下载下来一个个命名非常麻烦,因此还写了一个简单的rename的python脚本,按需自取:
import os
i = 0
for root,dirs,files in os.walk("./"):
for file in files:
old_file = os.path.join(root,file)
if not os.path.splitext(file)[1] == ".png":
continue
new_file = "./" + str(i) + ".png"
i = i+1
os.rename(old_file,new_file)