Я хотел бы иметь аватары показаны для людей, которые комментируют на моем блоге. WordPress поддерживает Gravatar сервис изначально так позволяет это очень легко. Однако он приходит с ценой - доступ к внешним файлам из другого домена добавляет много дополнительного время загрузки в виде нового DNS поиски, новый SSL соединения, чтобы сделать, так далее. Wouldn’t it be nice to have gravatars stored locally and served from your own server. Ну вот что я делал в течение некоторого времени, если вы хотите знать, как, читай дальше…
In case you’re still wondering just why you’d want to do this, let me offer a few more benefits — images served locally can be compressed before serving them, for example ‑all my images are converted into webp versions, and any browser which supports webp gets the webp version. This is in addition to the reduction from not having to connect to an external server. The local resources can also have a caching header set on them so that browsers will cache them. Gravatar doesn’t provide for a very long cache time.
I have created 3 custom functions, который я просто поместить в functions.php моей темы в. The first is a custom filter for the native wordpress get_avatar(). Вторые грейферы аватар из Gravatar и Google, когда призвал, and the third creates a daily cronjob which refreshes the gravatars — in case they’ve been changed, or a previously unavailable one is now available.
You will need to do a little bit of tinkering to make it compatible with your theme — I use the “bones” framework as you’ll notice in the 3й function I’ve reused some code that it provided. You will also need to create, or customise the path to store the gravatars, which in my case are stored in the theme folder in the subpath “/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('','',правда,$б); } } }
Что вы думаете? Напишите нам комментарий ниже! Если вы хотите подписаться, используйте ссылку подписки в меню в правом верхнем углу.. Вы также можете поделиться этим со своими друзьями, используя приведенные ниже социальные ссылки.. Ура.
оставьте ответ