Tips on caching Gravatar avatar locally and related optimization in WordPress, _PHP tutorial

WBOY
Release: 2016-07-12 09:02:32
Original
713 people have browsed it

Tips for caching the Gravatar avatar locally in WordPress and related optimization techniques.

The purpose of caching the Gravatar global avatar is to speed up the opening of the website, because the official Gravatar website server is abroad , coupled with the great GFW, the domestic opening speed is often very slow. The method comes from willin, but it seems that his website can no longer be opened - -

Cache Gravatar global avatar locally

The caching method is as follows:

1. Create cache directory
Create a folder named avatar in the WordPress root directory and set the permissions of the folder to 0755 (if 0755 does not work, try 0777).

2. Set default avatar
Prepare a default avatar of suitable size (32*32 is enough), name it "default.jpg" and place it in the avatar folder.

3. Add cache code
Copy the following code into your theme’s functions.php file

function my_avatar($avatar) {
$tmp = strpos($avatar, 'http');
$g = substr($avatar, $tmp, strpos($avatar, "'", $tmp) - $tmp);
$tmp = strpos($g, 'avatar/') + 7;
$f = substr($g, $tmp, strpos($g, "?", $tmp) - $tmp);
$w = get_bloginfo('wpurl');
$e = ABSPATH .'avatar/'. $f .'.jpg';
$t = 1209600; //設定14天, 單位:秒
if ( !is_file($e) || (time() - filemtime($e)) > $t ) { //當頭像不存在或文件超過14天才更新
copy(htmlspecialchars_decode($g), $e);
} else $avatar = strtr($avatar, array($g => $w.'/avatar/'.$f.'.jpg'));
if (filesize($e) < 500) copy($w.'/avatar/default.jpg', $e);
return $avatar;
}
add_filter('get_avatar', 'my_avatar');
Copy after login


Determine whether the user has a Gravatar avatar through email
Many times, we also need to know whether the user has set up Gravatar. For example, if the user has not set up a Gravatar avatar, directly display the local default avatar, or remind users who have not set up Gravatar to set up a Gravatar avatar without disturbing those who have already set up an avatar. user. The code shared today can verify whether the user has a Gravatar avatar through the email address:

function validate_gravatar($email) {
 $hash = md5(strtolower(trim($email)));
 $uri = 'http://www.gravatar.com/avatar/' . $hash . '&#63;d=404';
 $headers = @get_headers($uri);
 if (!preg_match("|200|", $headers[0])) {
 $has_valid_avatar = FALSE;
 } else {
 $has_valid_avatar = TRUE;
 }
 return $has_valid_avatar;
}
Copy after login

Gravatar global universal avatar cache optimization

The optimized code can avoid the problem of resource waste and repeated connections caused by the default avatar being repeatedly cached into multiple files when the user does not set a Gravatar avatar. The optimized code is as follows

function my_avatar( $email, $size = '32', $default = '', $alt = '') {
 $f = md5( strtolower( $email ) );
 // 以下代码将头像缓存到wp-content目录下
 $a = get_bloginfo('template_url') . '/avatar/'. $f . $size . '.png';
 $e = get_template_directory() . '/avatar/' . $f . $size . '.png';
 $d = get_template_directory() . '/avatar/' . $f . '-d.png';
 // 如果要将头像缓存到当前主题目录下,请将3-5行代码改成:
 // $a = get_bloginfo('template_url') . '/avatar/'. $f . $size . '.png';
 // $e = get_template_directory() . '/avatar/' . $f . $size . '.png';
 // $d = get_template_directory() . '/avatar/' . $f . '-d.png';

if($default=='')
  $default = get_bloginfo('wpurl').'avatar/default.jpg';
 
 $t = 2592000; // 缓存有效期30天, 这里单位:秒
 if ( !is_file($e) || (time() - filemtime($e)) > $t ) {
  if ( !is_file($d) || (time() - filemtime($d)) > $t ) {
   // 验证是否有头像
   $uri = 'http://www.gravatar.com/avatar/' . $f . '&#63;d=404';
   $headers = @get_headers($uri);
   if (!preg_match("|200|", $headers[0])) {
    // 没有头像,则新建一个空白文件作为标记
    $handle = fopen($d, 'w');
    fclose($handle);
    $a = $default;
   }
   else {
    // 有头像且不存在则更新
    $r = get_option('avatar_rating');
    $g = 'http://www.gravatar.com/avatar/'. $f. '&#63;s='. $size. '&r=' . $r;
    copy($g, $e);
   }
  }
  else {
   $a = $default;
  }
 }
 
 $avatar = "<img alt='{$alt}' src='{$a}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
 return apply_filters('my_avatar', $avatar, $email, $size, $default, $alt);
}

Copy after login

Using this method requires replacing the get_avatar function with my_avatar in all files of the theme.
And if it is

get_avatar( $comment,
Copy after login
If the format is

, it needs to be changed to

my_avatar( $comment->comment_author_email
Copy after login

Because the my_avatar function can only retrieve the user's avatar via email, in the above case, the first parameter needs to be changed to the email address.

Articles you may be interested in:

  • Detailed explanation of the methods of filtering links and filtering SQL statements in WordPress
  • Detailed explanation of the methods of registering menus and calling menus in WordPress
  • Explanation of PHP code examples for updating pseudo-static rules in WordPress
  • Use the Fix Rss Feeds plug-in to fix WordPress feed display errors

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1084596.htmlTechArticleTips for caching the Gravatar avatar locally in WordPress and related optimization techniques. The purpose of caching the Gravatar global avatar is to speed up the website The opening speed is because the server of Gravatar official website is...
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template