[原创]WordPress Hack -显示Blogroll中链接的RSS

这索本人一篇原创文章,关于 一个简单的WP Hack
WordPress版本: 2.3.3英文原版

 

本人Blog使用的主题(Theme)万年不变,但这个主题比较旧,很多细节做得不好,所以偶经常对其小修小改.
今天改造内容如题.

今天浏览月光博客时发现的,它首页的Link栏,每个友情链接后面都有RSS地址( 如下图 ).这点让我觉得很贴心. 在这个时代 很多时候RSS地址比网站首页URL还重要 .原因不多说,RSS确实能极大提高效率 .

(试想在Google reader 订阅了几十个Blog,如果没有RSS,你就只能每天到他们的首页上浏览,累不死你,,..)

 

 

搜索一下 ,Wordpress 也有同样功能.

在WordPress Site Admin (后台) – BlogrollManage Blogroll , Add link 或 Edit Link 的页面 有一个 Advanced
折叠项 ,点击 + 展开后 ,就看到填写 RSS Address的地方了

WordPress文档里 say :

RSS URI – URI of the RSS feed associated with the Link, which will be displayed next to the Link itself (if your Template allows it). Example: http://example.com/feed/

就是说,需要Theme支持,才能显示链接的RSS.
很遗憾,我用的这个主题貌似不支持,那么只能自己修改了.修改这个应该不太困难,毕竟只是简单改主题,不是WP Hack.

于是查资料, WordPress在侧边栏显示 Blogroll通过 wp_widget_link 函数 实现,而这个函数直接调用 wp_list_bookmarks 这个 Template Tag . 但在这个Template tag的选项中 我根本找不到任何有关显示Blogroll RSS的参数!!!

查查资料,有位仁兄跟我一样,遇到这个问题,幸好,有人回复给出了解决方法.但这个方法 ,但根本不是 Theme修改,而是 WP Core Code Hacking !

给出的方法实现很简单,修改 WP目录下 wp-includes/bookmark-template.php 文件

把第94行的

$output .= $before;

替换为下面

$feed = clean_url($row->link_rss);

if ( !$feed )
{
$output .= $before;
}
else
{
$output .= $before . ‘rss ‘;
}

 

这个代码容易看懂.如果只是想显示文字RSS链接,不显示RSS图标的话,可以把img标签删掉改为 ” (RSS) “形式.

但是,这段代码貌似根本错误,经过实验,完全不 Work !

仔细研究 bookmark-template.php 文件可以发现,wp_list_bookmarks 函数只是循环产生不同分类的 Blogroll .而真正产生每个链接是调用同文件里的 _walk_bookmarks 函数 .经过本人研究,正确方法是修改_walk_bookmarks这个函数 .

把bookmark-template.php 文件 (位于 wp-includes目录下) 中的 _walk_bookmarks函数 倒数第二行 :
$output .= “$after\n”;

替换为下面内容:

$feed = clean_url($bookmark->link_rss);
if ( !$feed )
{
$output .= “$after\n”;
}
else
{
$output = $output . ‘ (RSS)‘ . “$after\n”;
}

 

演示见本Blog侧边栏 .效果还算完美

PS:这段代码关键是 $bookmark->link_rss 这个变量,官方文档里没有任何地方提到 .事实上这是偶灵机一动想出来的,一实验居然真的可以 .^ -^

于是问题算解决了 ,但这样的话,WordPress这篇文档里的叙述根本是错误的 ……

而且, wp_list_bookmarks 标签里无法实现 显示Blogroll RSS 链接
那么 Site Admin (后台) – BlogrollManage Blogroll , Add link 或 Edit Link 这里 填写的 RSS URI 有啥用? 难道只是给自己看得吗?

9 Responses to “[原创]WordPress Hack -显示Blogroll中链接的RSS”


Comments are currently closed.