网站服务器缓存Gravatar头像

注册一次Gravatar账号即可以在千千万万的 WordPress 网站上包括本站上,评论的时候显示自定义的个性化的头像。但是Gravatar服务器链接缓慢甚至一度被Q,拖累了网站的打开速度。

《网站服务器缓存Gravatar头像》
以下实现头像简单的本地缓存,加速评论头像的展示。

//头像缓存
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 );//匹配图片名称
    $e = get_template_directory() . '/images/avatarcache/' . $f . '.png';//图片缓存路径
    $t = 604800; //缓存天数
    if ( ! is_file( $e ) || ( time() - filemtime( $e ) ) > $t ) {
        copy( htmlspecialchars_decode( $g ), $e );
    } else {
        $avatar = strtr( $avatar, array( $g => get_template_directory_uri() . '/images/avatarcache/' . $f . '.png' ) );
    }
    if ( filesize( $e ) < 500 ) {
        copy( get_template_directory() . 'images/avatarcache/default.png', $e );
    }
    return $avatar;
}
add_filter( 'get_avatar', 'my_avatar' );
//end

主题目录下新建images/avatarcache目录,给与755权限,或者自己更改路径,加一张 default.png 默认头像。

发表评论

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

  1. 黑鸟 说道:

    刚发现,手机端无法调用缓存的头像,然后导致很多处就无法显示头像,不知道如何检查解决这问题的了。

    1. 黑鸟 说道:

      替换该缓存函数的钩子优先级也无用,但是替换Gravater镜像服务器的钩子没有问题,手机端可以从镜像服务器去读取图片,

  2. 逆时针 说道:

    能缓存最好,之前我用官网的链接,有明显的延迟,后来改用镜像的站点,好了许多。

  3. boke112联盟 说道:

    使用Gravatar头像的站点,建议都缓存本地会比较好

    1. 黑鸟 说道:

      之前没做缓存,经常看到Chrome浏览器左下角不停的长时间的提示在加载Gravatar头像。