DIY Главная Медиа Logo

Конечная сайт для проектирования и создания вашей установке домашнего кинотеатра и Привет-Fi.

0WordPress Local Gravatar кэш

Я хотел бы иметь аватары показаны для людей, которые комментируют на моем блоге. WordPress поддерживает Gravatar сервис изначально так позволяет это очень легко. Однако он приходит с ценой - доступ к внешним файлам из другого домена добавляет много дополнительного время загрузки в виде нового DNS поиски, новый SSL соединения, чтобы сделать, так далее. Would­n’t it be nice to have gravatars stored loc­ally and served from your own serv­er. Ну вот что я делал в течение некоторого времени, если вы хотите знать, как, читай дальше…

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, который я просто поместить в functions.php моей темы в. The first is a cus­tom fil­ter for the nat­ive word­press get_avatar(). Вторые грейферы аватар из Gravatar и Google, когда призвал, 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 3й 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/”

/*********************************************\
* Фильтр get_avatar использовать только локальные аватары *
\*********************************************/
функция bones_gravatar($аватар, $id_or_email, $размер, $дефолт, $альт)
{
$root_path = get_template_directory_uri() . '/ Библиотека / изображения / Gravatars /';
$root_path_local = get_template_directory() . '/ Библиотека / изображения / Gravatars /';
$gravatar_path = $ root_path . 'Default_avatar';
$gravatar_path_hidpi = «данных Gravatar-HiDPI ="». $ Root_path . «Default_avatar-hidpi.png"';

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

$email = '';
если ( is_numeric($id_or_email) )
{
$ID = (ИНТ) $id_or_email;
$Пользователь = get_userdata($id);
если ( $пользователь ) $электронная почта = $ user->user_email;
}
ElseIf ( is_object($id_or_email) )
{
// No avatar for pingbacks or trackbacks
$allowed_comment_types = apply_filters( 'get_avatar_comment_types', массив( 'Комментарий' ) );
если ( ! пустой( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (массив) $allowed_comment_types ) ) вернуться ложным;
если ( !пустой($id_or_email->Идентификатор пользователя) )
{
$ID = (ИНТ) $id_or_email->Идентификатор пользователя;
$Пользователь = get_userdata($id);
если ( $пользователь) $электронная почта = $ user->user_email;
}
ElseIf ( !пустой($id_or_email->comment_author_email) )
{
$электронная почта = $ id_or_email->comment_author_email;
}
}
еще
{
$электронная почта = $ id_or_email;
}

если ( !пустой($Эл. адрес) )
{
$email_hash = md5( strtolower( отделка( $Эл. адрес ) ) );
если(Файл существует($root_path_local . $email_hash . '.png'))
{
//if we have a local cache then use it
$gravatar_path= $root_path . $email_hash ;
$gravatar_path_hidpi = «данных Gravatar-HiDPI ="». $ Root_path . $email_hash . «-hidpi.png"';
}
}
если($размер >= 47) $аватар = '<IMG класс ="нагрузки граватаров Аватар - '. $ размера. Фото" ширина ="'. $ Размер." высота ="'. $ Размер." SRC ="' . $gravatar_path . «-hidpi.png" альт ="Gravatar" />';
еще $ аватар = '<IMG класс ="нагрузки граватаров Аватар - '. $ размера. Фото" ширина ="'. $ Размер." высота ="'. $ Размер." SRC ="' . $gravatar_path . ».png" альт ="Gravatar" ' . $gravatar_path_hidpi . '/>';

возвращение $ аватар;
}

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






