解决 WordPress Google Favicon 缓存服务失效的办法

Google Favicon缓存服务失效如何解决

昨天看了下我的友情链接内页,发现 Google 的 Favicons 缓存全部无法获取,简单排查后发现缓存服务全部重定向到了plus.google.com,这是神马域名我相信大家都很清楚了,一直被墙,所以就无法显示了。为了保证我们的 favicon 能够完全显示,这里提供两种解决思路。

1、利用其它第三方 favicon 缓存服务商

getFavicon 的接口比较全,支持 http、https,不过他缓存的 favicon 很少,因为需要网站自己提交上去的才能被缓存。接口文档:http://g.etfv.co/

2、利用网站自身的 favicon

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 都是大小不统一的。