我喜欢的人头像显示在我的博客评论谁. WordPress的支持的gravatar服务本身因此启用,这是很容易. 然而,它是有代价 – 从另一个域访问外部文件中增加了许多额外的加载时间的新形式 DNS 查找, 新 SSL 连接使, 等等. 那岂不是不错的gravatars本地存储,并从自己的服务器提供服务. 嗯,这就是我一直在做了一段时间, 如果你想知道如何, 阅读…
如果你仍然不知道刚才为什么你要做到这一点, 让我提供一些更多的好处 – 本地提供的图像可以为他们提供服务之前被压缩, 例如-all我的图片转换成WEBP版本, 并支持WEBP任何浏览器获取WEBP版本. 这是除了来自不具有还原成连接到外部服务器. 当地资源还可以有一个缓存在头部上设置它们,这样浏览器会缓存他们. 的Gravatar不提供很长的缓存时间.
我创造了 3 自定义功能, 我只是把我的主题的functions.php文件. 首先是原生的WordPress get_avatar自定义过滤器(). 从的gravatar和谷歌的第二争夺化身呼吁时, 第三创建一个日常的cronjob这刷新gravatars – 在情况下,他们已经改变, 或以前没有的一个现在可用.
你需要做修修补补的一点点,使其与你的主题兼容 – 我用 “骨头” 框架,你会在第三功能注意到我已经重复使用一些代码,它提供. 您还需要创建, 或自定义存储gravatars路径, 这在我的情况下被保存在主题文件夹中的子路径 “/库/图像/ gravatars /”
/*********************************************\ * 过滤get_avatar只使用本地替身 * \*********************************************/ 功能bones_gravatar($头像, $id_or_email, $尺寸, $默认, $ALT) { $root_path = get_template_directory_uri() . '/库/图像/ gravatars /'; $root_path_local = get_template_directory() . '/库/图像/ gravatars /'; $gravatar_path = $ root_path . 'default_avatar'; $gravatar_path_hidpi =“数据的gravatar-hidpi ="”。$ root_path . “default_avatar-hidpi.png"“; //shamelessly reuse original code to get the e-mail address $email = ''; 如果 ( is_numeric($id_or_email) ) { $ID = (INT) $id_or_email; $用户= get_userdata($ID); 如果 ( $用户 ) $电子邮件= $用户>USER_EMAIL; } ELSEIF ( is_object($id_or_email) ) { // No avatar for pingbacks or trackbacks $allowed_comment_types = apply_filters( 'get_avatar_comment_types', 排列( '评论' ) ); 如果 ( ! 空( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (排列) $allowed_comment_types ) ) 返回false; 如果 ( !空($id_or_email->用户名) ) { $ID = (INT) $id_or_email->用户名; $用户= get_userdata($ID); 如果 ( $用户) $电子邮件= $用户>USER_EMAIL; } ELSEIF ( !空($id_or_email->comment_author_email) ) { $电子邮件= $ id_or_email->comment_author_email; } } 其他 { $电子邮件= $ id_or_email; } 如果 ( !空($电子邮件) ) { $email_hash = MD5( 用strtolower( 修剪( $电子邮件 ) ) ); 如果(文件已存在($root_path_local . $email_hash . “巴纽”)) { //if we have a local cache then use it $gravatar_path= $root_path . $email_hash ; $gravatar_path_hidpi =“数据的gravatar-hidpi ="”。$ root_path . $email_hash . “-hidpi.png"“; } } 如果($尺寸 >= 47) $头像='<IMG类="负载的gravatar头像头像 - “ $大小。”照片" 宽度="'$大小。'" 高度="'$大小。'" SRC ="“ . $gravatar_path . “-hidpi.png" ALT ="的gravatar" />“; 否则$头像='<IMG类="负载的gravatar头像头像 - “ $大小。”照片" 宽度="'$大小。'" 高度="'$大小。'" SRC ="“ . $gravatar_path . ”巴纽" ALT ="的gravatar" “ . $gravatar_path_hidpi . “/>“; 返回$头像; } 的add_filter('get_avatar', 'bones_gravatar', 10, 5); /***********************\ * 创建的gravatar缓存 * \***********************/ 功能grab_avatar($COMMENT_ID,$评论,$刷新= FALSE,$电子邮件=“”) { usleep(20); $root_path = get_template_directory_uri() . '/库/图像/ gravatars /'; $root_path_local = get_template_directory() . '/库/图像/ gravatars /'; 如果($刷新==假) $img_name = MD5( get_comment_author_email($COMMENT_ID) ); 否则$ img_name = MD5( $电子邮件 ); 如果(!文件已存在($root_path_local . $img_name . “巴纽”) || $刷新==真) { 如果($刷新==假) $bgauthemail = get_comment_author_email(); 否则$ bgauthemail = $电子邮件; //try google first $domain= explode("@",$bgauthemail); 如果($域[1]=="gmail.com") { $CH = curl_init(); curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, 假); curl_setopt($CH, CURLOPT_RETURNTRANSFER, 真的); curl_setopt($CH, CURLOPT_URL, "HTTP://picasaweb.google.com/data/entry/api/user/" . $bgauthemail . "?ALT = JSON"); $结果= curl_exec($CH); curl_close($CH); $OBJ = json_decode($结果,真的); $avatar_from_gmail = $ OBJ['条目'][“GPhoto $缩略图”]['$ T']; $延长= strrchr($avatar_from_gmail, ''); $CH = curl_init($avatar_from_gmail); curl_setopt( $CH, CURLOPT_NOBODY, 真的 ); curl_setopt( $CH, CURLOPT_RETURNTRANSFER, 假 ); curl_setopt( $CH, CURLOPT_HEADER, 假 ); curl_setopt( $CH, CURLOPT_FOLLOWLOCATION, 真的 ); curl_setopt( $CH, CURLOPT_MAXREDIRS, 3 ); curl_exec( $CH ); $标题= curl_getinfo( $CH ); curl_close( $CH ); 如果($头['HTTP_CODE'] === 200) { $CH = curl_init($avatar_from_gmail); $FP =的fopen($root_path_local . $img_name . '-hidpi' . $延期, 'WB'); curl_setopt($CH,CURLOPT_USERAGENT,“的Mozilla / 5.0 (Windows NT的 6.1; Win64平台; x64的) 为AppleWebKit / 537.36 (KHTML, 像壁虎) 镀铬/ 39.0.2171.62的Safari / 537.36'); curl_setopt($CH, CURLOPT_FILE, $FP); curl_setopt($CH, CURLOPT_HEADER, 0); curl_exec($CH); curl_close($CH); FCLOSE($FP); $usegravatar = FALSE; $small_image = wp_get_image_editor($root_path_local . $img_name . '-hidpi' . $延期); 如果 ( ! is_wp_error( $small_image ) ) { //检查一下是不是空白的男人形象, 如果是这样, delete it if (md5_file($root_path_local . $img_name . '-hidpi.jpg') ==用strtolower("686E5C46776BA0E5C488853C1C0B492C")) { //delete unlink($root_path_local . $img_name . '-hidpi.jpg'); //try gravatar $usegravatar=true; } 否则,如果 (md5_file($root_path_local . $img_name . '-hidpi.jpg') ==用strtolower("6D4083BE95FB32358A5110F5A83B9979")) { //delete unlink($root_path_local . $img_name . '-hidpi.jpg'); //try gravatar $usegravatar=true; } 其他 { //always convert to png because some plugins expect all gravatars to be pngs $small_image->保存($root_path_local . $img_name . '-hidpi.png','图像/ PNG'); $small_image->调整(40, 40, 真的); $small_image->set_quality( 10 ); $small_image->保存($root_path_local . $img_name . “巴纽”,'图像/ PNG'); 如果($扩展==".JPG") 取消链接($root_path_local . $img_name . '-hidpi.jpg'); } } } } //check e-mail isnt a blank generic one else if($bgauthemail!=="noemail@intensedebate.com" || $usegravatar ==真) { $avatar_from_gravatar = "https://www.gravatar.com/avatar/" . $img_name . "?S = 80&d = 404"; $CH = curl_init($avatar_from_gravatar); curl_setopt( $CH, CURLOPT_NOBODY, 真的 ); curl_setopt( $CH, CURLOPT_RETURNTRANSFER, 假 ); curl_setopt( $CH, CURLOPT_HEADER, 假 ); curl_setopt( $CH, CURLOPT_FOLLOWLOCATION, 真的 ); curl_setopt( $CH, CURLOPT_MAXREDIRS, 3 ); curl_exec( $CH ); $标题= curl_getinfo( $CH ); curl_close( $CH ); 如果($头['HTTP_CODE'] === 200) { $CH = curl_init($avatar_from_gravatar); $FP =的fopen($root_path_local . $img_name . '-hidpi.png', 'WB'); curl_setopt($CH,CURLOPT_USERAGENT,“的Mozilla / 5.0 (Windows NT的 6.1; Win64平台; x64的) 为AppleWebKit / 537.36 (KHTML, 像壁虎) 镀铬/ 39.0.2171.62的Safari / 537.36'); curl_setopt($CH, CURLOPT_FILE, $FP); curl_setopt($CH, CURLOPT_HEADER, 0); curl_exec($CH); curl_close($CH); FCLOSE($FP); $small_image = wp_get_image_editor($root_path_local . $img_name . '-hidpi.png'); 如果 ( ! is_wp_error( $small_image ) ) { $small_image->调整(40, 40, 真的); $small_image->保存($root_path_local . $img_name . “巴纽”); } } } } } ADD_ACTION('wp_insert_comment', 'grab_avatar'); /********************************************\ * 每天刷新在后台缓存的gravatar * \********************************************/ ADD_ACTION( 'WP', 'bones_setup_schedule' ); 功能bones_setup_schedule() { 如果 ( ! wp_next_scheduled( 'bones_daily_event' ) ) { wp_schedule_event( 时间(), '日常', 'bones_daily_event'); } } ADD_ACTION( 'bones_daily_event', 'bones_refresh_gravatars' ); 功能bones_refresh_gravatars() { //get list of gravatars somehow global $wpdb; $comment_author_emails = $ wpdb->get_results( "SELECT DISTINCT(comment_author_email) 从 " . $wpdb->字首 . "注释" ); 的foreach($comment_author_emails为$关键=> $VAL) { 的foreach($VAL为$ a => $b) { grab_avatar('','',真的,$b); } } }
有你自己的一些想法? 下面放纵自己通过评论! 如果您想订阅,请使用菜单上的订阅链接右上方. 您还可以通过使用下面的链接社会分享这与你的朋友. 干杯.
发表评论