php正则替换图片src解决wordpress头像加载不了问题

用wordpress的朋友都遇到过很多主题的用户头像没办法加载的情况。主要原因是wordpress的 Gravatar 头像服务器被大陆屏蔽了。网上也有解决方案,就是把 Gravatar 头像替换成多说的,即在 functions文件中添加如下代码:

function duoshuo_avatar($avatar) {
$avatar = str_replace(array(“www.gravatar.com”,”0.gravatar.com”,”1.gravatar.com”,”2.gravatar.com”),”gravatar.duoshuo.com”,$avatar);
return $avatar;
}
add_filter( ‘get_avatar’, ‘duoshuo_avatar’, 10, 3 );

虽然头像可以加载,但是太丑也不能自定义啊。。。

我们可以在以上代码基础上用正则表达式来将头像链接替换成我们定义好的图片,代码如下:

function duoshuo_avatar($avatar) {
$avatar = ereg_replace(“src='(.*)s(.*)’ srcset”,”src=’/wp-content/themes/jiongtubaishi/img/userheader.png?s\\2′ srcset”, $avatar) ;
$avatar = ereg_replace(“srcset='(.*)s(.*)’ class”,”srcset=’/wp-content/themes/jiongtubaishi/img/userheader.png?s\\2′ class”, $avatar) ;
return $avatar;
}
add_filter( ‘get_avatar’, ‘duoshuo_avatar’, 10, 3 );

代码解读:

我用的主题返回的 $avatar是 <img alt=” src=’http://0.gravatar.com/avatar/c1fb4011ce39e0a5e5379b4c72c6551a?s=48&amp;d=mm&amp;r=g’ srcset=’http://0.gravatar.com/avatar/c1fb4011ce39e0a5e5379b4c72c6551a?s=96&amp;d=mm&amp;r=g 2x’  class=’avatar avatar-48 photo’ height=’48’ width=’48’>

即 $avatar=  “<img alt=” src=’http://0.gravatar.com/avatar/c1fb4011ce39e0a5e5379b4c72c6551a?s=48&amp;d=mm&amp;r=g’ srcset=’http://0.gravatar.com/avatar/c1fb4011ce39e0a5e5379b4c72c6551a?s=96&amp;d=mm&amp;r=g 2x’  class=’avatar avatar-48 photo’ height=’48’ width=’48’>”;

然后在以上代码基础上进行正则匹配:

$avatar = ereg_replace(“src='(.*)s(.*)’ srcset”,”src=’/wp-content/themes/jiongtubaishi/img/userheader.png?s\\2′ srcset”, $avatar) ;

首先正则匹配出src: src='(.*)s(.*)’ srcset

当然正则我们可以直接这么写:

$avatar = ereg_replace(“src='(.*)’ srcset”,”src=’/wp-content/themes/jiongtubaishi/img/userheader.png’ srcset”, $avatar) ;

也能达到效果,只是最终的src缺少 ?s=48&amp;d=mm&amp;r=g 这些部分。缺少这些部分在显示上影响不大,但是加上的目的就是为了达到响应式图片效果。感兴趣的同学可以搜一下 srcset。

所以,为了达到响应式图片效果,后面的 srcset也要进行相应的正则匹配:

$avatar = ereg_replace(“srcset='(.*)s(.*)’ class”,”srcset=’/wp-content/themes/jiongtubaishi/img/userheader.png?s\\2′ class”,  $avatar)  ;

正则中的\\2 就是匹配对应的正则字符串,具体用法可以搜一下 ereg_replace。简单的贴下代码吧:

$string = “This is a test”;
echo str_replace(” is”, ” was”, $string);
echo ereg_replace(“( )is”, “\\1was”, $string);
echo ereg_replace(“(( )is)”, “\\2was”, $string);

大家可以运行试试。

未经允许不得转载:前端撸码笔记 » php正则替换图片src解决wordpress头像加载不了问题

上一篇:

下一篇: