不用插件实现在RSS Feed中插入其他内容

我一直用 Ozh’ Better Feed 这个 wordpress 插件在博客输出的 RSS Feed 中插入版权声明,这个插件很好,可定制性很强,也可以用来在 Feed 中插入广告或其他内容。不喜欢麻烦的同学用这个插件就行了,不用往下看了 :) 如果你喜欢自己动手,并且希望少用一个插件(或许可以加快一点点博客的访问速度),那么请继续 ^_^

想法最初来自10个有用的 Wordpress RSS技巧 一文(中文版:作甚的翻译幸福收藏夹的翻译),其中第三个技巧提到在主题的 functions.php 文件里加入一段简短的代码,即可代替插件实现在 RSS Feed 中插入其他内容。

原文的代码是这样的:

<?php
function insertAds($content) {
$content = $content.’<hr /><a href=”http://www.wprecipes.com”>Have you visited WpRecipes today?</a><hr />’;
return $content;
}
add_filter(’the_excerpt_rss’, ‘insertAds’);
add_filter(’the_content_rss’, ‘insertAds’);
?>

也许是因为那篇文章写得较早,现在 wordpress 的核心代码已经有了变化,或者还有些不为人所知的原因,总之,这段代码在我这试用无效。于是我追根溯源,跑到这种办法最早的出处(http://www.wprecipes.com/how-to-insert-ads-on-your-rss-feed)那里看。那篇文章的回复中也有人报告代码无效,他认为 wp 2.5 中可能有个bug;不过我用的是 wp 2.7,也无效,估计这已经不是 bug,是 feature 了 -__- 然而在回复中有位 julien 提到了更好的解决办法:

function gopostrss($content) {
if(is_feed()){
$content = ‘text before content’.$content.’ and after the content !’;
}
return $content;
}
add_filter(’the_content’, ‘gopostrss’);

他不是把函数挂在 the_content_rss 这个钩子上,而是直接挂在 the_content 上,并加了个判断,如果是 Feed 就做个处理,加上自定义的一些内容。这样做不但解决了第一种办法无效的 bug,而且对 wordpress 输出的多种 Feed 都有效。(Wordpress 会输出 Atom、RSS 2.0 等好几种 Feed。)

我在 julien 代码的基础上根据我的需求改了一下,如果也需要在 Feed 中插入版权声明的话,抄我这个就行了:

function insertFeed($content){
    if (is_feed()){
        global $id;
        $comNum = get_comments_number($id); //以上两行是为了取得文章的评论数量
        $insert = “<hr /><P><small>本文作者:<A HREF=’http://myfairland.net/’>Betty</A> | 本文地址: <a href=’”.get_permalink().”‘>”.get_permalink().”</a> | <a href=’”.get_permalink().”#comments’>”.$comNum.”条评论</a><br/>本站文章除特殊标明者外均为原创,版权所有,如需转载,请以超链接形式注明作者和原始出处及本声明</small></P>”;   
        $content = $content.$insert;
    }
    return $content;
}
add_filter(’the_content’, ‘insertFeed’);

记得红字部分替换成你自己的网址和名字 :) 我这个代码还会在 Feed 中显示文章的评论数量哦~~最终效果嘛,订阅我的博客就能看到了 ^_^

相关文章

本文作者: Betty | 本文地址: http://myfairland.net/insert-something-in-the-rss-feed/
本站文章除特殊标明者外均为原创,版权所有,如需转载,请以超链接形式注明作者和原始出处及本声明
如果你对本文感兴趣,欢迎订阅我的博客

13个评论/引用通告

你可以发表评论,或者引用此文,或者订阅评论

  1. 我居然又是沙发,高兴一下
    话说其实RSS规范里面就自带了CC授权规范了,因此个人感觉再加入授权协议说明不太必要了,倒是加入一个评论数量的统计不错

  2. 呵呵,你抢得好快~~
    加入版权声明是为了防止别人盗用你的Feed,当然这其实也只能防君子不能防小人 :)
    如果只要评论数量统计的话,在我的代码基础上改一下就成

  3. O yeah… 很好,我去修改一下文章。

  4. 又看了一回代码,然后查了codex,并没有把the_content_rss删掉,在新版本依然可以用。所以,最有可能出现的问题是上面两个代码都可以用(很明显,没有大的变化,只是the_content和the_content_rss的区别),原来那个是在输入摘要时显示,你如果是全文或者有其他插件装上的话,或许是用the_content,这样就不冲突了。

    so…MS没必要改…

  5. 嗯,理论上应该都有用,但在我这里以及某些人那里第一种就是没用,也许是插件冲突或其他什么原因吧(我用的插件很少,只有4个,都是最常见的,所以其实不太可能是插件冲突…)。总之,能用第一种的就用第一种,用不了的就试试我这个喽 ^_^

  6. 感觉还是应该用回the_excerpt_rss和the_content_rss。一般而言,越细化、越和你的要求相近的api越是应该被关注。

    很奇怪,为什么不能用。

  7. 我以为the_content比较靠前,执行可能效率会更高…不过这方面我不太懂,可能你说得更有道理 :) 但在我这用不了那就没办法啦

  8. 很有hack精神!真不错

发表评论

首页

订阅

关于&留言本

文章索引

原创插件

Chinese (Simplified) flagChinese (Traditional) flagItalian flagKorean flagPortuguese flagEnglish flagGerman flagFrench flag
Spanish flagJapanese flagArabic flagRussian flagGreek flagDutch flagBulgarian flagCzech flag
Croat flagDanish flagFinnish flagHindi flagPolish flagRumanian flagSwedish flagNorwegian flag
Catalan flagFilipino flagHebrew flagIndonesian flagLatvian flagLithuanian flagSerbian flagSlovak flag
Slovenian flagUkrainian flagVietnamese flagAlbanian flagEstonian flagGalician flagMaltese flagThai flag
Turkish flagHungarian flag      
By N2H