0WordPress cache di Gravatar locale

Mi piace avere avatar indicati per le persone che commento sul mio blog. WordPress supporta il servizio gravatar nativamente consentendo così questo è molto facile. Tuttavia si tratta di un costo - l'accesso ai file esterni da un altro dominio aggiunge un sacco di tempo di caricamento più in forma di nuova DNS le ricerche, nuovo SSL connessioni per fare, eccetera. Non sarebbe bello avere gravatar archiviati localmente e serviti dal tuo server. Beh questo è quello che ho fatto per qualche tempo, se volete sapere come, continuare a leggere…

Nel caso in cui si sta ancora chiedendo solo perché ci si vuole fare questo, mi permetta di offrire un paio di vantaggi - immagini serviti a livello locale possono essere compressi prima di servirli, for example ‑all my images are con­ver­ted into webp ver­sions, e qualsiasi browser che supporta WebP ottiene la versione WebP. Questo è in aggiunta alla riduzione da non doversi connettere a un server esterno. Le risorse locali possono anche avere un colpo di testa di caching impostato su di loro in modo che i browser li memorizza nella cache. Gravatar does­n’t provide for a very long cache time.

Ho creato 3 funzioni personalizzate, che ho semplicemente posto nella functions.php del mio tema. Il primo è un filtro personalizzato per il get_avatar wordpress nativo(). Il secondo palio avatar da gravatar e Google quando sono chiamati, e il terzo crea un cronjob giornaliero che rinfresca i gravatar - nel caso in cui che sono stati cambiati, or a pre­vi­ously unavail­able one is now available.

Avrete bisogno di fare un po 'di ritocchi per renderlo compatibile con il vostro tema - uso il quadro “ossa”, come si noterà nel 3rd Funzione ho riutilizzato un codice che ha fornito. Sarà inoltre necessario creare, o personalizzare il percorso per memorizzare i gravatar, che nel mio caso sono memorizzati nella cartella del tema nella sottotracciato “/ Library / immagini / gravatar /”

