最近往博客添加友链的时候,发现老是有部分博客的logo不能显示出来,作为一个有轻微强迫症的人,这怎么能忍受得了?
  这必须要折腾一波。

代码实现

  现在用的主题是猫猫的Scilper-v2.0.2版本,这个主题里的实现方式为 先获取博客根目录下的/favicon.ico,如果获取失败则显示提前设置好的默认logo。
  修改主题目录下的functions.php文件,代码如下:

/*
 * 友情链接
 */
function get_the_link_items($id = null){
  $default_ico = get_template_directory_uri().'/images/none.png';
  $bookmarks = get_bookmarks('orderby=date&category=' .$id );
  $output = '';
  if ( !empty($bookmarks) ) {
      $output .= '<ul class="link-items fontSmooth">';
      foreach ($bookmarks as $bookmark) {
        $output .=  '<li class="link-item"><a class="link-item-inner effect-apollo" href="' . $bookmark->link_url . '" title="' . $bookmark->link_description . '" target="_blank" >
        <img class="linksimage" src="'. $bookmark->link_url.'/favicon.ico" onerror="javascript:this.src=\'' . $default_ico . '\'" /><span class="sitename">'. $bookmark->link_name .'</span><div class="linkdes">'. ''. $bookmark->link_description .'</div></a></li>';

      }
      $output .= '</ul>';
  }
  return $output;
}

第一种修改方式

  这种修改方式实现方式是,先获取博客根目录下的/favicon.ico,如果获取失败,就会调用BYI_API的api获取logo,这样的方式同样是全自动获取的。
  BYI_API使用方法很简单 https://api.byi.pw/favicon/?url=blog.xgblack.top
  只需要将url后的网址更换就行了,修改主题目录下的functions.php文件,代码如下:

/*
 * 友情链接
 */
function get_the_link_items($id = null){
  $bookmarks = get_bookmarks('orderby=date&category=' .$id );
  $output = '';
  if ( !empty($bookmarks) ) {
      $output .= '<ul class="link-items fontSmooth">';
      foreach ($bookmarks as $bookmark) {
          $output .=  '<li class="link-item"><a class="link-item-inner effect-apollo" href="' . $bookmark->link_url . '" title="' . $bookmark->link_description . '" target="_blank" >
        <img class="linksimage" src="'. $bookmark->link_url.'/favicon.ico" onerror="javascript:this.src=\'https://api.byi.pw/favicon/?url=' .$bookmark->link_url . '\'" /><span class="sitename">'. $bookmark->link_name .'</span><div class="linkdes">'. ''. $bookmark->link_description .'</div></a></li>';
      }
      $output .= '</ul>';
  }
  return $output;
}

第二种修改方式

mark

  第二种方法虽然都是全自动获取,当时还是会有小部分博客可以巧妙地避过这两种自动获取的方式......所以我不得不去改为可以手动获取。
  实现方式很简单,如果后台添加链接的时候有输入图像链接,则调用手动输入的链接,如果没有手动输入,则调用BYI_API。这样的话,即便BYI_API没有获取到logo,我也可以再去手动输入。这样就能保证所有的友链都是有logo的。

  修改主题目录下的functions.php文件,代码如下:

/*
 * 友情链接
 */
function get_the_link_items($id = null){
  $bookmarks = get_bookmarks('orderby=date&category=' .$id );
  $output = '';
  if ( !empty($bookmarks) ) {
      $output .= '<ul class="link-items fontSmooth">';
      foreach ($bookmarks as $bookmark) {
          $output .=  '<li class="link-item"><a class="link-item-inner effect-apollo" href="' . $bookmark->link_url . '" title="' . $bookmark->link_description . '" target="_blank" >
        <img class="linksimage" src="'. $bookmark->link_image.'" onerror="javascript:this.src=\'https://api.byi.pw/favicon/?url=' .$bookmark->link_url . '\'" /><span class="sitename">'. $bookmark->link_name .'</span><div class="linkdes">'. ''. $bookmark->link_description .'</div></a></li>';
      }
      $output .= '</ul>';
  }
  return $output;
}
mark

总结

  现在在用的就是第二种手动+自动的半自动获取方式。除了上边说的还有一个好处就是,友链的logo图片自己可以先下载下来然后放在自己的图床上,也避免了有的logo因为种种原因不能https访问的问题。