为了解决 WordPress Gravatar头像加载缓慢的问题,有很多方法可以参考,其中一种方法就是利用本地上传的头像,之后随机加载。知更鸟给出了一段如下代码。但是,这代码也有问题,那就是:对同一个评论者不能固定显示头像的问题。同一个评论者的头像也会随机显示,如果刷新、或者同一评论回复了多次,头像就有点乱了。
- add_filter( 'get_avatar' , 'local_random_avatar' , 1 , 5 );
- function local_random_avatar( $avatar, $id_or_email, $size, $default, $alt) {
- if ( ! emptyempty( $id_or_email->user_id ) ) { //管理员账户的id数字为非零
- $avatar = ''.get_template_directory_uri().'/avatar/admin.jpg';
- }else{
- $random = mt_rand(1, 10); //mt_rand(1, 10) 数字为随机图片张数可以自行修改
- $avatar = ''.get_template_directory_uri().'/avatar/'. $random .'.jpg';
- }
- $avatar = "<img alt='{$alt}' src='{$avatar}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
- return $avatar;
- }
上述问题的解决办法
我前一篇文章写过《将WordPress用户头像本地缓存,并把字母头像分配给无头像用户》一文,意思是把没头像的用户头像用字母图片代替。这里,字母和用户的名字是关联和一一对应的。
是怎么做到这点的呢?是利用了 JavaScript 中的 charCodeAt() 方法:返回指定位置的字符的 Unicode 编码,返回值是 0 - 65535 之间的整数。例如返回字符串第一个字符的 Unicode 编码(H 的 Unicode 值):
- var str = "HELLO WORLD";
- var n = str.charCodeAt(0);
返回值是 72 。
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
字母头像是将用户名的第一个字符变为 Unicode 编码的数字。从而使头像与用户名进行了一一对应。
而在 WordPress 中,大都使用了评论时填写的 Email 地址来对应用户。例如 WordPress 中先将用户的 Email 地址使用 md5() 函数进行MD5加密:md5( strtolower( $email ) )
。
- - -
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
本文的解决思路也是从把 Email 进行MD5加密开始的,加密之后去掉非数字的字符,得到纯数字的字符,从而与用户进行一一对应。
例如,如果你有20张头像图片,可以这样设置:
- $f = md5( strtolower( $email ) ); //md5加密
- $digits = preg_replace( '/[^0-9]/i', '', $f ); // 去掉字符串中的所有非数字字符
- $num = $digits%20; //除以20求余数,可以得0~19的数字
相应的头像图片编号为:0.jpg、1.jpg、2.jpg … 19.jpg 。
本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2024. All Rights Reserved
上述只是一种思路,当然,也有其他思路,例如将数字字符串截取几位,进行相应的对应,也是一种办法。这里涉及到概率的问题,即哪些数字出现的机率大的问题。既然是随机,从 0 到19,出现的机率均等的算法才是最好的。
以上仅供参考。
本文禁止无授权转载 - 时光在路上 www.timezls.com 保留所有权利