定制版wordpress友情链接

作者:忘 想,发表于2014年12月20日,分类:

贡献啦,忘想私人大贡献,定制版友情链接制成了,从友情链接里的博客里抓取RSS,以前忘想用的是GOOGLE Reader,被关掉后又用鲜果,不过后来又不好用了,所以也没有再用其他RSS阅读器,所以忘想就想自己作个简单的RSS收集网页,以便自己及时阅读所关注的个人博客网站,于是,花了约一个星期时间不停学习,结果制成了本功能页面。

示例:    鹅城

缺点:

1、因是用WORDPRESS来收集其他网站提供的RSS,如果因提供RSS网站速度慢或提供RSS出错的时候,则不能正确显示本页面,可能会出现博主网址与博文地址不符合的现象,这是个BUG,忘想正在努力改进中。

2、慢,十分的慢,这页面是需要先从访问别人的RSS再计算后再列示出来,如果几十个博客地址去访问,期间所花费的时间将会很久,如果自己所用空间里PHP运行时间只是默认30秒的话,有时候可能会出现运行超时的现象,如果出现这种情况就刷新几次就好了。访问的时候请给些耐心啊。

3、因为是按时间计算的,有些博友如果超过设定时间没有更新博文的话就自动不显示出来了,这个结果比较残酷,所以太懒的博友就没办法了。(这个时间可以自己定的)

优点:

1、酷,这个友情链接是忘想用心去做的,其中就为此专门去一个个收集各个博友的LOGO图(如果没有LOGO图还找到了用于Gravatar 头像的图),忘想为此做到了图文显示,一目了然,直观吧?

2、可以看到时间比较靠前更新的博友,谁写的勤奋谁就排在前面,这样就容易发现。

其本实现方式:

1、从源地址里抓取RSS

2、将抓取的RSS存入PHP数组

3、将数组重新排序,发表时间靠前的排前面

4、将已重新排序完的数据显示出来,结果可以自定义显示时间(比如32天内发表或20天内发表的博文)

需要用到的wordpress文件:

1、class-feed.php
(必须,WORDPRESS自带,重要的是我们用它来抓取RSS,非它不可,不过仅此而已,我们不必更改此文件)

2、functions.php
(为了方便,忘想在此文件加了些函数,这个函数是用于自动WordPress中创建自定义PHP页面,而不用自己在后台自己再创建了,到时直接就可以在iscustom目录(自己在主题目录下建立)里直接创建PHP文件不必重要注册使用,为了安全,忘想还对自定义PHP的文件作了比较严格的安全函数 主要是过滤参数,只能接受小写字母和- 的PHP文件名,另外,因WORDPRESS的RSS有缓存刷新时间,默认为12小时,忘想就改了为3600秒,以便能更快抓取博友的RSS)

3、本友情链接文件,比如自己起名为echeng.php 那么就算是echeng (重要:这个文件是存在放在自己主题里的iscustom目录,如果自己主题没有这个这个目录,就是自己创建这个目录,然后把自己这个友情链接文件存放在这个目录下)

好了,废话少说。以下为具体操作(操作需要一定基础的电脑知识,教程在这里,学不学会请多多琢磨,当然可以请教忘想我,周末下午的时间或平时的晚上有时间,我会在有限的时间专门解答)
1、在自己的WORDPRESS系统里主题里新建立一个目录,名字为iscustom
2、在主题里找到functions.php ,找开,在里面添加以下代码并保存

// 自定义PHP页面 star
  // 安全函数 主要是过滤参数,只能接受小写字母和- 开始
  function cleaninput($isinput){
  $clean = strtolower($isinput);
  $clean = preg_replace("/[^a-z]/", "", $clean);
  $clean = substr($clean,0,52);
  return $clean;
  }
// 安全函数 主要是过滤参数,只能接受小写字母和- 结束
function loadCustomTemplate($template) {
  global $wp_query;
  if(!file_exists($template))return;
  $wp_query->is_page = true;
  $wp_query->is_single = false;
  $wp_query->is_home = false;
  $wp_query->comments = false;
  // if we have a 404 status
  if ($wp_query->is_404) {
  // set status of 404 to false
  unset($wp_query->query["error"]);
  $wp_query->query_vars["error"]="";
  $wp_query->is_404=false;
  }
  // change the header to 200 OK
  header("HTTP/1.1 200 OK");
  //load our template
  include($template);
  exit;
  }
