0WordPress caché local Gravatar

Me gustaría tener avatares mostrados para las personas que comentan en mi blog. WordPress es compatible con el servicio de forma nativa gravatar permitiendo así que esto es muy fácil. Sin embargo, viene con un costo - acceso a archivos externos de otro dominio añade un montón de tiempo de carga adicional en forma de nuevo DNS búsquedas, nuevo SSL conexiones para hacer, etc. ¿No sería bueno tener Gravatars almacenan localmente y se sirve de su propio servidor. Pues eso es lo que he estado haciendo desde hace algún tiempo, Si desea saber cómo, sigue leyendo ...

En caso de que todavía se está preguntando por qué te gustaría hacer esto, permítanme ofrecer algunas más beneficios - imágenes servidos a nivel local puede ser comprimido antes de servir, por ejemplo -all mis imágenes se convierten en versiones WebP, y cualquier navegador que soporte webp obtiene la versión webp. Esto es en adición a la reducción de no tener que conectarse a un servidor externo. Los recursos locales también pueden tener un conjunto de cabecera de almacenamiento en caché en ellos para que los navegadores caché de ellas. Gravatar no prevé un tiempo de caché muy largo.

He creado 3 funciones personalizadas, la que sólo tienen que colocar en functions.php de mi tema. El primero es un filtro personalizado para el get_avatar wordpress nativa(). El segundo agarra avatares de gravatar y Google cuando se le solicite, y el tercero crea una tarea programada diaria que refresca los Gravatars - en caso de que hayan sido cambiados, o uno que antes no estaba disponible ahora está disponible.

Usted tendrá que hacer un poco de retoques para que sea compatible con su tema - utilizo el marco de “huesos”, como se dará cuenta en el 3rd función que ha reutilizado un código que proporcionó. También tendrá que crear, o personalizar la ruta para almacenar los Gravatars, que en mi caso se almacenan en la carpeta del tema en el subtrazado “/ Library / images / Gravatars /”

/*********************************************\
* Filtro get_avatar utilizar sólo los avatares locales *
\*********************************************/
bones_gravatar función($avatar, $id_or_email, $tamaño, $defecto, $alt)
{
$root_path = get_template_directory_uri() . '/ Biblioteca / images / Gravatars /';
$root_path_local = get_template_directory() . '/ Biblioteca / 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 = '';
si ( is_numeric($id_or_email) )
{
$id = (int) $id_or_email;
$user = get_userdata($la);
si ( $usuario ) $email = $ usuario->user_email;
}
elseif ( is_object($id_or_email) )
{
// No avatar for pingbacks or trackbacks
$allowed_comment_types = apply_filters( '' get_avatar_comment_types, colección( 'Comment' ) );
si ( ! vacío( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (colección) $allowed_comment_types ) ) falso retorno;
si ( !vacío($id_or_email->identidad de usuario) )
{
$id = (int) $id_or_email->identidad de usuario;
$user = get_userdata($la);
si ( $usuario) $email = $ usuario->user_email;
}
elseif ( !vacío($id_or_email->comment_author_email) )
{
$email = $ id_or_email->comment_author_email;
}
}
más
{
$email = $ id_or_email;
}

si ( !vacío($correo electrónico) )
{
$email_hash = md5( strtolower( recortar( $correo electrónico ) ) );
si(El archivo existe($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"';
}
}
si($tamaño >= 47) $avatar = '<img class ="carga gravatar avatar avatar - '. $ tamaño. foto" width ="'. $ Tamaño." height ="'. $ Tamaño." src ="' . $gravatar_path . '-hidpi.png" alt ="gravatar" />';
$ demás avatar = '<img class ="carga gravatar avatar avatar - '. $ tamaño. foto" width ="'. $ Tamaño." height ="'. $ Tamaño." src ="' . $gravatar_path . ' .png" alt ="gravatar" ' . $gravatar_path_hidpi . '/>';

return $ avatar;
}

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






/***********************\
* Crear caché gravatar *
\***********************/
grab_avatar función($comment_id,$comentario,$refrescar = false,$email = '')
{
tu duerme(20);
$root_path = get_template_directory_uri() . '/ Biblioteca / images / Gravatars /';
$root_path_local = get_template_directory() . '/ Biblioteca / images / Gravatars /';
si($refrescar == false) $img_name = md5( get_comment_author_email($comment_id) );
$ demás img_name = MD5( $correo electrónico );
si(!El archivo existe($root_path_local . $img_name . 'Png') || $refrescar == true)
{
si($refrescar == false) $bgauthemail = get_comment_author_email();
otra cosa $ = $ bgauthemail correo electrónico;
//try google first
$domain= explode("@",$bgauthemail);
si($dominio[1]=="gmail.com")
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, falso);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, "https://picasaweb.google.com/data/entry/api/user/" . $bgauthemail . "?alt = json");
$resultado = curl_exec($ch);
curl_close($ch);

$obj = json_decode($resultado,true);
$avatar_from_gmail = $ obj['entrada']["GPhoto $ miniatura"]['$ T'];

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

$ch = curl_init($avatar_from_gmail);
curl_setopt( $ch, CURLOPT_NOBODY, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, falso );
curl_setopt( $ch, CURLOPT_HEADER, falso );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, la opción CURLOPT_MAXREDIRS, 3 );
curl_exec( $ch );
$cabeceras = curl_getinfo( $ch );
curl_close( $ch );
si($encabezados['HTTP_CODE'] === 200)
{
$ch = curl_init($avatar_from_gmail);
$fp = fopen($root_path_local . $img_name . '-hidpi' . $extensión, 'Wb');
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla / 5.0 (windows NT 6.1; Win64; x64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 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' . $extensión);
si ( ! is_wp_error( $small_image ) )
{
//comprobar que la imagen de un hombre blanco no es, si es así, 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;
}
más
{
//always convert to png because some plugins expect all gravatars to be pngs
$small_image->salvar($root_path_local . $img_name . '-hidpi.png','Image / png');
$small_image->cambiar el tamaño(40, 40, true);
$small_image->set_quality( 10 );
$small_image->salvar($root_path_local . $img_name . 'Png','Image / png');
si($extensión ==".jpg") desconectar($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, falso );
curl_setopt( $ch, CURLOPT_HEADER, falso );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, la opción CURLOPT_MAXREDIRS, 3 );
curl_exec( $ch );
$cabeceras = curl_getinfo( $ch );
curl_close( $ch );
si($encabezados['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, like Gecko) Chrome / 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');
si ( ! is_wp_error( $small_image ) )
{
$small_image->cambiar el tamaño(40, 40, true);
$small_image->salvar($root_path_local . $img_name . 'Png');
}
}
}
}
}
add_action('Wp_insert_comment', 'Grab_avatar');






/********************************************\
* Refrescar la memoria caché en segundo plano gravatar diaria *
\********************************************/
add_action( 'Wp', 'Bones_setup_schedule' );
bones_setup_schedule función() {
si ( ! wp_next_scheduled( 'Bones_daily_event' ) ) {
wp_schedule_event( hora(), 'diariamente', 'Bones_daily_event');
}
}

add_action( 'Bones_daily_event', '' bones_refresh_gravatars );
bones_refresh_gravatars de función()
{
//get list of gravatars somehow
global $wpdb;
$comment_author_emails = $ wpdb->tener resultados( "SELECT DISTINCT(comment_author_email) DE " . $wpdb->prefijo . "comentarios" );
para cada($comment_author_emails como $ clave => $val)
{
para cada($val como $ a => $b)
{
grab_avatar('','',true,$b);
}
}
}

Deja una respuesta