昨天看了下我的友情链接内页,发现 Google 的 Favicons 缓存全部无法获取,简单排查后发现缓存服务全部重定向到了plus.google.com,这是神马域名我相信大家都很清楚了,一直被墙,所以就无法显示了。为了保证我们的 favicon 能够完全显示,这里提供两种解决思路。
getFavicon 的接口比较全,支持 http、https,不过他缓存的 favicon 很少,因为需要网站自己提交上去的才能被缓存。接口文档:http://g.etfv.co/
favicon.ico 图标一般都在网站的根目录下,所以我们要做的是遍历每个友情链接地址下面的 /favicon.ico,如果获取不到的我们就用一张默认的 gif 进行显示。
在你的友情链接模版(或者你需要用到这个缓存服务的地方)找到内容输出函数 ,在其下面加入下面的代码,注意看代码注释:
<div class="page-links">
<h3>页内链接</h3>
<ul>
<?php
$default_ico = get_template_directory_uri() . '/images/links_default.gif'; // 默认 ico 图片位置
$bookmarks = get_bookmarks('title_li=&orderby=rand'); // 全部链接随机输出
// 如果你要输出某个链接分类的链接,更改一下 get_bookmarks 参数即可
// 如要输出链接分类ID为5的链接 title_li=&categorize=0&category=5&orderby=rand
if (!empty($bookmarks)) {
foreach ($bookmarks as $bookmark) {
echo '<li><img src="', $bookmark->link_url , '/favicon.ico" onerror="javascript:this.src=\'',
$default_ico , '\'" /><a href="', $bookmark->link_url , '" title="',
$bookmark->link_description , '" target="_blank">', $bookmark->link_name , '</a></li>';
}
}
?>
</ul>
</div>
嗯,搞定了。当然你可以调试一下 CSS,限制 Favicon.ico 图片显示的大小,因为每个网站的默认 Favicon 都是大小不统一的。