解决WordPress中Gravatar头像无法显示的问题

导言

众所周知,Gravatar的404很普遍,但也很少人去修复,今天给出3个解决方法

Gravatar.webp

(多数来源网络,请喷子们嘴下留情~)

方法

方法一:将Gravatar的源改为镜像站-适用于任何主题(推荐)

在主题目录中,找到并打开 functions.php 文件,把以下代码复制放到该文件中:

//BW_Get_Gravatar
function bw_get_gravatar($avatar) {
    $avatar = str_replace(array("www.gravatar.com", "0.gravatar.com", "1.gravatar.com", "2.gravatar.com"), "dn-qiniu-avatar.qbox.me/avatar", $avatar);
    return $avatar;
}
add_filter('get_avatar', 'bw_get_gravatar', 10, 3);
//bw_get_gravatar为函数名,可自定义

顺便还提供几个Gravatar的镜像站 :

  • gravatar.loli.net/avatar/
  • cdn.v2ex.com/gravatar/
  • gravatar.duoshuo.com

方法二:使用Gravatar的HTTPS-可能已失效

主题目录中,找到并打开 functions.php 文件,把以下代码复制放到该文件中:

//BW_Get_Gravatar
function bw_get_gravatar($avatar) {
$avatar = preg_replace('/.*\/avatar\/(.*)\?s=([\d]+)&.*/','<img src="https://secure.gravatar.com/avatar/$1?s=$2" class="avatar avatar-$2" height="$2" width="$2">',$avatar);
return $avatar;
}
add_filter('get_avatar', 'bw_get_gravatar');
//bw_get_gravatar为函数名,可自定义

但是,这个解决方法从WordPress 4.2 版开始,就出现了一个显示问题,就是头像图片比以前显示的大了一倍。经过相关技术研究发现,从WordPress4.2版开始,引入了scrset,srcset属性允许作者根据不同分辨率或不同的视窗尺寸提多个不同分辨图像。用户代理会根据之前获取的任何资源做选择,从而避免多个资源加载浪费带宽和相关性能问题。也就是可以根据屏幕密度显示对应尺寸的图片,比如正常的PC显示器默认设备像素比都是1,iphone6是2,iphone6 plus就是3

WordPress4.2+的scrset定义的2x的,如果之前的代码获取的图片大小是50px,那么WordPress4.2版之后获取到scrset里面的图片大小就是100px了,这就是导致图片显示变大一倍的缘故

该问题通过重写代码即可解决,新版代码(参考)如下:

//BW_Get_Gravatar
function bw_get_gravatar($avatar) {
    if (preg_match_all(
        '/(src|srcset)=["\']https?.*?\/avatar\/([^?]*)\?s=([\d]+)&([^"\']*)?["\']/i',
        $avatar,
        $matches
    ) > 0) {
        $url = 'https://secure.gravatar.com';
        $size = $matches[3][0];
        $vargs = array_pad(array(), count($matches[0]), array());
        for ($i = 1; $i < count($matches); $i++) {
            for ($j = 0; $j < count($matches[$i]); $j++) {
                $tmp = strtolower($matches[$i][$j]);
                $vargs[$j][] = $tmp;
                if ($tmp == 'src') {
                    $size = $matches[3][$j];
                }
            }
        }
        $buffers = array();
        foreach($vargs as $varg) {
            $buffers[] = vsprintf(
                '%s="%s/avatar/%s?s=%s&%s"',
                array($varg[0], $url, $varg[1], $varg[2], $varg[3])
            );
        }
        return sprintf(
            '<img alt="avatar" %s class="avatar avatar-%s" height="%s" width="%s" />',
            implode(' ', $buffers), $size, $size, $size
        );
    } else {
        return false;
    }
}
add_filter('get_avatar', 'get_bw_get_gravatar');
//bw_get_gravatar为函数名,可自定义

方法三:本地缓存头像-简单粗暴

第1步:建立缓存目录

在wp-content 的同级目录建立一个文件夹,命名为 avatar ,设置该文件夹的权限为 0755 (如果 0755 不行,就试一下 0777)

第2步:设置默认头像

准备一张大小适合的默认头像,命名为”default.jpg” ,放在 avatar 文件夹里面

第3步:添加缓存代码

在主题目录中,找到并打开 functions.php 文件,把以下代码复制放到该文件中:

//BW_Localcache_Gravatar
function bw_localcache_gravatar($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', 'bw_localcache_gravatar');
//bw_localcache_gravatar为函数名,可自定义

最后

如果有任何问题,请在下方留言~

评论

  1. 豫海
    Windows Chrome
    4周前
    2021-11-11 9:37:42

    好耶!

    • 李本伟 博主
      Windows Chrome
      4周前
      2021-11-11 11:45:21

      好家伙,你还是IPv6访问的

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