0Wordpress Local Gravatar Cache

Ich mag Avatare für Menschen gezeigt haben, die auf meinem Blog kommentieren. Wordpress unterstützt die Gravatar Service nativ so ermöglicht dies ist sehr einfach. Allerdings kommt es mit einer Kosten - externe Dateien aus einer anderen Domäne zugreifen fügt viele zusätzliche Ladezeit in Form von neuen DNS Lookups, neu SSL Verbindungen zu machen, usw. Wäre es nicht schön, Gravatars lokal zu haben, gespeichert und von Ihrem eigenen Server bedient. Nun, das ist, was ich schon seit einiger Zeit jetzt tun, wenn Sie möchten wissen, wie, weiter lesen…

In case you’re still won­der­ing just why you’d want to do this, let me offer a few more bene­fits — images served loc­ally can be com­pressed before serving them, for example ‑all my images are con­ver­ted into webp ver­sions, and any browser which sup­ports webp gets the webp ver­sion. This is in addi­tion to the reduc­tion from not hav­ing to con­nect to an extern­al serv­er. The loc­al resources can also have a cach­ing head­er set on them so that browsers will cache them. Gravatar does­n’t provide for a very long cache time.

I have cre­ated 3 cus­tom func­tions, die stelle ich einfach in meinem Thema der functions.php. The first is a cus­tom fil­ter for the nat­ive word­press get_avatar(). Der zweite Greifer Avatare von Gravatar und Google, wenn aufgerufen,, and the third cre­ates a daily cronjob which refreshes the gravatars — in case they’ve been changed, or a pre­vi­ously unavail­able one is now avail­able.

You will need to do a little bit of tinker­ing to make it com­pat­ible with your theme — I use the “bones” frame­work as you’ll notice in the 3rd func­tion I’ve reused some code that it provided. You will also need to cre­ate, or cus­tom­ise the path to store the gravatars, which in my case are stored in the theme folder in the sub­path “/library/images/gravatars/”

/*********************************************\
* Filter get_avatar lokale Avatare verwenden nur *
\*********************************************/
Funktion bones_gravatar($Benutzerbild, $id_or_email, $Größe, $Default, $alt)
{
$root_path = get_template_directory_uri() . '/ Bibliothek / images / Gravatars /';
$root_path_local = get_template_directory() . '/ Bibliothek / images / Gravatars /';
$gravatar_path = $ root_path . 'Default_avatar';
$gravatar_path_hidpi = ‚data-Gravatar-HiDPI ="‘. $ Root_path . ‚Default_avatar-hidpi.png"';

//shamelessly reuse original code to get the e-mail address

$email = '';
wenn ( is_numeric($id_or_email) )
{
$id = (int) $id_or_email;
$user = get_userdata($die);
wenn ( $Benutzer ) $E-Mail = $ user->user_email;
}
elseif ( is_object($id_or_email) )
{
// No avatar for pingbacks or trackbacks
$allowed_comment_types = apply_filters( 'Get_avatar_comment_types', Feld( 'Kommentar' ) );
wenn ( ! leer( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (Feld) $allowed_comment_types ) ) falsch zurückgeben;
wenn ( !leer($id_or_email->Benutzeridentifikation) )
{
$id = (int) $id_or_email->Benutzeridentifikation;
$user = get_userdata($die);
wenn ( $Benutzer) $E-Mail = $ user->user_email;
}
elseif ( !leer($id_or_email->comment_author_email) )
{
$E-Mail = $ id_or_email->comment_author_email;
}
}
sonst
{
$E-Mail = $ id_or_email;
}

wenn ( !leer($Email) )
{
$email_hash = md5( strtolower( trimmen( $Email ) ) );
wenn(Datei existiert($root_path_local . $email_hash . '.png'))
{
//if we have a local cache then use it
$gravatar_path= $root_path . $email_hash ;
$gravatar_path_hidpi = ‚data-Gravatar-HiDPI ="‘. $ Root_path . $email_hash . ‚-hidpi.png"';
}
}
wenn($Größe >= 47) $avatar = '<img class ="Last-Gravatar avatar avatar - '$ Größe.' Foto" width ="'$ Größe.'" height ="'$ Größe.'" src ="' . $gravatar_path . ‚-hidpi.png" alt ="Gravatar" />';
$ Avatar sonst = '<img class ="Last-Gravatar avatar avatar - '$ Größe.' Foto" width ="'$ Größe.'" height ="'$ Größe.'" src ="' . $gravatar_path . ‘.png" alt ="Gravatar" ' . $gravatar_path_hidpi . '/>';

return $ avatar;
}

add_filter('Get_avatar', 'Bones_gravatar', 10, 5);






