Gravatar头像本地化纯代码方法

教程文章| 111| 2020-08-02

WordPress 默认使用 get_avatar() 函数获取的 Gravatar 头像,该函数的定义位于 wp-includes 文件夹下的 pluggable.php 中。然而默认的服务器对于国内环境可能不太稳定,不过 https 方式获取速度还可以,所以国内很多人采用 SSL 方式获取、当然也有本地化的或者从多说服务器获取的,却唯独缺了本地化获取的方式,心血来潮想要配置一下,同时也整理下相关的知识点。
Gravatar头像本地化纯代码方法

从 Gravatar 官方ssl获取

//官方Gravatar头像调用ssl头像链接
function ssl_get_avatar($avatar) {
    $avatar = preg_replace('/.*\/avatar\/(.*)\?s=([\d]+)&.*/','<img src="https://secure.gravatar.com/avatar/$1?s=$2&d=mm" class="avatar avatar-$2" height="50" width="50">',$avatar);
    return $avatar;
}
add_filter('get_avatar', 'ssl_get_avatar');

本地化 Gravatar 头像

前面两段代码直接丢到主题的 functions.php 文件中即可。下面这段代码丢到 functions.php 文件中后,我们还需要在主题文件夹下新建一个名为 avatar 的文件夹并设置其权限为 755 即可。

// 本地化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);        //获取头像文件名
 
    $srcset_tmp = strripos($avatar, 'http');
    $srcset_url = substr($avatar, $srcset_tmp, strpos($avatar, "2x", $srcset_tmp) - $srcset_tmp);
    $srcset_g = substr($avatar, $srcset_tmp, strpos($avatar, "'", $srcset_tmp) - $srcset_tmp);        //获取2x头像原地址
    $srcset_tmp = strpos($srcset_g, 'avatar/') + 7;
    $srcset_n = substr($srcset_g, $srcset_tmp, strpos($srcset_g, "?", $srcset_tmp) - $srcset_tmp);        //获取2x头像文件名
    $srcset_f = substr($srcset_g, $srcset_tmp, strpos($srcset_g, "2x", $srcset_tmp) - $srcset_tmp);
 
    $w = get_bloginfo('template_url');
    $e = get_template_directory() .'/avatar/'. $f .'.png';
    $srcset_e = get_template_directory() .'/avatar/'. $srcset_n .'_2x.png';
	
    $t = 30*24*60*60;        // 设置缓存有效期30天,单位:s
 
    if ( (!is_file($e) && !is_file($srcset_e)) || (time() - filemtime($e)) > $t ){
        copy(htmlspecialchars_decode($g), $e);
        copy($srcset_url, $srcset_e);
    }else{
        $avatar = strtr($avatar, array($g => $w.'/avatar/'.$f.'.png'));
        $avatar = strtr($avatar, array($srcset_g => $w.'/avatar/'.$srcset_n.'_2x.png 2x'));
    }
 
    if ( filesize($e) < 500 ) copy($w.'/img/avatar.png', $e);
    if ( filesize($srcset_e) < 1000) copy($w.'/img/avatar.png', $srcset_e);
    return $avatar;
}
 
add_filter('get_avatar','my_avatar')
相关文章