WordPress显示QQ头像,以前觉得好玩,在Gravatar缓存多的基础上又增加了QQ的头像缓存,Gravatar 頭像和QQ头像緩存和Gravatar -QQ头像緩存(更新)两篇文章。以前是用“网站地址” 检测QQ号,觉得影响隐私,加上很难获取到QQ的自定义头像(腾讯没有接口),所以就放弃了。
最近又有博友问起,我找了几种实现方法,觉得Hacklog的方法不错,拿过来修改了一下:
使用方法,只需要在邮箱那里填写QQ号+QQ.com.现在实现的功能:
访客填写的邮箱地址,如果是以QQ.com/VIP.QQ.com/FOXMAIL.com结尾的邮箱,并且前面是数字的(即QQ号码),加载QQ头像,并缓存。
访客网址部分填写的url如果是以纯数字开头,判断为QZONE(当然会有误判,但很少),获取号码,也显示QQ头像,并缓存。
其它情况,获取Gravatar头像缓存。
这样做避免了输入QQ号码泄漏的问题,你看源代码也没关系。因为我是直接调用的缓存头像,参数是邮箱地址,经过MD5加密。
代码还是一样,加在function.php里面:
<?php function my_avatar( $avatar, $id_or_email ) { $email = ''; $url=''; if ( is_numeric($id_or_email) ) { $id = (int) $id_or_email; $user = get_userdata($id); if ( $user ) $email = $user->user_email; } elseif ( is_object($id_or_email) ) { if ( isset($id_or_email->comment_type) && '' != $id_or_email->comment_type && 'comment' != $id_or_email->comment_type ) return false; // No avatar for pingbacks or trackbacks if ( !empty($id_or_email->user_id) ) { $id = (int) $id_or_email->user_id; $user = get_userdata($id); if ( $user) $email = $user->user_email; } elseif ( !empty($id_or_email->comment_author_email) ) { $email = $id_or_email->comment_author_email; $url=$id_or_email->comment_author_url; } } else { $email = $id_or_email; } $f = md5(strtolower($email)); $w = get_bloginfo('wpurl'); $e = ABSPATH.'/wp-content/avatar/'. $f .'.jpg';//缓存路径777权限 $t = 1209600; //設定14天, 單位:秒 //如果博客是Qzone或者邮箱以QQ邮箱结尾的 ,就用QQ头像。 if ( !empty($url) && preg_match('/^(http:\/\/)?[1-9][0-9]*[\.a-zA-Z\/]+$/i', $url) || preg_match('/^[1-9][0-9]*@qq\.com$/i', $email) || preg_match('/^[1-9][0-9]*@foxmail\.com$/i', $email) || preg_match('/^[1-9][0-9]*@vip\.qq\.com$/i', $email)) { $qq_face_url = 'http://face7.qun.qq.com/cgi/svr/face/getface?&uin=%s'; //QQ头像地址, %s表示QQ号 $qq = preg_replace('|\D*|', '', $url); if(!$qq) $qq = preg_replace('|\D*|', '', $email); $g = str_replace('%s', $qq, $qq_face_url); } else { //否则就用gravatar头像(缓存) $tmp = strpos($avatar, 'http'); $g = substr($avatar, $tmp, strpos($avatar, "'", $tmp) - $tmp); } if ( !is_file($e) || (time() - filemtime($e)) > $t ){ copy($g, $e); //當頭像不存在或文件超過14天才更新 @chmod($e,0777); } if ( filesize($e) < 500 ) { @copy($w.'/wp-content/avatar/default.jpg', $e); @chmod($e,0777); } $out = $w.'/wp-content/avatar/'.$f.'.jpg'; $avatar = preg_replace('/src=\'[^\']*\'/', 'src=\''.$out. '\'', $avatar); return $avatar; } add_filter('get_avatar', 'my_avatar' ,10 ,2);
其实我觉得意义不大,放出来给需要的TX参考,没啥技术。
注意:请勿在本站测试,我没用使用这段代码,只在本地测试有用。不保证没有bug,已知问题是很大程度上不能显示QQ自定义头像,请看看前面两篇文章
如果你使用了这段代码,并觉得有用,欢迎留言提供地址,做个示例。
动态QQ头像 缓存后会变静态么?
@阿邙 除非是会员,没有找到动态QQ头像的接口。
@winy 刚提交评论的时候出现了错误。。
你在折腾么?
@阿邙 嗯,刚弄完ajax评论翻页
@winy 哇 我找地方翻一翻去
这个很好,先收藏,以前你写的两个方法我就已经参考过了,不错不错
我還是不贊成用 qq 頭像, 申請 gravatar 已經很方便.
@willin 是的,我也没用,只是国内QQ用户太多啦
如果新增一个选项填入QQ,这样会不会很麻烦?
@Ben
是比较麻烦,因为你得用个数据库表来保存QQ号,另外需要修改wp原文件
@winy , 将QQ号的数据存储在表单,然后用cookies来作为记录?
如果能直接通过对QQ号的判断来显示头像应该会有很大的便利。
@Ben
问题关键是QQ没有头像api,偶尔用群空间头像能弄出来,自定义头像基本不可能。。还不稳定
我想请教一下,关于你的评论框上边的一排比如表情、格式等,如何让隐藏,然后在点击评论狂的时候才出现?
@奚少
简单,直接css隐藏,点击评论框用js渐显而已,伪装ajax载入
很漂亮的空间