WordPress gravatar 头像缓存补充说明

前些天写了一篇《回调函数个性化 WordPress 评论样式》,本是一篇学习记录的文章,没想到还引起了一些反响,比如小邪本着打破沙锅问到底的原则深入研究了 PHP 的 Callback 与其在 WP 中的使用,还有 hzlzh 童鞋补充说明了 wp thread comment 和 wp recentcomments 插件在 AJAX 回复后实现 gravatar 头像缓存的方法。

其中对于 hzlzh 关于 wp thread comment 和 wp recentcomments 插件使用生成的 gravatar 头像缓存问题,hzlzh 在《回调函数个性化 WordPress 评论样式》评论中就和我讨论了一下下,在我准备下手解决这一问题前,hzlzh 就先我一步搞定了,佩服佩服,所以关于此方法我就不多说了,只是还想补充一点。

因为我的嵌套回复并不是用 wp thread comment 插件实现的,而是用 Willin 大师的 WordPress 内置嵌套评论专用 Ajax comments 的方法,不过一样遇到了 hzlzh 说到的问题,在回复某条评论后且在刷新当前页面之前,该评论的 gravatar 头像是直接从 gravatar.com 调取的,而没有用缓存,其实这个问题并不严重,但是为了追求完美与全站统一的效果,还是小改一下吧,修改的方法和原理大致与 hzlzh 说的相同。

在 comments-ajax.php 文件中找到如下代码:

<?php echo get_avatar($comment,$size='36',$default='<path_to_url>' ); ?>

将其替换成 Willin 大师的迷你版 gravatar 头像缓存方法中的代码:

<?php
$f = md5(strtolower($comment->comment_author_email));
$a = get_bloginfo('wpurl') .'/gravatar/'.$f.'.jpg';
$e = ABSPATH . 'gravatar/'.$f.'.jpg';
$t = 1209600;
$d = get_bloginfo('wpurl'). '/gravatar/default-gravatar.png';
if ( !is_file($e) || (time() - filemtime($e)) > $t ){
$r = get_option('avatar_rating');
$g = 'http://www.gravatar.com/avatar/'.$f.'?s=32&d='.$d.'&r='.$r;
copy($g, $e);
}
if (filesize($e) < 500) {copy($d, $e);}
?>
<img width='32' height='32' class='avatar' src='<?php echo $a ?>' alt='' />

同样的道理,对于侧边栏读者墙中的 gravatar 头像缓存也是这样实现的。

  1. Pingback: Willin迷你Gravatar缓存修改版 | 邪罗刹的菠萝阁

  2. 出现以下情况是什么原因呀

    Warning: copy(/home/wmw58/public_html/3t1p/gravatar/d34d3a0e64809dc205c9cb364cd63ec9.jpg) [function.copy]: failed to open stream: No such file or directory in /home/wmw58/public_html/3t1p/wp-content/themes/3t1p/comments-ajax.php on line 152

    Warning: filesize() [function.filesize]: stat failed for /home/wmw58/public_html/3t1p/gravatar/d34d3a0e64809dc205c9cb364cd63ec9.jpg in /home/wmw58/public_html/3t1p/wp-content/themes/3t1p/comments-ajax.php on line 154

    Warning: copy(/home/wmw58/public_html/3t1p/gravatar/d34d3a0e64809dc205c9cb364cd63ec9.jpg) [function.copy]: failed to open stream: No such file or directory in /home/wmw58/public_html/3t1p/wp-content/themes/3t1p/comments-ajax.php on line 154

  3. 没关系,只要帮我看看哪有问题就行了。呵。我自己改,我也不好意思麻烦你帮我改呢。

  4. 暂时还有一个问题请教,我想弄个微博,在前台发表的那种,就是发表时不写标题的,但我弄了后,标题会直接调用内容做为标题,怎么样让没写标题的直接就是无标题, 日志显示时有标题就调用,没有就不调用。 不知道我说清楚没。呵

  5. "迷你版" 哈! 誰幫我取的? 以前取了 "大師", 還沒結帳啊~ 現又多了一個~
    這是很基礎的 gravatar 引用 + copy 而已, 應該會代碼的都會吧~

  6. 前几天,在你这http://wange.im/cache-gravatar.html找到这方法,终于把头像缓存了。谢谢了。
    而用Wp-recentcomments评论插件的改下core.php着个文件也就可以实现啦。如果有用MG12的Elegant Box这个主题的朋友可以去我那看下我整理的步骤(小AD)。