मैं लोगों के लिए दिखाया गया अवतारों अपने ब्लॉग पर टिप्पणी जो लेना पसंद. वर्डप्रेस का समर्थन करता है gravatar सेवा मूल रूप से इतना सक्षम करने के लिए यह बहुत आसान है. हालांकि यह एक लागत के साथ आता है - अन्य डोमेन से बाहरी फ़ाइलों तक पहुँचने नई के रूप में अतिरिक्त लोड समय की बहुत सारी कहते हैं डीएनएस लुकअप, नया एसएसएल कनेक्शन बनाने के लिए, आदि. 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 और गूगल से दूसरे पकड़ लेता है अवतारों जब आह्वान किया, 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 3rd 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, $आकार, $चूक, $alt) { $root_path = get_template_directory_uri() . '/ पुस्तकालय / images / Gravatars /'; $root_path_local = get_template_directory() . '/ पुस्तकालय / images / 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_or_email; $उपयोगकर्ता = get_userdata($आईडी); अगर ( $उपयोगकर्ता ) $ईमेल = $ उपयोगकर्ता->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_or_email->यूज़र आईडी; $उपयोगकर्ता = get_userdata($आईडी); अगर ( $उपयोगकर्ता) $ईमेल = $ उपयोगकर्ता->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 वर्ग ="लोड gravatar अवतार अवतार - '। $ आकार।' तस्वीर" चौड़ाई ="'। $ आकार।'" ऊंचाई ="'। $ आकार।'" src ="' . $gravatar_path . '-hidpi.png" alt ="Gravatar" />'; बाकी $ अवतार = '<img वर्ग ="लोड gravatar अवतार अवतार - '। $ आकार।' तस्वीर" चौड़ाई ="'। $ आकार।'" ऊंचाई ="'। $ आकार।'" src ="' . $gravatar_path . '.png" alt ="Gravatar" ' . $gravatar_path_hidpi . '/>'; वापसी $ अवतार; } add_filter('Get_avatar', 'Bones_gravatar', 10, 5); /***********************\ * gravatar कैश बनाएं * \***********************/ समारोह grab_avatar($comment_id,$टिप्पणी,$= False ताज़ा,$ईमेल = '') { तुम सो जाओ(20); $root_path = get_template_directory_uri() . '/ पुस्तकालय / images / Gravatars /'; $root_path_local = get_template_directory() . '/ पुस्तकालय / images / 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") { $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, असत्य); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL, "hTTPS://picasaweb.google.com/data/entry/api/user/" . $bgauthemail . "?alt = json"); $परिणाम = curl_exec($ch); curl_close($ch); $obj = json_decode($परिणाम,true); $avatar_from_gmail = $ obj['प्रवेश']["Gphoto $ थंबनेल"]['$ टी']; $विस्तार = strrchr($avatar_from_gmail, '।'); $ch = curl_init($avatar_from_gmail); curl_setopt( $ch, CURLOPT_NOBODY, true ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, असत्य ); curl_setopt( $ch, CURLOPT_HEADER, असत्य ); curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); curl_setopt( $ch, CURLOPT_MAXREDIRS, 3 ); curl_exec( $ch ); $हेडर = curl_getinfo( $ch ); curl_close( $ch ); अगर($हेडर['HTTP_CODE'] === 200) { $ch = curl_init($avatar_from_gmail); $fp = fopen($root_path_local . $img_name . '-hidpi' . $विस्तार, 'पश्चिम बंगाल'); curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla / 5.0 (Windows NT 6.1; Win64; x 64) AppleWebKit / 537.36 (KHTML, छिपकली की तरह) क्रोम / 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' . $विस्तार); अगर ( ! 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, true); $small_image->set_quality( 10 ); $small_image->बचाना($root_path_local . $img_name . '.png','छवि / png'); अगर($विस्तार ==".जेपीजी") उतारना($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"; $ch = curl_init($avatar_from_gravatar); curl_setopt( $ch, CURLOPT_NOBODY, true ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, असत्य ); curl_setopt( $ch, CURLOPT_HEADER, असत्य ); curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); curl_setopt( $ch, CURLOPT_MAXREDIRS, 3 ); curl_exec( $ch ); $हेडर = curl_getinfo( $ch ); curl_close( $ch ); अगर($हेडर['HTTP_CODE'] === 200) { $ch = curl_init($avatar_from_gravatar); $fp = fopen($root_path_local . $img_name . '-hidpi.png', 'पश्चिम बंगाल'); curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla / 5.0 (Windows NT 6.1; Win64; x 64) AppleWebKit / 537.36 (KHTML, छिपकली की तरह) क्रोम / 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'); अगर ( ! is_wp_error( $small_image ) ) { $small_image->आकार परिवर्तन(40, 40, true); $small_image->बचाना($root_path_local . $img_name . '.png'); } } } } } ADD_ACTION('Wp_insert_comment', 'Grab_avatar'); /********************************************\ * पृष्ठभूमि में gravatar कैश ताज़ा दैनिक * \********************************************/ ADD_ACTION( 'WP', '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( "DISTINCT का चयन करें(comment_author_email) से " . $wpdb->उपसर्ग . "टिप्पणियाँ" ); प्रत्येक के लिए($$ कुंजी के रूप में comment_author_emails => $वैल) { प्रत्येक के लिए($वैल $ एक के रूप में => $बी) { grab_avatar('','',true,$बी); } } }
“Hi James I realise it has been a long while, but I just checked this on windows 11 (build 23H2)…”