我一直用 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/
本站文章除特殊标明者外均为原创,版权所有,如需转载,请以超链接形式注明作者和原始出处及本声明

同标签的文章

  • 换主题啦
    换主题啦,原来的主题实在是审美疲劳了。 用上次介绍的主题神器Artisteer做的,也是想试验一下Artisteer的实用程度如何。 为了便于维护,我以A...
  • 原创Wordpress摘要插件wp-utf8-excerpt升级
    提问之前请确保你查看了插件附带的readme文件。 不看readme文件、说话不礼貌、话都说不清楚的人,请恕我无法回答你们的问题。 原创Wordpr...
  • Word 2003 风格的 Wordpress 主题
    去年就说要做一个 Word 2003 风格的 Wordpress 主题,快完工的时候有事搁下了。这几天又重新整理了一下,觉得可以放出来分享了。我做 Wordpr...
  • 如何向 Wordpress 官网提交自己做的插件
    这是一个有点自相矛盾的题目,既然都会自己写插件了,还会搞不定提交这等小问题吗?-____- 不过这其中的过程其实并非那么一目了然,还是把我摸索的结果与大家分享吧...
  • 原创插件:适合中文的 Wordpress 摘要插件
    提问之前请确保你查看了插件附带的readme文件。 不看readme文件、说话不礼貌、话都说不清楚的人,请恕我无法回答你们的问题。 如果你不喜欢 Wor...

16 回复 to “不用插件实现在RSS Feed中插入其他内容”

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

  • Betty:

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

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

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

    so…MS没必要改…

  • Betty:

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

  • 10个优化WordPress RSS Feed的技巧(1)…

    像你所知道的,RSS Feed对于大多数人的互联网生活,已经是必不可少的部分。由于其方便和效率,越来越受关注,甚至追捧。特别是WordPress非常重视这一点。比如提交到WordPress官方主题目录…..

  • TR@SOE:

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

    很奇怪,为什么不能用。

  • Betty:

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

  • 很有hack精神!真不错

  • [...] 另外,如果上面有代码没有起作用,有可能是插件冲突,或者其他问题引起的,可以尝试一下另一个相似的方法:不用插件实现在RSS Feed中插入其他内容。 [...]

  • [...] 另外,如果上面有代码没有起作用,有可能是插件冲突,或者其他问题引起的,可以尝试一下另一个相似的方法:不用插件实现在RSS Feed中插入其他内容。 [...]

  • [...] 另外,如果上面有代码没有起作用,有可能是插件冲突,或者其他问题引起的,可以尝试一下另一个相似的方法:不用插件实现在RSS Feed中插入其他内容。 [...]

  • 我想问一下,这样插入的百度联盟的广告会起效吗?

  • Betty:

    @热豆腐:
    没用过百度联盟,不知道

  • [...] 另外,如果上面有代码没有起作用,有可能是插件冲突,或者其他问题引起的,可以尝试一下另一个相似的方法:不用插件实现在RSS Feed中插入其他内容。 [...]

发表评论