WordPress 默认使用 get_avatar() 函数获取的 Gravatar 头像,该函数的定义位于 wp-includes 文件夹下的 pluggable.php 中。然而默认的服务器对于国内环境可能不太稳定,不过 https 方式获取速度还可以,所以国内很多人采用 SSL 方式获取、当然也有本地化的或者从多说服务器获取的,目前我所使用的主题是使用 DUX 主题可自由切换“原有方式”、“从Gravatar官方ssl获取”、“从多说服务器获取”三种方式,却唯独缺了本地化获取的方式,心血来潮想要配置一下,同时也整理下相关的知识点。
从 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头像调用 function duoshuo_get_avatar($avatar) { $avatar = str_replace(array("www.gravatar.com", "0.gravatar.com", "1.gravatar.com", "2.gravatar.com"), "gravatar.duoshuo.com", $avatar); return $avatar; } add_filter('get_avatar', 'duoshuo_get_avatar', 10, 3);
本地化 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')
以上代码来源于 DUX 主题及 wordpresshi 。
最后放上 get_avatar() 函数的相关官方文档,方便大家学习:
get_avatar:https://codex.wordpress.org/Function_Reference/get_avatar
评论 (2)
:twisted:
学习了