常阳时光

Gravatar 头像已不再被墙?

翻博客,有时候感觉 Gravatar 头像加载有点慢,想在博客鸡子上搭个反代,网上看教程挺简单的。不过,想想博客现在的 VPS 性能本来就一般般,反代速度也快不到哪里去,作罢。

目前在用官方 https://secure.gravatar.com/avatar/ 源,代码是以前主题自带的,一直在用,囧~

function get_ssl_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="$2" width="$2">',$avatar);
return $avatar;
}
add_filter ( 'get_avatar', 'get_ssl_avatar' );

网上看大伙介绍,cn.gravatar.com 在国内速度更好。于是打算换上试试,找到了大发三年前的文章:Gravatar 头像被墙及解决方案,WordPress 4.2 更新了 get_avatar() 函数,增加 srcset 属性——增加了对 retina 屏幕支持。

function get_ssl_avatar($avatar) {
$avatar = str_replace(array("www.gravatar.com", "0.gravatar.com", "1.gravatar.com", "2.gravatar.com"), "cn.gravatar.com", $avatar);
return $avatar;
}
add_filter('get_avatar', 'get_ssl_avatar');

代码换上,刷新,刷新,刷新……再刷新,还是在用 https://secure.gravatar.com/avatar ……

看 get_avatar 代码,然后在 get_avatar_data 代码中找到了答案:▼展开

if ( $email_hash ) {
$args['found_avatar'] = true;
$gravatar_server = hexdec( $email_hash[0] ) % 3;
} else {
$gravatar_server = rand( 0, 2 );
}

$url_args = array(
's' => $args['size'],
'd' => $args['default'],
'f' => $args['force_default'] ? 'y' : false,
'r' => $args['rating'],
);

if ( is_ssl() ) {
$url = 'https://secure.gravatar.com/avatar/' . $email_hash;
} else {
$url = sprintf( 'http://%d.gravatar.com/avatar/%s', $gravatar_server, $email_hash );
}

$url = add_query_arg(
rawurlencode_deep( array_filter( $url_args ) ),
set_url_scheme( $url, $args['scheme'] )
);

/**
* Filters the avatar URL.
*
* @since 4.2.0
*
* @param string $url The URL of the avatar.
* @param mixed $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
* user email, WP_User object, WP_Post object, or WP_Comment object.
* @param array $args Arguments passed to get_avatar_data(), after processing.
*/
$args['url'] = apply_filters( 'get_avatar_url', $url, $id_or_email, $args );

如果博客开启 SSL,头像使用 secure.gravatar.com 源;不开启 SSL,随机使用 0.gravatar.com、1.gravatar.com 以及 2.gravatar.com。开启 SSL 情况下,可以使用下面代码切换到 cn.gravatar.com:

function get_ssl_avatar($avatar) {
$avatar = str_replace(array("www.gravatar.com", "0.gravatar.com", "1.gravatar.com", "2.gravatar.com", "secure.gravatar.com"), "cn.gravatar.com", $avatar);
return $avatar;
}
add_filter('get_avatar', 'get_ssl_avatar');

不知道是不是心理作用,Gravatar 头像换到 cn.gravatar.com 后感觉是快了一点点。

折腾过程中发现,www.gravatar.com、0.gravatar.com、1.gravatar.com、2.gravatar.com、secure.gravatar.com 和 en.gravatar.com 这些网址无需爱国就能正常访问,速度也不慢,这么说,Gravatar 头像已不再被墙?