采用多种方法解决因为Gravatar被墙而导致的头像文件无法显示的问题,希望对您有用
前言
最近在某个群里看到好多问Gravatar被墙的事,因为WordPress使用了Gravatar的头像,可能会导致网页加载失败,最后还会留下裂图,很是影响用户体验,所以解决头像加载失败的方法刻不容缓。云落从网上收集了一些方法,给大家做个推荐,自己适合那种方法,自己看的办吧。
一、使用https加载
因为发现Gravatar还没死绝,https的还可以访问,所以使用https访问的也算是一种方案。在functions.php
文件内添加以下代码
<span class="kwd"><span class="kwd">function</span></span><span class="pln"><span class="pln"> get_ssl_avatar</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">$avatar</span></span><span class="pun"><span class="pun">)</span></span> <span class="pun"><span class="pun">{</span></span><span class="pln"><span class="pln"> $avatar </span></span><span class="pun"><span class="pun">=</span></span><span class="pln"><span class="pln"> preg_replace</span></span><span class="pun"><span class="pun">(</span></span><span class="str"><span class="str">'/.*\/avatar\/(.*)\?s=([\d]+)&.*/'</span></span><span class="pun"><span class="pun">,</span></span><span class="str"><span class="str">'<img src="https://secure.gravatar.com/avatar/$1?s=$2" class="avatar avatar-$2" height="$2" width="$2">'</span></span><span class="pun"><span class="pun">,</span></span><span class="pln"><span class="pln">$avatar</span></span><span class="pun"><span class="pun">);</span></span> <span class="kwd"><span class="kwd">return</span></span><span class="pln"><span class="pln"> $avatar</span></span><span class="pun"><span class="pun">;</span></span> <span class="pun"><span class="pun">}</span></span><span class="pln"><span class="pln"> add_filter</span></span><span class="pun"><span class="pun">(</span></span><span class="str"><span class="str">'get_avatar'</span></span><span class="pun"><span class="pun">,</span></span> <span class="str"><span class="str">'get_ssl_avatar'</span></span><span class="pun"><span class="pun">);</span></span>
注意:使用这个方法的前提条件是https能够访问
优点:简单稳定
缺点: 当头像特别大时速度可能略慢
缺点: 当头像特别大时速度可能略慢
二、WordPress本地缓存
在functions.php
文件插入以下代码
<span class="kwd"><span class="kwd">function</span></span><span class="pln"><span class="pln"> my_avatar</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">$avatar</span></span><span class="pun"><span class="pun">)</span></span> <span class="pun"><span class="pun">{</span></span><span class="pln"><span class="pln"> $tmp </span></span><span class="pun"><span class="pun">=</span></span><span class="pln"><span class="pln"> strpos</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">$avatar</span></span><span class="pun"><span class="pun">,</span></span> <span class="str"><span class="str">'http'</span></span><span class="pun"><span class="pun">);</span></span><span class="pln"><span class="pln"> $g </span></span><span class="pun"><span class="pun">=</span></span><span class="pln"><span class="pln"> substr</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">$avatar</span></span><span class="pun"><span class="pun">,</span></span><span class="pln"><span class="pln"> $tmp</span></span><span class="pun"><span class="pun">,</span></span><span class="pln"><span class="pln"> strpos</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">$avatar</span></span><span class="pun"><span class="pun">,</span></span> <span class="str"><span class="str">"'"</span></span><span class="pun"><span class="pun">,</span></span><span class="pln"><span class="pln"> $tmp</span></span><span class="pun"><span class="pun">)</span></span> <span class="pun"><span class="pun">-</span></span><span class="pln"><span class="pln"> $tmp</span></span><span class="pun"><span class="pun">);</span></span><span class="pln"><span class="pln"> $tmp </span></span><span class="pun"><span class="pun">=</span></span><span class="pln"><span class="pln"> strpos</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">$g</span></span><span class="pun"><span class="pun">,</span></span> <span class="str"><span class="str">'avatar/'</span></span><span class="pun"><span class="pun">)</span></span> <span class="pun"><span class="pun">+</span></span> <span class="lit"><span class="lit">7</span></span><span class="pun"><span class="pun">;</span></span><span class="pln"><span class="pln"> $f </span></span><span class="pun"><span class="pun">=</span></span><span class="pln"><span class="pln"> substr</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">$g</span></span><span class="pun"><span class="pun">,</span></span><span class="pln"><span class="pln"> $tmp</span></span><span class="pun"><span class="pun">,</span></span><span class="pln"><span class="pln"> strpos</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">$g</span></span><span class="pun"><span class="pun">,</span></span> <span class="str"><span class="str">"?"</span></span><span class="pun"><span class="pun">,</span></span><span class="pln"><span class="pln"> $tmp</span></span><span class="pun"><span class="pun">)</span></span> <span class="pun"><span class="pun">-</span></span><span class="pln"><span class="pln"> $tmp</span></span><span class="pun"><span class="pun">);</span></span><span class="pln"><span class="pln"> $w </span></span><span class="pun"><span class="pun">=</span></span><span class="pln"><span class="pln"> get_bloginfo</span></span><span class="pun"><span class="pun">(</span></span><span class="str"><span class="str">'wpurl'</span></span><span class="pun"><span class="pun">);</span></span><span class="pln"><span class="pln"> $e </span></span><span class="pun"><span class="pun">=</span></span><span class="pln"><span class="pln"> ABSPATH </span></span><span class="pun"><span class="pun">.</span></span><span class="str"><span class="str">'avatar/'</span></span><span class="pun"><span class="pun">.</span></span><span class="pln"><span class="pln"> $f </span></span><span class="pun"><span class="pun">.</span></span><span class="str"><span class="str">'.jpg'</span></span><span class="pun"><span class="pun">;</span></span><span class="pln"><span class="pln"> $t </span></span><span class="pun"><span class="pun">=</span></span> <span class="lit"><span class="lit">1209600</span></span><span class="pun"><span class="pun">;</span></span> <span class="com"><span class="com">//設定14天, 單位:秒</span></span> <span class="kwd"><span class="kwd">if</span></span> <span class="pun"><span class="pun">(</span></span> <span class="pun"><span class="pun">!</span></span><span class="pln"><span class="pln">is_file</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">$e</span></span><span class="pun"><span class="pun">)</span></span> <span class="pun"><span class="pun">||</span></span> <span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">time</span></span><span class="pun"><span class="pun">()</span></span> <span class="pun"><span class="pun">-</span></span><span class="pln"><span class="pln"> filemtime</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">$e</span></span><span class="pun"><span class="pun">))</span></span> <span class="pun"><span class="pun">></span></span><span class="pln"><span class="pln"> $t </span></span><span class="pun"><span class="pun">)</span></span> <span class="pun"><span class="pun">{</span></span> <span class="com"><span class="com">//當頭像不存在或文件超過14天才更新</span></span><span class="pln"><span class="pln"> copy</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">htmlspecialchars_decode</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">$g</span></span><span class="pun"><span class="pun">),</span></span><span class="pln"><span class="pln"> $e</span></span><span class="pun"><span class="pun">);</span></span> <span class="pun"><span class="pun">}</span></span> <span class="kwd"><span class="kwd">else</span></span><span class="pln"><span class="pln"> $avatar </span></span><span class="pun"><span class="pun">=</span></span><span class="pln"><span class="pln"> strtr</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">$avatar</span></span><span class="pun"><span class="pun">,</span></span><span class="pln"><span class="pln"> array</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">$g </span></span><span class="pun"><span class="pun">=></span></span><span class="pln"><span class="pln"> $w</span></span><span class="pun"><span class="pun">.</span></span><span class="str"><span class="str">'/avatar/'</span></span><span class="pun"><span class="pun">.</span></span><span class="pln"><span class="pln">$f</span></span><span class="pun"><span class="pun">.</span></span><span class="str"><span class="str">'.jpg'</span></span><span class="pun"><span class="pun">));</span></span> <span class="kwd"><span class="kwd">if</span></span> <span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">filesize</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">$e</span></span><span class="pun"><span class="pun">)</span></span> <span class="pun"><span class="pun"><</span></span> <span class="lit"><span class="lit">500</span></span><span class="pun"><span class="pun">)</span></span><span class="pln"><span class="pln"> copy</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">$w</span></span><span class="pun"><span class="pun">.</span></span><span class="str"><span class="str">'/avatar/default.jpg'</span></span><span class="pun"><span class="pun">,</span></span><span class="pln"><span class="pln"> $e</span></span><span class="pun"><span class="pun">);</span></span> <span class="kwd"><span class="kwd">return</span></span><span class="pln"><span class="pln"> $avatar</span></span><span class="pun"><span class="pun">;</span></span> <span class="pun"><span class="pun">}</span></span><span class="pln"><span class="pln"> add_filter</span></span><span class="pun"><span class="pun">(</span></span><span class="str"><span class="str">'get_avatar'</span></span><span class="pun"><span class="pun">,</span></span> <span class="str"><span class="str">'my_avatar'</span></span><span class="pun"><span class="pun">);</span></span>
在WordPress安装根目(即跟wp-content等文件夹同一目录下)下新建一个名为 avatar 的文件夹 ,并给予写权限。放入一张同尺寸的头像图片命名为default.jpg。
优点:和主机速度挂钩,如果你的服务器特别快则头像加载也特别快
缺点:只能缓存一个尺寸的头像,国内主机无法使用
缺点:只能缓存一个尺寸的头像,国内主机无法使用
三、第三方缓存
这里说的第三方主要指的是多说,在functions.php
文件插入以下代码
<span class="kwd"><span class="kwd">function</span></span><span class="pln"><span class="pln"> duoshuo_avatar</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">$avatar</span></span><span class="pun"><span class="pun">)</span></span> <span class="pun"><span class="pun">{</span></span><span class="pln"><span class="pln"> $avatar </span></span><span class="pun"><span class="pun">=</span></span><span class="pln"><span class="pln"> str_replace</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">array</span></span><span class="pun"><span class="pun">(</span></span><span class="str"><span class="str">"www.gravatar.com"</span></span><span class="pun"><span class="pun">,</span></span><span class="str"><span class="str">"0.gravatar.com"</span></span><span class="pun"><span class="pun">,</span></span><span class="str"><span class="str">"1.gravatar.com"</span></span><span class="pun"><span class="pun">,</span></span><span class="str"><span class="str">"2.gravatar.com"</span></span><span class="pun"><span class="pun">),</span></span><span class="str"><span class="str">"gravatar.duoshuo.com"</span></span><span class="pun"><span class="pun">,</span></span><span class="pln"><span class="pln">$avatar</span></span><span class="pun"><span class="pun">);</span></span> <span class="kwd"><span class="kwd">return</span></span><span class="pln"><span class="pln"> $avatar</span></span><span class="pun"><span class="pun">;</span></span> <span class="pun"><span class="pun">}</span></span><span class="pln"><span class="pln"> add_filter</span></span><span class="pun"><span class="pun">(</span></span> <span class="str"><span class="str">'get_avatar'</span></span><span class="pun"><span class="pun">,</span></span> <span class="str"><span class="str">'duoshuo_avatar'</span></span><span class="pun"><span class="pun">,</span></span> <span class="lit"><span class="lit">10</span></span><span class="pun"><span class="pun">,</span></span> <span class="lit"><span class="lit">3</span></span> <span class="pun"><span class="pun">);</span></span>