wordpress Gravatar 头像不显示(被墙)解决方法

最近发现很多Gravatar 头像都不显示了,开始还以为是网络问题,后来才知道是Gravatar 的服务也被和谐了,看着那些叉叉很是头疼,不过目前也没有什么好的第三方的头像服务,只能继续采用Gravatar 的。下面是解决方法

第一种方法,https直接调用官方的数据,理论上应该是最稳定的了,目前https还是没被墙的,而且速度还不错,直接调用这个最简单了。

如果你的网站启用了ssl则不需要了,否则functions.php 加入如下代码

function get_ssl_avatar($avatar) {
   $avatar = preg_replace('/.*\/avatar\/(.*)\?s=([\d]+)&.*/','<img src="https://secure.gravatar.com/avatar/$1?s=$2" class="avatar avatar-$2" height="$2" width="$2">',$avatar);
   return $avatar;
}
add_filter('get_avatar', 'get_ssl_avatar');

多说缓存

下面的代码加到functions.php

function duoshuo_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_avatar', 10, 3 );

另外一种写法

function mytheme_get_avatar( $avatar ) {

$avatar = preg_replace( “/http:\/\/(www|\d).gravatar.com/”,”http://gravatar.duoshuo.com”,$avatar );

return $avatar;

}

add_filter( ‘get_avatar’, ‘mytheme_get_avatar’ );

免插件实现带gravatar头像缓存的最新评论代码

免插件实现带gravatar头像缓存的最新评论Recent Comments,功能: 不用插件就可以将WordPress的最新评论显示在侧边栏, 同时包含头像缓存功能.

把下列代码 copy 到模板的 sidebar.php的相应位置

<h3><?php _e(‘Recent Comments’); ?></h3>
<ul class="recentcomments">
<?php
global $wpdb;
$my_email = get_bloginfo (‘admin_email’);
$rc_comms = $wpdb->get_results("
  SELECT ID, post_title, comment_ID, comment_author, comment_author_email, comment_content
  FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts
  ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID)
  WHERE comment_approved = ‘1’
  AND comment_type = ”
  AND post_password = ”
  AND comment_author_email != ‘$my_email’
  ORDER BY comment_date_gmt
  DESC LIMIT 10
");
$rc_comments = ”;
foreach ($rc_comms as $rc_comm) {
  $a = ‘avatar/’.md5(strtolower($rc_comm->comment_author_email)).’.jpg’; // 头像缓存用的
  $rc_comments .= "<li><img src=’" . $a . "’ alt=” title=’" . $rc_comm->comment_author
    . "’ class=’avatar’ /><a href=’"
    . get_permalink($rc_comm->ID) . "#comment-" . $rc_comm->comment_ID
  //. htmlspecialchars(get_comment_link( $rc_comm->comment_ID, array(‘type’ => ‘comment’))) // 可取代上一行, 会显示 cpage, 但较耗资源
    . "’ title=’on " . $rc_comm->post_title . "’>" . strip_tags($rc_comm->comment_content)
    . "</a></li>n";
}
$rc_comments = convert_smilies($rc_comments);
echo $rc_comments;
?>
</ul>

其中 $my_email 已自动判断, 让博主的评论不显示. 当然你也可以在 WHERE 中定义筛选哪些名字的评论不出现.
$a 是用相对路径, 执行有问题的话, 也可改绝对路径.
如果模板有贴图功能, convert_smilies($rc_comments); 可再加一层 embed_images( … ); 就可显缩图. 在 css 控制缩图的 max-width 和 max-height.
这个代码并不裁剪评论长度, 所以 li 要用 css 控制 overflow:hidden; 让多余的不显示.
global $wpdb 只要一次就够了, 如果其它地方已经有, 可删掉那行.
最新评论通常只运行一次, 没必要写成 function, 以免被 cache 无法更新.

文章来源:http://kan.willin.org/?p=1278

WordPress免插件读者墙改进版

这是续上篇WordPress免插件读者墙之后的改进版本,是在网上无意中发现的,一块CP过来以备自己以后参考。 上版WordPress免插件读者墙的代码据说是按照作者名把评论数量归类相加的,这就出现个问题,就是当作者名称一样的时候,网站和邮箱不一样,或者没有填写邮箱的时候,评论数量会增加到已经存在的作者上.这样对后来的同名留言者就显得很不公平。另一个问题类似:是有些评论者今天叫这个名字,明天又改了名字,但是邮箱和网址不变,就变成两个人展示出来了.

于是就有高手整理出解决上述问题的新代码来了,WordPress读者墙免修改版代码如下:

<h2>Most Active Friends</h2> //标题,可根据需要增加样式
<ul>
<?php
$my_email = "’" . get_bloginfo (‘admin_email’) . "’";
//获取管理员邮箱
$counts = $wpdb->get_results("
SELECT COUNT(comment_author) AS cnt, comment_author, comment_author_url, comment_author_email FROM (SELECT * FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->posts.ID=$wpdb->comments.comment_post_ID) WHERE comment_date > date_sub( NOW(), INTERVAL 1 MONTH )
//1 MONTH就是一个月之内的排行
AND user_id=’0′
AND comment_author_email != $my_email //根据邮箱判断,输出非博主的数据.
AND post_password=”
AND comment_approved=’1′
AND comment_type=”) AS tempcmt
AS tempcmt GROUP BY comment_author_email
//按同一作者邮箱把评论数量归类相加
ORDER BY cnt
DESC LIMIT 12"); //最后一个数字12就是显示头像的数量。
foreach ($counts as $count) {
$c_url = $count->comment_author_url;
$mostactive .= ‘<li>’ . ‘<a href="’. $c_url . ‘" title="’ . $count->comment_author . ‘ (‘. $count->cnt . ‘comments)">’ . get_avatar($count->comment_author_email, 40) . ‘</a></li>’;
}</div>
echo $mostactive;
?>
</ul>

由于主题的不同,可能部分地方需要自己修改一下CSS,关于css定义,可参考上篇WordPress免插件读者墙

注:上面代码中标注出了INTERVAL 1 MONTH )
//1 MONTH就是一个月之内的排行,这个可以修改成1 YEAR ,意思是一年内的排行,如果修改成1 DAY 或者 24 HOUR 就会显示1天内或24小时内留言的朋友的头像,

