我一直用 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 中显示文章的评论数量哦~~最终效果嘛,订阅我的博客就能看到了 ^_^