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 einem 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 gespeichert hat und serviert von Ihrem eigenen Server. Nun, das ist, was ich schon seit einiger Zeit jetzt tun, wenn Sie möchten wissen, wie, weiter lesen…

Falls Sie sich fragen Sie nach wie vor nur, warum Sie dies tun wollen würde, Lassen Sie mich ein paar mehr Vorteile bieten – serviert Bilder können lokal sie vor dem Servieren komprimiert werden, zum Beispiel -all sind meine Bilder in webp Versionen umgewandelt, und jeder Browser, der webp unterstützt wird die webp Version. Dies ist neben der Reduktion von nicht an einen externen Server verbinden mit. Die lokalen Ressourcen können auch einen Cache-Header auf sie gesetzt, so dass Browser sie zwischengespeichert werden. Gravatar bietet nicht für eine sehr lange Zeit Cache.

ich habe erschaffen 3 benutzerdefinierte Funktionen, die stelle ich einfach in meinem Thema der functions.php. Die erste ist eine benutzerdefinierte Filter für die native Wordpress get_avatar(). Der zweite Greifer Avatare von Gravatar und Google, wenn aufgerufen,, und die dritte schafft eine tägliche cronjob, die die Gravatars frischt – im Falle haben sie geändert, oder ein zuvor nicht verfügbar ist ab sofort verfügbar.

Sie müssen ein wenig Bastelei tun, um es mit Ihrem Thema kompatibel zu machen – Ich verwende das “Gebeine” Rahmen, wie Sie in der 3. Funktion auffallen wird, habe ich einige Code wiederverwendet, die es zur Verfügung gestellt. Sie müssen auch erstellen, oder fertigen Sie den Pfad der Gravatars zu speichern, was in meinem Fall ist im Themenordner im subpath gespeichert “/Bibliothek / 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, true);
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,true);
$avatar_from_gmail = $ obj['Eintrag']["GPhoto $ Thumbnail"]['$ T'];

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

$ch = curl_init($avatar_from_gmail);
curl_setopt( $CH, CURLOPT_NOBODY, true );
curl_setopt( $CH, CURLOPT_RETURNTRANSFER, falsch );
curl_setopt( $CH, CURLOPT_HEADER, falsch );
curl_setopt( $CH, CURLOPT_FOLLOWLOCATION, true );
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, true);
$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, true );
curl_setopt( $CH, CURLOPT_RETURNTRANSFER, falsch );
curl_setopt( $CH, CURLOPT_HEADER, falsch );
curl_setopt( $CH, CURLOPT_FOLLOWLOCATION, true );
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, true);
$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('','',true,$b);
}
}
}

Denken wir etwas verpasst haben? Lassen Sie uns wissen, von unten zu kommentieren. 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