如果需要根据评论的最后时间排列的.
这就需要将上面代码中ORDER BY cnt
改为 ORDER BY comment_date_gmt
然后删除掉DESC LIMIT 12,因为我们并不知道24小时内有多少人会留言.
所以就不需要限定显示的数量了.

同时推荐上述代码配合Gravatar 头像緩存来使用,效果更佳。

Gravatar 头像緩存实现方法:

先在你的网站 wp-content 的同级目录建立资料夹: /avatar 权限:755, 这是准备 gravatar 缓存的路径.准备一张适合你模板尺寸的默认头像, 名为"default.jpg" 放在此路径.

将下列代码 copy 到模板的 functions.php

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);
$w = get_bloginfo(‘wpurl’);
$e = ABSPATH .’avatar/’. $f .’.jpg’;
$t = 1209600; //設定14天, 單位:秒
if ( !is_file($e) || (time() – filemtime($e)) > $t ) { //當頭像不存在或文件超過14天才更新
copy(htmlspecialchars_decode($g), $e);
} else $avatar = strtr($avatar, array($g => $w.’/avatar/’.$f.’.jpg’));
if ( filesize($e) < 500 ) copy($w.’/avatar/default.jpg’, $e);
return $avatar;
}
add_filter(‘get_avatar’, ‘my_avatar’);

上面这个Gravatar头像緩存代码是将 my_avatar() 挂勾在 get_avatar() 後面, 将 get_avatar() 的输出再进行处理.
这个缓存方式不必改模板, 而且连後台都可用缓存头像, 但有些缺点是: 多了程序会较耗资源和速度, 而且後台的头像比较小, 缓存的头像在前台比较难看.
另外, 你也许已发现, 代码中有两个可用正则匹配的地方, 故意改用字串函数, 目的是加快执行速度.

注意: 因为这方法是挂在 get_avatar() 後面, 所以必须在 get_avatar() 定义 $default,
例: echo get_avatar( $id_or_email, $size = ’42’, $default = get_bloginfo(‘wpurl’) . ‘/avatar/default.jpg’ );
其中 $id_or_email 的部份要看你模板怎麽写, 後面的 $default 所带的就是默认头像.

以前的版本在第一次 copy 头像时不能显示头像 (因为缓存没有头像), 这新版在第一次没头像时, 会直接显示 gravatar 的头像.

WordPress免插件读者墙改进版代码来自:http://amangs.com/wordpress-reader-wall.html
Gravatar 头像緩存代码来自:http://kan.willin.org/?p=1320

全球通用头像Gravatar头像注册使用教程

上网这么久,你还没有你的个性头像?这也太out了吧?想在网上发表评论时显示你自己的个性头像么?本文将一步一步告诉你如何设置你的评论个性头像。

首先我还是简单介绍一下Gravatar头像吧:

