解决WordPress中Gravatar被墙导致无法显示问题


众所周知,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)

文章作者: Wakaka
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Wakaka !
  目录