让简单头像Gavatar缓存函数my_avatar真正支持alt

willin最新版那个简单头像Gavatar缓存函数 my_avatar() 里面的 $alt 参数其实是没有作用的,即使你设置为 true ,返回的只是 1,所以不能达到显示头像的 alt 值。

大家也许会问:加入了alt属性有什么好处?答:它可以提高yslow和page speed的分数。

1. 在 wp-content 的同级目录建立文件夹:avatar,权限为:755, 这是准备 gravatar 缓存的路径。接着把下面这段代码加入你主题的functions.php中。

让函数真正支持头像的 alt 显示,简单头像Gavatar缓存代码如下

/* Mini Gavatar Cache by Willin Kan. */
function my_avatar( $email, $size = ’42’, $default = ”, $alt = ” ) {
  // $alt = (false === $alt) ? ” : esc_attr( $alt );
  $alt = (” == $alt) ? ” :  $alt ;
  $f = md5( strtolower( $email ) );
  $a = get_bloginfo(‘wpurl’). ‘/avatar/’. $f. ‘.jpg’;
  $e = ABSPATH. ‘avatar/’. $f. ‘.jpg’;
  $t = 1209600; //設定14天, 單位:秒
  if ( empty($default) ) $default = get_bloginfo(‘template_directory’). ‘/img/default.jpg’;
  if ( !is_file($e) || (time() – filemtime($e)) > $t ){ //當頭像不存在或文件超過14天才更新
    $r = get_option(‘avatar_rating’);
    //$g = sprintf( “http://%d.gravatar.com”, ( hexdec( $f{0} ) % 2 ) ). ‘/avatar/’. $f. ‘?s=’. $size. ‘&d=’. $default. ‘&r=’. $r; // wp 3.0 的服務器
    $g = ‘http://www.gravatar.com/avatar/’. $f. ‘?s=’. $size. ‘&d=’. $default. ‘&r=’. $r; // 舊服務器 (哪個快就開哪個)
    copy($g, $e); $a = esc_attr($g);
  }
  if (filesize($e) < 500) copy($default, $e);
  $avatar = “<img title='{$alt}’ alt='{$alt}’ src='{$a}’ class=’avatar avatar-{$size} photo’ height='{$size}’ width='{$size}’ />”;
  return apply_filters(‘my_avatar’, $avatar, $email, $size, $default, $alt);
}
// — END —————————————-

再准备一个50x50px的jpg头像,命名为default.jpg,放在你主题的img文件夹下,想放其他地方,自行修改上面代码中的路径吧。

用法说明介绍:

my_avatar( $email, $size = ’40’, $default = ”, $alt = ” )

$email: 评论者email
$size: 头像图片大小
$default: 默认头像位置,如果你不设置,那么在 avatar 缓存目录放一个 default.jpg 作为默认头像。
$alt: 评论者昵称

用法举例

1. 文章评论页面调用一般是这样:

<?php echo my_avatar($comment->comment_author_email,$size=’40’,$default=”,$comment->comment_author); ?>

例如壹品集原来的评论那里Gavatar的相关代码是:这段代码哪里找?一般是在comments.php 或是在 functions.php 里。

<?php echo get_avatar( $comment, $size = ’50’, $default = ‘<path_to_url>’ ); ?>

那么找到那段代码换成上面的或者是下面的代码就ok:注:下面是不需要定义$default和$alt的。

<?php echo my_avatar($comment->comment_author_email,$size=’40’); ?>

最新评论里面用的

my_avatar($rc_comm->comment_author_email,$size=’40’,$default=”,$rc_comm->comment_author)

资料来源:http://zww.me/archives/25296

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

实现WordPress之gravatar头像缓存非插件版

本来不打算整这功能的,不过由于这段时间博客链接gravatar服务器获取gravatar头像变的非常缓慢,于是才决定把gravatar头像缓存到本地。采用willin的方法,简单实现gravatar头像缓存。测试成功,此文为备忘。

gravatar头像缓存前提:

确定自己的模板主题文件 comments.php 用的是 WordPress 2.7 以后才有的 wp_list_comments()

开始:

1. 在 wp-content 的同级目录建立文件夹:avatar,权限为:755, 这是准备 gravatar 缓存的路径

2. 把一个50×50的jpg图片改名为:default.jpg,把它存到第1步建立的 gravatar 缓存文件夹 avatar 里面

3. 找到主题文件 comments.php 或是在 functions.php 里的 function mytheme_comment($comment, $args, $depth) 会有一段像下面这样一段代码:

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

替换成:

<?php
$p = ‘avatar/’;
$f = md5(strtolower($comment->comment_author_email));
$a = $p . $f .’.jpg’;
$e = ABSPATH . $a;
if (!is_file($e)){ //当头像不存在就更新
$d = get_bloginfo(‘wpurl’). ‘/avatar/default.jpg’;
$s = ’32’; //头像大小 自行根据自己模板设置
$r = get_option(‘avatar_rating’);
$g = ‘http://www.gravatar.com/avatar/’.$f.’.jpg?s=’.$s.’&d=’.$d.’&r=’.$r;
copy($g, $e);
if ( filesize($e) == 0 ){ copy($d, $e); }
};
?>
<img src='<?php bloginfo(‘wpurl’); ?>/<?php echo $a ?>’ alt=” class=’avatar’ />

3. 没有了
原文:http://zww.me/archives/24711