其实,我们把那种个性头像叫Gravatar,现在大部分网站博客都支持这种头像。是一种全球通用头像。Gravatar的概念首先是在国外的独立WordPress博客中兴起的,当你到任何一个支持Gravatar的网站留言时,这个网站都就会根据你所提供的Email地址为你显示出匹配的头像。这个头像功能是和WordPress一起的,和开源博客系统 WordPress以及反垃圾插件Akismet一样,都是属于Aumattic公司的产品,最开始也是依附于WordPress,但现在,已经不仅仅局限于为WordPress提供服务了,已经被广泛的应用在各种web 2.0的服务中,比如最新的就是gmail和QQ邮箱都支持Gratavar,所以,有一个自己的头像还是很必要的,Gravatar越来越成为全球通用头像。

当然,这个头像,是需要你事先到Gravatar的网站注册并上传的,否则,在这个网站上,就只会显示成一个默认的头像。既然现在大部分网站博客都支持Gravatar头像,那壹品集自然也支持Gravatar头像了,你可以通过你的个性头像打造起你的个人品牌了!并且这个Gravatar没有什么约束,想换头像换马甲?很简单,改改留言的名字和email地址就可以了。另外注册与使用Gravatar均是完全免费的。
gravatar全球通用头像

下面几个步骤可以告诉大家如何在壹品集http://www.articn.com/或者别人的Blog上定制自己的个性头像:
1. 注册:进入Gravatar网站(网址http://gravatar.com/),点击顶部菜单里的Sign Up。然后会提示你输入你的Email地址

注:请用你真实有效的邮箱,(这个邮箱地址最好是常用的,因为在WordPress博客上留言的朋友知道,会需要输入一个邮箱地址,而且是必选的。)成功之后,会提示已经发送邮件到指定的邮箱。

2. 验证:进入你刚才注册时填的邮箱,点击激活链接,如果不能点击链接的话,可以从Gravatar发出的信件中拷贝那段链接地址,在浏览器输入。这时会进入个人信息确认页面,确认的时候,记得 check 一下自己的用户名,毕竟人多,难免用户名重复。

3.确认了用户名和密码登陆可以看见“Add one by clicking here!” 的字样,意思是点击这里增加一个头像

4. 选择上传图片:一般都是从电脑中上传(My computer’s hard drive)。

5. 剪裁大小

6. 评级:你的头像要被分级的,因为可能会有朋友喜欢用比较曝露的头像,会影响小朋友身心健康的说。如果你的图片不是特别那个的话,一般不用选择Sex或暴力之类的,直接选择G(通用型),这样基本任何网站都能显示这个等级的图片。级以下的头像……
Gravatar头像分级
7. 等待审核:可能需要站方短暂审核一下,一般选择了G,而你的图片没什么特别的,很快就通过。一般遇上慢的情况也就10分钟左右。

完成了以上步骤,今后在壹品集和其他支持Gravatar的网站留言都会显示你帅帅的头像了。暂时来说,大部分支持Gravatar的网站均是使用WordPress程序的博客,但其实任何其他网站程序,如果加入了Gravatar的代码,也是可以支持Gravatar的。估计这个应用在日后会渐渐普及起来吧,起码用户不需要每到一个网站去就搞一下头像…
1. 问:注册和找回密码在哪进行?
Gravatar注册 | Gravatar找回密码
2. 问:注册Gravatar之后,只要是WordPress博客就能看到自己的头像了么?
答:不一定,这取决于博客主题是否支持了Gravatar的API,幸运的是,目前大多数WordPress博客所使用的主题是支持Gravatar的。
3. 问:只能在WordPress博客使用Gravatar么?
答:不是。这主要取决于网站管理者:只要网站能获取你的EMail信息,同时又在展现层使用Gravatar的API,就可以使用。国外一些小的Web2.0公司的产品都是支持Gravatar的。
4. 问:用EMail去匹配,又是通过展现层(HTML代码),那会不会泄露我的EMai呢?
答:不会,因为Gravatar使用的是MD5加密之后的EMail字符串,您完全不必担心您的EMail地址泄露。
5. 问:为什么我注册之后看不到图像?
答:因为Gravatar有一个比较长的缓冲周期;注册完之后,并不会立即显示相应图像
6. 问:我如果现在注册,之前留言中的头像会显示么?
答:会,只要提交评论的时候,你使用了同样的EMail地址即会显示
7. 问:如果想注册多个头像,怎么办?
答:可以用GMail的一个“加号”小技巧来注册。其他邮箱暂时无法满足这种需求。这也是邮箱方面GMail的绝对竞争优势之一。
8. 问:如果有人冒充我的邮箱呢?
答:没办法,如果被人冒充,就会显示这个邮箱匹配的头像,这的确是一个问题。因此,保护好自己的邮箱是非常重要的,也可以结合“8”中提到的GMail小技巧,比如你可使用somemail+1980@gmail.com来作为你的注册邮箱。一般人是无法猜测到你这个“+1980”的私有后缀的,而这个邮箱又能在GMail所正常使用。
简单吧,现在大家可以自己动手打造完全个性化的头像了!