/***********************\
* Создание Gravatar кэш *
\***********************/
функция grab_avatar($comment_id,$комментарий,$обновить = ложь,$электронная почта = «»)
{
ты спишь(20);
$root_path = get_template_directory_uri() . '/ Библиотека / изображения / Gravatars /';
$root_path_local = get_template_directory() . '/ Библиотека / изображения / Gravatars /';
если($обновить == ложь) $img_name = md5( get_comment_author_email($comment_id) );
еще $ img_name = md5( $Эл. адрес );
если(!Файл существует($root_path_local . $img_name . '.png') || $обновить == правда)
{
если($обновить == ложь) $bgauthemail = get_comment_author_email();
еще $ bgauthemail = $ электронная почта;
//try google first
$domain= explode("@",$bgauthemail);
если($домен[1]=="gmail.com")
{
$ч = curl_init();
curl_setopt($ч, CURLOPT_SSL_VERIFYPEER, ложный);
curl_setopt($ч, CURLOPT_RETURNTRANSFER, правда);
curl_setopt($ч, CURLOPT_URL, "HTTP://picasaweb.google.com/data/entry/api/user/" . $bgauthemail . "?Alt = JSON");
$Результат = curl_exec($ч);
curl_close($ч);

$OBJ = json_decode($результат,правда);
$avatar_from_gmail = $ OBJ[«Запись»]["GPhoto $ Ленфильм"][«$ Т»];

$расширение = strrchr($avatar_from_gmail, '');

$ч = curl_init($avatar_from_gmail);
curl_setopt( $ч, CURLOPT_NOBODY, правда );
curl_setopt( $ч, CURLOPT_RETURNTRANSFER, ложный );
curl_setopt( $ч, CURLOPT_HEADER, ложный );
curl_setopt( $ч, CURLOPT_FOLLOWLOCATION, правда );
curl_setopt( $ч, CURLOPT_MAXREDIRS, 3 );
curl_exec( $ч );
$Заголовки = curl_getinfo( $ч );
curl_close( $ч );
если($заголовки['HTTP_CODE'] === 200)
{
$ч = curl_init($avatar_from_gmail);
$Fp = Еореп($root_path_local . $img_name . '-hidpi' . $расширение, «Термометр»);
curl_setopt($ч,CURLOPT_USERAGENT,«Mozilla / 5.0 (Windows NT 6.1; Win64; x64) AppleWebKit / 537,36 (KHTML, как Gecko) Chrome / 39.0.2171.62 Safari / 537,36');
curl_setopt($ч, CURLOPT_FILE, $Ф.П.);
curl_setopt($ч, CURLOPT_HEADER, 0);

curl_exec($ч);
curl_close($ч);

fclose($Ф.П.);

$usegravatar = ложь;

$small_image = wp_get_image_editor($root_path_local . $img_name . '-hidpi' . $расширение);
если ( ! is_wp_error( $small_image ) )
{
//проверить это не пустой человек изображение, если так, 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;
}
иначе если (md5_file($root_path_local . $img_name . '-hidpi.jpg') == strtolower("6D4083BE95FB32358A5110F5A83B9979"))
{
//delete
unlink($root_path_local . $img_name . '-hidpi.jpg');
//try gravatar
$usegravatar=true;
}
еще
{
//always convert to png because some plugins expect all gravatars to be pngs
$small_image->спасти($root_path_local . $img_name . '-hidpi.png','Изображение / PNG');
$small_image->изменить размер(40, 40, правда);
$small_image->set_quality( 10 );
$small_image->спасти($root_path_local . $img_name . '.png','Изображение / PNG');
если($расширение ==".jpg") разъединить($root_path_local . $img_name . '-hidpi.jpg');
}
}
}

}
//check e-mail isnt a blank generic one
else if($bgauthemail!=="noemail@intensedebate.com" || $usegravatar == верно)
{
$avatar_from_gravatar = "HTTPS://www.gravatar.com/avatar/" . $img_name . "?с = 80&d = 404";
$ч = curl_init($avatar_from_gravatar);
curl_setopt( $ч, CURLOPT_NOBODY, правда );
curl_setopt( $ч, CURLOPT_RETURNTRANSFER, ложный );
curl_setopt( $ч, CURLOPT_HEADER, ложный );
curl_setopt( $ч, CURLOPT_FOLLOWLOCATION, правда );
curl_setopt( $ч, CURLOPT_MAXREDIRS, 3 );
curl_exec( $ч );
$Заголовки = curl_getinfo( $ч );
curl_close( $ч );
если($заголовки['HTTP_CODE'] === 200)
{
$ч = curl_init($avatar_from_gravatar);
$Fp = Еореп($root_path_local . $img_name . '-hidpi.png', «Термометр»);
curl_setopt($ч,CURLOPT_USERAGENT,«Mozilla / 5.0 (Windows NT 6.1; Win64; x64) AppleWebKit / 537,36 (KHTML, как Gecko) Chrome / 39.0.2171.62 Safari / 537,36');
curl_setopt($ч, CURLOPT_FILE, $Ф.П.);
curl_setopt($ч, CURLOPT_HEADER, 0);

curl_exec($ч);
curl_close($ч);

fclose($Ф.П.);

$small_image = wp_get_image_editor($root_path_local . $img_name . '-hidpi.png');
если ( ! is_wp_error( $small_image ) )
{
$small_image->изменить размер(40, 40, правда);
$small_image->спасти($root_path_local . $img_name . '.png');
}
}
}
}
}
add_action('Wp_insert_comment', 'Grab_avatar');






/********************************************\
* Обновить Gravatar кэш в фоновом режиме ежедневно *
\********************************************/
add_action( «Сор», 'Bones_setup_schedule' );
функция bones_setup_schedule() {
если ( ! wp_next_scheduled( 'Bones_daily_event' ) ) {
wp_schedule_event( время(), 'ежедневно', 'Bones_daily_event');
}
}

add_action( 'Bones_daily_event', 'bones_refresh_gravatars' );
функция bones_refresh_gravatars()
{
//get list of gravatars somehow
global $wpdb;
$comment_author_emails = $ wpdb->get_results( "SELECT DISTINCT(comment_author_email) ИЗ " . $wpdb->префикс . "Комментарии" );
для каждого($comment_author_emails как $ ключ => $вал)
{
для каждого($вал в $ а => $б)
{
grab_avatar('','',правда,$б);
}
}
}

Пожалуйста, отправьте нам свои мысли, комментируя ниже! Если вы хотите подписаться, пожалуйста, используйте ссылку подписки в меню в правом верхнем углу. Вы также можете поделиться этим с друзьями, используя ссылки ниже. ура.

оставьте ответ