function templateRedirect() {
  $basename = cleaninput(basename($_SERVER['REQUEST_URI'], '?' . $_SERVER['QUERY_STRING']));
loadCustomTemplate(TEMPLATEPATH.'/iscustom/'."/$basename.php");
  }
add_action('template_redirect', 'templateRedirect');
// 自定义PHP页面 end
// 自定义RSS缓存时间 STAR
  function wpdx_feed_cache_time( $seconds ){
  return 3600; //修改数字即可,单位为秒
  }
  add_filter( 'wp_feed_cache_transient_lifetime' , 'wpdx_feed_cache_time' );
// 自定义RSS缓存时间 END

3、在自己主题里的iscustom目录,新创建echeng.php 里面的代码如下

 <?php get_header(); ?>
<style type="text/css">
  li img {
  float: left;
  margin: 0 15px 0 0;
  }
/* li 不换行,宽度固定 */
  .ul_two {list-style: none;margin: 0px;padding: 0px;}
  .ul_two li {float: left;width: 300px;height:165px;margin: 0px 10px 10px 0px;overflow: hidden; line-height:1.6em;border: solid 2px  ;background-color: #ccd;}
  .ul_two em{ background:#FFE4B7; border:1px solid #FFBB8B; color:#FF6800;}
.clear {clear: both;}
  </style>
<a target="_blank" href="http://www.zeove.com/">鹅主</a>说(:
  <span style="color: #808080;">关于为什么要坚持写博客,王小波的这句话阐述得最好:双目失明的汉弥尔顿为什么还坐在黑灯瞎火里头写十四行诗?那就叫“自我”。</span><span style="color: #808080;">如果你有一个独立写作的博客,如果你每月至少会更新一篇,如果你还打算继续写下去,欢迎来<strong><span style="color: #008000;">鹅城 &#8211; 中文独立博客圈</span></strong>!</span><a target="_blank" href="http://shang.qq.com/wpa/qunwpa?idkey=1c402c6d5602caf41c3883e2cd0f13b9373cc2364e5feb9c620b2bb08ceb4c6e" target="_blank"><img title="鹅城 - 独立博客圈" src="http://pub.idqqimg.com/wpa/images/group.png" alt="鹅城 - 独立博客圈" border="0" />
</a>)<br />
  <?php
  include_once( WPINC . '/class-feed.php' );
?>
  <?php
  //#################  #################
  $arr = array(
   array(
  'siteimg'       =>    'https://gwkpxq-bn1305.files.1drv.com/y2pecqvQIqApD5BsEC0cSUgVFH01ShqfPqXcZaCcxzqjzvz03TuNjcypBYH5tdElmkKrNjPPABhhX4UC6QdH7C4a14gQtEpTgcXnBbnuOb2QYs/Peng2014-blog.jpg',
  'sitelink'      =>    'http://dapengde.com/',
  'sitersslink'   =>    'http://dapengde.com/feed',
  'sitename'      =>    '大鹏',
  'siteto'        =>    '',
  'sitetoname'    =>    '',
  'sitetime'      =>    '',
  ),
  array(
  'siteimg'       =>    'https://chinr.net/wp-content/themes/u509/images/ok2.gif',
  'sitelink'      =>    'https://chinr.net/',
  'sitersslink'   =>    'https://chinr.net/feed',
  'sitename'      =>    '忘想',
  'siteto'        =>    '',
  'sitetoname'    =>    '',
  'sitetime'      =>    '',
  ),
  array(
  'siteimg'       =>    'http://zhuweiteam.com/introction/sludge/fanxihui.jpg',
  'sitelink'      =>    'http://fanxihui.com/',
  'sitersslink'   =>    'http://fanxihui.com/feed',
  'sitename'      =>    'Francis',
  'siteto'        =>    '',
  'sitetoname'    =>    '',
  'sitetime'      =>    '',
  ),
   array(
  'siteimg'       =>    'https://secure.gravatar.com/avatar/7bc0ad6b05488d0e1fa713d10a224d1a',
  'sitelink'      =>    'http://www.zeove.com/',
  'sitersslink'   =>    'http://www.zeove.com/feed',
  'sitename'      =>    '哲尔夫',
  'siteto'        =>    '',
  'sitetoname'    =>    '',
  'sitetime'      =>    '',
  ),
  array(
  'siteimg'       =>    'https://secure.gravatar.com/avatar/9b2d8b0cf2fc61e59a626122272386e8',
  'sitelink'      =>    'https://chenghouwen.com/',
  'sitersslink'   =>    'https://chenghouwen.com/feed',
  'sitename'      =>    '勺子',
  'siteto'        =>    '',
  'sitetoname'    =>    '',
  'sitetime'      =>    '',
  ),
  array(
  'siteimg'       =>    'https://secure.gravatar.com/avatar/56820b38d9d10eba7614a827ac049dfb',
  'sitelink'      =>    'http://maguang.net/',
  'sitersslink'   =>    'http://maguang.net/feed',
  'sitename'      =>    '马光',
  'siteto'        =>    '',
  'sitetoname'    =>    '',
  'sitetime'      =>    '',
  ),
  array(
  'siteimg'       =>    'https://secure.gravatar.com/avatar/ca5a362aa73cf1cdf11c94cc95f43ae4',
  'sitelink'      =>    'https://tumutanzi.com/',
  'sitersslink'   =>    'https://tumutanzi.com/feed',
  'sitename'      =>    '坛子',
  'siteto'        =>    '',
  'sitetoname'    =>    '',
  'sitetime'      =>    '',
  ),
  array(
  'siteimg'       =>    'https://secure.gravatar.com/avatar/eece4ac89edd4a2d86e69314a3ba7fd9',
  'sitelink'      =>    'http://jinbo123.com/',
  'sitersslink'   =>    'http://jinbo123.com/feed',
  'sitename'      =>    '佐仔',
  'siteto'        =>    '',
  'sitetoname'    =>    '',
  'sitetime'      =>    '',
  ),
);
//   echo '<pre>';
  //    print_r($arr);  echo '<br>';
?>
<?php
$result = count($arr);
//echo $result;
  //echo "==============<br />";
$oneArr=array();
  $onezero1=strtotime (date('Y-m-d'));
  $Theshuji=32;
?>
<?php
for ($togorss=0; $togorss<=$result; $togorss++) {
  ?>
  <?php
$rss = fetch_feed( $arr[$togorss]['sitersslink'] );
if ( ! is_wp_error( $rss ) ) :
  // 获取文章数量
  $maxitems = $rss->get_item_quantity( 1 );
$rss_items = $rss->get_items( 0, $maxitems );
  endif;
?>
  <?php if ( $maxitems == 0 ) : ?>
<?php
  {
  //        echo 'No items' ;
$arr [$togorss]['siteimg'] = '#';
  $arr [$togorss]['sitelink'] =  '';
  $arr [$togorss]['sitersslink'] =  '#';
  $arr [$togorss]['sitename'] =  'Is error';
  $arr [$togorss]['siteto'] = '#';
  $arr [$togorss]['sitetoname'] =  'Is error';
  $arr [$togorss]['sitetime'] =  '';
}
?>
<?php else : ?>
  <?php  ?>
  <?php foreach ( $rss_items as $item ) : ?>
<?php
  $Isolddate = $item->get_date("Y-m-d H:i"); //如果要用mktime函数,则要用explode拆解日期。
  $Isoldtime = strtotime($Isolddate);
  $Ispasstime = time()-$Isoldtime; //经过的时间戳。
  //echo '你在网上泡了'.floor($passtime/(24*60*60)).'天了'.'<br />'; //12天。
  if( floor($Ispasstime/(24*60*60)) < $Theshuji){
?>
  <?php  $arr [$togorss]['siteto'] = esc_url( $item->get_permalink() ); ?>
  <?php  $arr [$togorss]['sitetoname'] =  esc_html( $item->get_title() ); ?>
  <?php  $arr [$togorss]['sitetime'] =  $item->get_date("Y-m-d H:i"); ?>
  <?php
}
  else {
  $arr [$togorss]['sitetime'] =  '';
}
?>
<?php endforeach; ?>
  <?php endif; ?>
<?php
  }
  ?>
<?php
function sortArr($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")
  {
  if(!is_array($ArrayData)) return $ArrayData;
// Get args number.
  $ArgCount = func_num_args();
  // Get keys to sort by and put them to SortRule array.
  for($I = 1;$I < $ArgCount;$I ++)
  {
  $Arg = func_get_arg($I);
  if(!eregi("SORT",$Arg))
  {
  $KeyNameList[] = $Arg;
  $SortRule[]    = '$'.$Arg;
  }
  else $SortRule[]   = $Arg;
  }
  // Get the values according to the keys and put them to array.
  foreach($ArrayData AS $Key => $Info)
  {
  foreach($KeyNameList AS $KeyName) ${$KeyName}[$Key] = strtolower($Info[$KeyName]);
  }
// Create the eval string and eval it.
  $EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';
  eval ($EvalString);
  return $ArrayData;
  }
  //注意:按照数字方式排序时 153 比 65 小
  //    $temp = sortArr($arr,"sitetime","SORT_DESC","sitetime","SORT_DESC","sitetime","SORT_ASC","SORT_STRING");
  $temp = sortArr($arr,"sitetime","SORT_DESC","SORT_STRING");
//    print_r($temp);
//    echo '</pre>';
?>
<span style="color: #808080;">收集</span><span style="color: #ff0000;"><?php echo $result ; ?></span><span style="color: #808080;">个博客,以下为能获取FEED的鹅(小鹅<a target="_blank" href="https://chinr.net">忘想</a>制作)</span>,<span style="color: #808080;">只陈列</span><span style="color: #ff0000;"><?php echo $Theshuji ;?>天以内</span><span style="color: #808080;">撰写的博客。因wordpress获取FEED缓存需要12小时,所以本日发表的文章只能次日才能看到FEED更新。</span>
<ul class="ul_two">
<?php
  $zero1=strtotime (date('Y-m-d'));
  $theNew=0;
for ($okx=0; $okx<=$result; $okx++) {
  //  echo "数字是:$okx <br>";
  $olddate = $temp [$okx]['sitetime']; //如果要用mktime函数,则要用explode拆解日期。
  $oldtime = strtotime($olddate);
  $passtime = time()-$oldtime; //经过的时间戳。
  //echo '你在网上泡了'.floor($passtime/(24*60*60)).'天了'.'<br />'; //12天。
  if( count($temp [$okx]) > 5){
if( floor($passtime/(24*60*60)) < $Theshuji){
  //if( $temp [$okx]['sitelink'] !=''){
  //if( $temp [$okx]['sitename'] !=''){
  //    if( $temp [$okx]['sitelink'] == substr($temp [$okx]['siteto'],0,strlen($temp [$okx]['sitelink']))){
  //    if( strcasecmp($temp [$okx]['sitelink'] , substr($temp [$okx]['siteto'],0,strlen($temp [$okx]['sitelink'])))== 0 ){
// 从 URL 中取得主机名
  if( substr($temp [$okx]['sitelink'],0,5)=='https')
  preg_match("/^(https:\/\/)?([^\/]+)/i",$temp [$okx]['sitelink'], $matches);
  else
  preg_match("/^(http:\/\/)?([^\/]+)/i",$temp [$okx]['sitelink'], $matches);
  $host = $matches[2];
  // 从主机名中取得后面两段
  preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
  //echo "域名为:{$matches[0]}";
  //echo "---<br />";
// 从 URL 中取得主机名
if( substr($temp [$okx]['siteto'],0,5)=='https')
  preg_match("/^(https:\/\/)?([^\/]+)/i",$temp [$okx]['siteto'], $twomatches);
  else
  preg_match("/^(http:\/\/)?([^\/]+)/i",$temp [$okx]['siteto'], $twomatches);
  $host = $twomatches[2];
  // 从主机名中取得后面两段
  preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $twomatches);
  //echo "域名为:{$twomatches[0]}";
if( $matches[0] == $twomatches[0]){
$theNew++ ;
  ?>
<li>
  <img src="<?php  echo $temp [$okx]['siteimg'];?>" width="110" height="110" alt=""  />
  <h3><em><?php  echo $theNew ;?>.</em><a target="_blank" href="<?php  echo $temp [$okx]['sitelink'];?>"><?php  echo $temp [$okx]['sitename'];?></a></h3><span style="color: #FF6800;">
<?php
  switch (floor($passtime/(24*60*60)))
  {
  case 0:
  echo "今天";
  break;
  case 1:
  echo "昨天";
  break;
  case 2:
  echo "前天";
  break;
  default:
  echo floor($passtime/(24*60*60)) ;?>天前
  <?php
}
//      echo floor($passtime/(24*60*60)) ;
?>
  </span>
  撰写<a  href="<?php  echo $temp [$okx]['siteto'];?>" title="详细阅读:<?php  echo $temp [$okx]['sitetoname'];?>" target="_blank"><?php  echo $temp [$okx]['sitetoname'];?></a><span style="color: #808080;font-size:12px;">于<?php  echo $temp [$okx]['sitetime'];?></span><br /><br /><br />
  </li>
  <?php
  }
  }
  }
  //       }
//}
  ?>
<?php
}
  ?>
<?php get_footer(); ?>

 

然后,将这些已更改过的文件上传即可
functions.php上传到主题里
echeng.php上传到主题下的iscustom目录

如果想添加友情链接怎么办?
  答:只需要把
  
  array(
  'siteimg'       =>    '',
  'sitelink'      =>    '',
  'sitersslink'   =>    '',
  'sitename'      =>    '',
  'siteto'        =>    '',
  'sitetoname'    =>    '',
  'sitetime'      =>    '',
  ),

复制下来,更改里面的参数值即可,比如

忘想博客里的图片为https://chinr.net/wp-content/themes/u509/images/ok2.gif

忘想博客里的网址为https://chinr.net/

忘想博客里的RSS地址为https://chinr.net/feed

忘想博客里的名称为忘想

例子,

 array(
  'siteimg'       =>    'https://chinr.net/wp-content/themes/u509/images/ok2.gif',
  'sitelink'      =>    'https://chinr.net/',
  'sitersslink'   =>    'https://chinr.net/feed',
  'sitename'      =>    '忘想',
  'siteto'        =>    '',
  'sitetoname'    =>    '',
  'sitetime'      =>    '',
  ),

在这个数组加到里面即可。里面的siteto sitetoname sitetime 三个值其实就是RSS抓取的文章地址、标题、发表时间,这个是自动生成的,不必填写。

重要:

1、如果想改几天时间内发表的文章,只需要更改$Theshuji参数即可,比如32天内 $Theshuji=32;

2、在本WORDPRESS里复制下来的代码,因是WORDPRESS的特性自动改半全角符号,复制后需要请自己将全角的‘ ’ ”替换成半角的符号即可。当然,现成的文件忘想已经放在群里了,大家可以去找找。自己看是否需要而使用吧。

如果你的主题是自适应网页的话,本页面也会自适应喔。

示例:    鹅城

 

 

 

 

转载请注明来源:忘想-《定制版wordpress友情链接》

本文链接地址:
https://chinr.net/youqinglianjie_187.html

随意真心鼓励

以下评论区域您可以不填 [ 姓名、电子邮件、站点 ] 这三项,不过您评论后,我必须经人工审核(通常是晚上才有时间审核,可能需要几天内的晚上才回复,因白天要在厂里干活,请原谅。)后才看情况是否批准(不通过审批即删除!)和显示出来!本文限评60个评论,超过即关闭评论。

发表评论

电子邮件地址不会被公开。

请勿发广告和影响太深的言评。

定制版wordpress友情链接”有 25 评论

  1.     Hi记忆      2014年12月21日

    这么钻研,也真是费心思了,赞一个。
    我之前用的是firefox加书签,可以在书签栏里看到是否更新和最近更新的文章,但换了个电脑同步不了,遂回到chrome里加书签,有时间就都打开一遍。

    回复  
  2.     随望淡思      2014年12月22日

    这跟我之前撰写的一篇博文,《P2P式友情链接》很像了!不过还需要改进……尤其是同步方面!!那鹅城页面打开真的很慢……

    回复  
    1.     忘 想 回复!      2014年12月22日

      是很慢,正在想办法改进中。。。。。。,毕竟是一次读取几十次远程博客的RSS,访问都需要时间。

      回复  
  3.     大肥羊      2014年12月22日

    貌似像我现在那样加缓存会快很多,方法与你这个差不多。https://cyhour.com/links

    实现方法:http://wangdaodao.com/6268

    回复  
    1.     忘 想 回复!      2014年12月22日

      你的快多了,我的比较慢,这是事实。

      回复  
      1.     大肥羊      2014年12月22日

        我的RSS数量也很少,现在暂时就3个。

        回复  
        1.     忘 想 回复!      2014年12月22日

          我抓38个,太多了。

          回复  
      2.     大肥羊      2014年12月24日

        好吧,我那个RSS的去掉了,才加上几天,刚看了看数据库,wp_options 暴增,原本几百K,现在将近6MB,表中发现了大量option_name以“_transient”开头的数据,原来这是引入RSS feed 增加的缓存。

        你的也看看吧。http://kn007.net/topics/optimization-clean-up-wordpress-database-wp_options-table/

        回复  
        1.     忘 想 回复!      2014年12月25日

          汗,原来会增加数据库记录啊?这样结果似乎不太好,看来我得再改改了。

          回复  
  4.     大路      2014年12月23日

    真的很慢…

    回复  
    1.     忘 想 回复!      2014年12月27日

      改进后,现在快多了,就是占数据表的问题正在想办法中。。。

      回复  
  5.     laofan      2014年12月23日

    看着很高级的样子,效果真心不错

    回复  
    1.     忘 想 回复!      2014年12月23日

      谢谢,其实除了速度慢以外,这效果我很满意。

      回复  
  6.     马光      2014年12月25日

    挺不错的,弄个页面,跑这么多代码,佩服,我是一窍不通。

    回复  
    1.     忘 想 回复!      2014年12月25日

      目前运行较慢,又发现新的BUG好像占用数据库记录,正想办法查资料学习中,想办法改进中。。。。。。

      回复  
    1.     忘 想 回复!      2015年1月15日

      谢谢支持!

      回复  
  7.     方室网志      2015年1月17日

    代码神马的最讨厌了!主题有所改善,评论部分看起来还是很乱啊 !写小说的话,你这个速度不行啊,怎么着也得每天一章3K党吧!

    回复  
    1.     忘 想 回复!      2015年1月17日

      每天一章3K字目前还做不到,正在努力往每周3K字前进中。另,评论部分改了点点东西。

      回复  
  8.     瑾瑜      2015年5月24日

    加上数据库缓存就好了,后台定时甚至分批次抓取好,访问时直接调用。

    回复  
    1.     忘 想 回复!      2015年5月24日

      我已经改版过一回了,现在不用数据库缓存了,因为占用数据库,我用的比较笨的办法。所以比较慢

      回复  
  9.     尚磊的博客      2015年9月8日

    很赞设计。人人都应该懂一点编程。
    这也是在为独立博客摇旗呐喊。

    回复  
    1.     忘 想 回复!      2015年9月9日

      这个功能很耗服务器资源的,所以我现在无耐改成了一日只读一次,就是缓存日期为一日。

      回复  
  10.     姜辰      2016年1月17日

    我就想知道一个事,RSS没有输出时间,你有怎么根据更新来排名?我在写博客小屋的RSS订阅时一直在想这个~原来没看你代码,实在是··一行太长没有自动换行啊

    回复  
    1.     忘 想 回复!      2016年1月18日

      在数组里排序的;这个太耗资源了,仅研究而已,少量数据而可,大量数据就会卡顿严重,不推荐生产正式所用.

      回复