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. Would­n’t it be nice to have gravatars stored loc­ally and served from your own serv­er. 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, o uno precedentemente non disponibile è ora disponibile.

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, "http://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);
}
}
}

Ho trovato questo utile? Per favore fateci sapere facendo cadere un commento qui sotto. Se si desidera iscriversi si prega di utilizzare il link iscriviti sul menu in alto a destra. È inoltre possibile condividere con i tuoi amici usando i link sottostanti sociali. Saluti.

lascia un commento