/***********************\
* Erstellen Gravatar Cache *
\***********************/
Funktion grab_avatar($comment_id,$Kommentar,$refresh = false,$email = '')
{
du schläfst(20);
$root_path = get_template_directory_uri() . '/ Bibliothek / images / Gravatars /';
$root_path_local = get_template_directory() . '/ Bibliothek / images / Gravatars /';
wenn($aktualisieren == false) $img_name = md5( get_comment_author_email($comment_id) );
else $ = img_name md5( $Email );
wenn(!Datei existiert($root_path_local . $img_name . '.png') || $aktualisieren == true)
{
wenn($aktualisieren == false) $bgauthemail = get_comment_author_email();
else $ bgauthemail = $ email;
//try google first
$domain= explode("@",$bgauthemail);
wenn($Domain[1]=="gmail.com")
{
$ch = curl_init();
curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, falsch);
curl_setopt($CH, CURLOPT_RETURNTRANSFER, wahr);
curl_setopt($CH, CURLOPT_URL, "http://picasaweb.google.com/data/entry/api/user/" . $bgauthemail . "?alt = json");
$Ergebnis = curl_exec($CH);
curl_close($CH);

$obj = json_decode($Ergebnis,wahr);
$avatar_from_gmail = $ obj['Eintrag']["GPhoto $ Thumbnail"]['$ T'];

$extension = strrchr($avatar_from_gmail, '');

$ch = curl_init($avatar_from_gmail);
curl_setopt( $CH, CURLOPT_NOBODY, wahr );
curl_setopt( $CH, CURLOPT_RETURNTRANSFER, falsch );
curl_setopt( $CH, CURLOPT_HEADER, falsch );
curl_setopt( $CH, CURLOPT_FOLLOWLOCATION, wahr );
curl_setopt( $CH, CURLOPT_MAXREDIRS, 3 );
curl_exec( $CH );
$headers = curl_getinfo( $CH );
curl_close( $CH );
wenn($Header['HTTP_CODE'] === 200)
{
$ch = curl_init($avatar_from_gmail);
$fp = fopen($root_path_local . $img_name . '-hidpi' . $Erweiterung, 'Wb');
curl_setopt($CH,CURLOPT_USERAGENT,‚Mozilla / 5.0 (Windows NT 6.1; Win64; x64) AppleWebKit / 537,36 (KHTML, wie Gecko) Chrom / 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' . $Erweiterung);
wenn ( ! is_wp_error( $small_image ) )
{
//überprüfen Sie es nicht ein leeres Mann Bild ist, wenn ja, 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;
}
else if (md5_file($root_path_local . $img_name . '-hidpi.jpg') == strtolower("6D4083BE95FB32358A5110F5A83B9979"))
{
//delete
unlink($root_path_local . $img_name . '-hidpi.jpg');
//try gravatar
$usegravatar=true;
}
sonst
{
//always convert to png because some plugins expect all gravatars to be pngs
$small_image->sparen($root_path_local . $img_name . '-hidpi.png','Image / jpeg');
$small_image->die Größe(40, 40, wahr);
$small_image->set_quality( 10 );
$small_image->sparen($root_path_local . $img_name . '.png','Image / jpeg');
wenn($Erweiterung ==".jpg") entkoppeln($root_path_local . $img_name . '-hidpi.jpg');
}
}
}

}
//check e-mail isnt a blank generic one
else if($bgauthemail!=="noemail@intensedebate.com" || $usegravatar == true)
{
$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, wahr );
curl_setopt( $CH, CURLOPT_RETURNTRANSFER, falsch );
curl_setopt( $CH, CURLOPT_HEADER, falsch );
curl_setopt( $CH, CURLOPT_FOLLOWLOCATION, wahr );
curl_setopt( $CH, CURLOPT_MAXREDIRS, 3 );
curl_exec( $CH );
$headers = curl_getinfo( $CH );
curl_close( $CH );
wenn($Header['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, wie Gecko) Chrom / 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');
wenn ( ! is_wp_error( $small_image ) )
{
$small_image->die Größe(40, 40, wahr);
$small_image->sparen($root_path_local . $img_name . '.png');
}
}
}
}
}
add_action('Wp_insert_comment', 'Grab_avatar');






/********************************************\
* Aktualisieren Gravatar Cache im Hintergrund täglich *
\********************************************/
add_action( 'Wp', 'Bones_setup_schedule' );
Funktion bones_setup_schedule() {
wenn ( ! wp_next_scheduled( 'Bones_daily_event' ) ) {
wp_schedule_event( Zeit(), 'Täglich', 'Bones_daily_event');
}
}

add_action( 'Bones_daily_event', 'Bones_refresh_gravatars' );
Funktion bones_refresh_gravatars()
{
//get list of gravatars somehow
global $wpdb;
$comment_author_emails = $ wpdb->get_results( "SELECT DISTINCT(comment_author_email) VON " . $wpdb->Präfix . "Bemerkungen" );
für jede($comment_author_emails wie $ key => $val)
{
für jede($val wie $ a => $b)
{
grab_avatar('','',wahr,$b);
}
}
}

Was denken Sie? Schreiben Sie uns einen Kommentar unten! Wenn Sie bitte abonnieren möchten den Link oben rechts auf dem Menü abonnieren verwenden. Sie können auch unten unter Verwendung der sozialen Bindungen diese mit Ihren Freunden teilen. Prost.

Hinterlasse eine Antwort