在wp中解析rss2006-06-05 Monday, 18:02
想了半天也想不出一个简短的好标题。
在制作2gether界面的时候,需要在sidebar上加入一个成员最近更新的东西。首先我想到的就是有没有类似功能的rss2js的东东。不过今天发现了更简洁更实用的方法,除了feed合烧之外不需要其他第三方的服务或者代码,也不知道火星与否。
使用wp的用户都知道,在后台登陆成功之后,会跳转到后台的首页,这个首页上有相关的wp官方更新记录。这个其实就是利用wp自带的一个rss分析函数来实现的rss读取。利用这个函数就可以实现上面提到的功能了。
应用规则是这样的:
<?php
require_once(ABSPATH . WPINC . '/rss-functions.php');
$rss = fetch_rss($uri);
?>
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 '';
?>
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>';
?>
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>';
?>
剩下的工作就是针对上述代码进行美化了 ^^
此外还要提到的就是,在发现这个方法之前所用的方法:
- feed合烧。
寻找了很多的网站服务,都没有找到合适的,不是功能不开放,就是feed数限制为5条。最后还是到刚刚推出服务不久的xFruit才得以解决。 - 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 '';
?>
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;
}
margin: 0;
padding: 0;
list-style: none;
}
.sidebar-ul-block li{
border-bottom: 1px solid #DEF2B9;
padding: 2px 0;
}
就是这些,再次希望不是火星新发现~
ps.哪位wp大牛可以告诉我如何能够取得wp中links的rss。感激不尽~
http://blog.donews.com/laobai/archive/2006/05/11/864988.aspx
嗯,老白的这个方法很适合那些用户不能完全自定义模版的bsp。
使用的技术应该是dom,前一阵子看过一段,目的是为了动态增加表单项。当时问了Sage,不过没有什么结果,后来也就放弃了。
看来真的有必要多了解一下dom的东西了。
Thanks for the information. This is very useful
WP 中附带的那个 MagpieRSS 版本实在太低了,处理非 UTF-8 格式的 RSS 就会出问题。
仿照 wp_get_links 这个函数做一个 Links 的 RSS 输出应该是件很轻松的事情。
嗯,的确是这样,不过我要的功能比较简单。Feed都重新聚合过了,变成了utf-8的编码,对于简单的应用想必是足够了。
哈哈,没话说了。
好帖!收了!!