/*********************************************\
* Filtro get_avatar utilizzare solo gli avatar locali *
\*********************************************/
funzione bones_gravatar($Avatar, $id_or_email, $dimensione, $difetto, $alt)
{
$root_path = get_template_directory_uri() . '/ Library / immagini / gravatar /';
$root_path_local = get_template_directory() . '/ Library / immagini / gravatar /';
$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 = '';
se ( is_numeric($id_or_email) )
{
$id = (int) $id_or_email;
$utente = get_userdata($il);
se ( $utente ) $email = $ user->user_email;
}
elseif ( is_object($id_or_email) )
{
// No avatar for pingbacks or trackbacks
$allowed_comment_types = apply_filters( '' get_avatar_comment_types, schiera( 'Commento' ) );
se ( ! vuoto( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (schiera) $allowed_comment_types ) ) return false;
se ( !vuoto($id_or_email->ID utente) )
{
$id = (int) $id_or_email->ID utente;
$utente = get_userdata($il);
se ( $utente) $email = $ user->user_email;
}
elseif ( !vuoto($id_or_email->comment_author_email) )
{
$email = $ id_or_email->comment_author_email;
}
}
altro
{
$email = $ id_or_email;
}

se ( !vuoto($e-mail) )
{
$email_hash = MD5( strtolower( tagliare( $e-mail ) ) );
se(il file esiste($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"';
}
}
se($dimensione >= 47) $avatar = '<img class ="carico-gravatar avatar avatar - '$ dimensioni.' foto" larghezza ="'$ Dimensioni.'" height ="'$ Dimensioni.'" src ="' . $gravatar_path . '-hidpi.png" alt ="gravatar" />';
altro $ avatar = '<img class ="carico-gravatar avatar avatar - '$ dimensioni.' foto" larghezza ="'$ Dimensioni.'" height ="'$ Dimensioni.'" src ="' . $gravatar_path . ' .png" alt ="gravatar" ' . $gravatar_path_hidpi . '/>';

return $ avatar;
}

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






/***********************\
* Crea la cache gravatar *
\***********************/
funzione grab_avatar($COMMENT_ID,$commento,$aggiornare = false,$email = '')
{
dormi(20);
$root_path = get_template_directory_uri() . '/ Library / immagini / gravatar /';
$root_path_local = get_template_directory() . '/ Library / immagini / gravatar /';
se($aggiornare == false) $img_name = MD5( get_comment_author_email($COMMENT_ID) );
altro $ img_name = md5( $e-mail );
se(!il file esiste($root_path_local . $img_name . '.png') || $aggiornare == true)
{
se($aggiornare == false) $bgauthemail = get_comment_author_email();
altro $ bgauthemail = $ e-mail;
//try google first
$domain= explode("@",$bgauthemail);
se($dominio[1]=="gmail.com")
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, falso);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, vero);
curl_setopt($ch, CURLOPT_URL, "https://picasaweb.google.com/data/entry/api/user/" . $bgauthemail . "?alt = json");
$risultato = curl_exec($ch);
curl_close($ch);

$obj = json_decode($risultato,vero);
$avatar_from_gmail = $ obj['iscrizione']["GPhoto $ miniature"]['$ T'];

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

$ch = curl_init($avatar_from_gmail);
curl_setopt( $ch, CURLOPT_NOBODY, vero );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, falso );
curl_setopt( $ch, CURLOPT_HEADER, falso );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, vero );
curl_setopt( $ch, CURLOPT_MAXREDIRS, 3 );
curl_exec( $ch );
$headers = curl_getinfo( $ch );
curl_close( $ch );
se($intestazioni['HTTP_CODE'] === 200)
{
$ch = curl_init($avatar_from_gmail);
$fp = fopen($root_path_local . $img_name . '-hidpi' . $estensione, 'Wb');
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla / 5.0 (di Windows NT 6.1; Win64; x64) AppleWebKit / 537,36 (KHTML, come Gecko) Chrome / Safari 39.0.2171.62 / 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' . $estensione);
se ( ! is_wp_error( $small_image ) )
{
//controllare che non è un'immagine vuoto uomo, se è così, 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;
}
altro
{
//always convert to png because some plugins expect all gravatars to be pngs
$small_image->salvare($root_path_local . $img_name . '-hidpi.png','Image / png');
$small_image->ridimensionare(40, 40, vero);
$small_image->set_quality( 10 );
$small_image->salvare($root_path_local . $img_name . '.png','Image / png');
se($estensione ==".jpg") scollegare($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, vero );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, falso );
curl_setopt( $ch, CURLOPT_HEADER, falso );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, vero );
curl_setopt( $ch, CURLOPT_MAXREDIRS, 3 );
curl_exec( $ch );
$headers = curl_getinfo( $ch );
curl_close( $ch );
se($intestazioni['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 (di Windows NT 6.1; Win64; x64) AppleWebKit / 537,36 (KHTML, come Gecko) Chrome / Safari 39.0.2171.62 / 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');
se ( ! is_wp_error( $small_image ) )
{
$small_image->ridimensionare(40, 40, vero);
$small_image->salvare($root_path_local . $img_name . '.png');
}
}
}
}
}
add_action('Wp_insert_comment', 'Grab_avatar');






/********************************************\
* Aggiornamento della cache gravatar in background tutti i giorni *
\********************************************/
add_action( 'Wp', 'Bones_setup_schedule' );
funzione bones_setup_schedule() {
se ( ! wp_next_scheduled( 'Bones_daily_event' ) ) {
wp_schedule_event( tempo(), 'quotidiano', 'Bones_daily_event');
}
}

add_action( 'Bones_daily_event', '' bones_refresh_gravatars );
bones_refresh_gravatars funzione()
{
//get list of gravatars somehow
global $wpdb;
$comment_author_emails = $ wpdb->get_results( "SELECT DISTINCT(comment_author_email) A PARTIRE DAL " . $wpdb->prefisso . "Commenti" );
per ciascuno($comment_author_emails come $ key => $val)
{
per ciascuno($val da $ a => $b)
{
grab_avatar('','',vero,$b);
}
}
}

lascia un commento