想了半天也想不出一个简短的好标题。

在制作2gether界面的时候,需要在sidebar上加入一个成员最近更新的东西。首先我想到的就是有没有类似功能的rss2js的东东。不过今天发现了更简洁更实用的方法,除了feed合烧之外不需要其他第三方的服务或者代码,也不知道火星与否。

使用wp的用户都知道,在后台登陆成功之后,会跳转到后台的首页,这个首页上有相关的wp官方更新记录。这个其实就是利用wp自带的一个rss分析函数来实现的rss读取。利用这个函数就可以实现上面提到的功能了。

应用规则是这样的:

<?php
  require_once(ABSPATH . WPINC . '/rss-functions.php');
  $rss = fetch_rss($uri);
?>

这段代码来自codex。我猜也许没有多少人真的看过codex的全部内容,除了那些开发插件的牛人,呵呵~

同样codex上也给出了一个具体的应用,不过这段代码在具体应用的时候还有点小问题,其代码如下:

<?php
  require_once(ABSPATH . WPINC . '/rss-functions.php');
  $rss = fetch_rss('http://example.com/rss/feed/goes/here');
  echo '<ul>';
  foreach ($rss->items as $item ) {
    echo '<li><a href=\"'.$item['link'].'\" title=\"'.$item['title'].'\">'.$item['title'].'</a></li>';
  }
  echo '';
?>

这段代码是调用wp根目录下的rss-functions.php文件进行rss解析的。

首先,这段代码没有体现如何控制显示出来的更新条目的数量;第二,当你真的把这段代码放到你所制作主题的模版代码中时,会发现你事先为其在css中定义的类没有起作用,同时,a标签中titile属性里面多出了两个"\"。

解决第一个问题的方法,就是利用php的array_slice将items数组截取想要的数目用以显示。

解决第二个问题的方法更简单,只要把代码中用来转义的"\"去掉就可以了。

修改后的代码如下:

<?php
  require_once(ABSPATH . WPINC . '/rss-functions.php');
  $rss = fetch_rss('http://example.com/rss/feed/goes/here'); //feed地址
  $rss->items = array_slice($rss->items, 0, 15); //数字15为想要显示的条目数
  echo '<ul>';
  foreach ($rss->items as $item ) {
    echo '<li><a href=\"'.$item['link'].'\" title=\"'.$item['title'].'\">'.$item['title'].'</a></li>';
  }
  echo '</ul>';
?>

剩下的工作就是针对上述代码进行美化了 ^^

此外还要提到的就是,在发现这个方法之前所用的方法:

  1. feed合烧。
    寻找了很多的网站服务,都没有找到合适的,不是功能不开放,就是feed数限制为5条。最后还是到刚刚推出服务不久的xFruit才得以解决。
  2. rss2js。
    小孙给我的这个网站提供了feed2js的代码下载和在线服务。其实说来无论是这个feed2js还是wp的这个function,都是缘于一个开源项目Magpie RSS的;包括FeedShake也是基于Magpie RSS的技术提供服务的。

最后提供一下2gether的模版中的相关代码。

首先是sidebar中的rss解析代码:

<?php
  require_once(ABSPATH . WPINC . '/rss-functions.php');
  $rss = fetch_rss('http://xfruits.com/menghao/2gether/'); //feed地址
  echo '<ul class="sidebar-ul-block">';
  $rss->items = array_slice($rss->items, 0, 15);
  foreach ($rss->items as $item ) {
    echo '<li><a href="'.$item['link'].'" title="'.$item['title'].'">'.$item['title'].'</a></li>';
  }
  echo '';
?>

再来是针对上述代码的css样式:

.sidebar-ul-block{
  margin: 0;
  padding: 0;
  list-style: none;
}
.sidebar-ul-block li{
  border-bottom: 1px solid #DEF2B9;
  padding: 2px 0;
}

就是这些,再次希望不是火星新发现~

ps.哪位wp大牛可以告诉我如何能够取得wp中links的rss。感激不尽~