BAE 版 WordPress Gravatar 头像缓存

因为近期 Gravatar 头像加载速度又慢如蜗牛,所以需要缓存一下。百度了一下,没有 BAE 版的,于是参照 SAE 版的,自己写了个。

什么是Gravatar?

Gravatar 是 Globally Recognized Avatar 的缩写,是 Gravatar 推出的一项服务,意为“全球通用头像”。如果在 Gravatar 的服务器上放置了你自己的头像,那么在任何支持 Gravatar 的站点上留言时,只要提供你与这个头像关联的 E-Mail 地址,就能够显示出你的Gravatar头像来。

为什么要缓存Gravatar头像?

因为 Gravatar 的服务器在国外,在国内访问使用该功能的网站或博客,可能因为载入速度过慢而导致页面一直在载入中甚至头像无法显示,这是一个非常糟糕的用户体验。将头像缓存下来,定时更新,而头像图片的文件一般不会很大,不需要暂用很大的服务器空间,因此缓存 Gravatar 头像是一个加快网站访问速度的高性价比选择。

如何在 BAE 中缓存Gravatar头像?

很简单,在你的主题的 Function.php 文件中加入以下代码:

<?php
function nikbobo_get_avatar_cache ( $avatar ) {
	if( $_SERVER['PHP_SELF'] == '/wp-admin/options-discussion.php' )
		return $avatar;
	$bucket = '这里更改为你的Bucket名称';
	$cache_dir = '/avatar/';
	$baidu_bcs = new BaiduBCS();
	$tmp = strpos( $avatar, 'avatar/' ) + 7;
	$avatar_id = substr( $avatar, $tmp, strpos( $avatar, '?' ) - $tmp );
	$tmp = strpos( $avatar, 'avatar/' ) + 7;
	$pattern = "/(<img.* src=\')([^\']*)(\'.*)/";
	$avatar_url = preg_replace( $pattern, "$2", $avatar );
	$avatar_url = str_replace( "&", "&", $avatar_url );
	$avatar_file = $cache_dir . $avatar_id . '.png';
	if( ! $baidu_bcs->is_object_exist( $bucket, $avatar_file ) ) {
		$content = @file_get_contents( $avatar_url );
		if( ! $content )
			return $avatar;

		$opt['acl'] = "public-read";
		$opt['headers']['Expires'] = 'access plus 15 days';
		$opt['headers']['Content-Type'] = 'image/png';

		$result = $baidu_bcs->create_object_by_content( $bucket, $avatar_file, $content, $opt );
	}
	$avatar_cache_url = 'http://bcs.duapp.com/' . $bucket . $avatar_file;
	$avatar = preg_replace( $pattern, "$1" . $avatar_cache_url . "$3", $avatar );
	return $avatar;
}

add_filter('get_avatar', 'nikbobo_get_avatar_cache');
?>

以上代码在 BAE 环境中测试通过,无法确定能否用于非 BAE 环境。

大功告成!

此文章是由nikbobo发表在旧博客分类目录的。将固定链接加入收藏夹。

关于 nikbobo

Nikbobo,本名刘永强,记忆空间站长,男,1998 年出生于广东茂名,至今(2022 年)23 岁,目前(2022 年)就读于广州大学华软软件学院,常以“nikbobo”这个网名混迹互联网。如无特殊注明,Nikbobo 在本站发表的文章,遵循 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议。详情请参阅关于页面的作者介绍。

发表回复

您的电子邮箱地址不会被公开。