我一直用 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 | 本文地址: https://myfairland.net/insert-something-in-the-rss-feed/
本站文章除特殊标明者外均为原创,版权所有,如需转载,请以超链接形式注明作者和原始出处及本声明
我居然又是沙发,高兴一下
话说其实RSS规范里面就自带了CC授权规范了,因此个人感觉再加入授权协议说明不太必要了,倒是加入一个评论数量的统计不错
呵呵,你抢得好快~~
加入版权声明是为了防止别人盗用你的Feed,当然这其实也只能防君子不能防小人 :)
如果只要评论数量统计的话,在我的代码基础上改一下就成
O yeah… 很好,我去修改一下文章。
又看了一回代码,然后查了codex,并没有把the_content_rss删掉,在新版本依然可以用。所以,最有可能出现的问题是上面两个代码都可以用(很明显,没有大的变化,只是the_content和the_content_rss的区别),原来那个是在输入摘要时显示,你如果是全文或者有其他插件装上的话,或许是用the_content,这样就不冲突了。
so…MS没必要改…
嗯,理论上应该都有用,但在我这里以及某些人那里第一种就是没用,也许是插件冲突或其他什么原因吧(我用的插件很少,只有4个,都是最常见的,所以其实不太可能是插件冲突…)。总之,能用第一种的就用第一种,用不了的就试试我这个喽 ^_^
10个优化WordPress RSS Feed的技巧(1)…
像你所知道的,RSS Feed对于大多数人的互联网生活,已经是必不可少的部分。由于其方便和效率,越来越受关注,甚至追捧。特别是WordPress非常重视这一点。比如提交到WordPress官方主题目录…..
感觉还是应该用回the_excerpt_rss和the_content_rss。一般而言,越细化、越和你的要求相近的api越是应该被关注。
很奇怪,为什么不能用。
我以为the_content比较靠前,执行可能效率会更高…不过这方面我不太懂,可能你说得更有道理 :) 但在我这用不了那就没办法啦
很有hack精神!真不错
[…] 另外,如果上面有代码没有起作用,有可能是插件冲突,或者其他问题引起的,可以尝试一下另一个相似的方法:不用插件实现在RSS Feed中插入其他内容。 […]
[…] 另外,如果上面有代码没有起作用,有可能是插件冲突,或者其他问题引起的,可以尝试一下另一个相似的方法:不用插件实现在RSS Feed中插入其他内容。 […]
很好
[…] 另外,如果上面有代码没有起作用,有可能是插件冲突,或者其他问题引起的,可以尝试一下另一个相似的方法:不用插件实现在RSS Feed中插入其他内容。 […]
我想问一下,这样插入的百度联盟的广告会起效吗?
@热豆腐:
没用过百度联盟,不知道
[…] 另外,如果上面有代码没有起作用,有可能是插件冲突,或者其他问题引起的,可以尝试一下另一个相似的方法:不用插件实现在RSS Feed中插入其他内容。 […]
我想问一下,这样插入的百度联盟的广告会起效吗?
@wp seo:
没用过百度联盟,你试试吧
感谢分享经验
[…] 另外,如果上面有代码没有起作用,有可能是插件冲突,或者其他问题引起的,可以尝试一下另一个相似的方法:不用插件实现在RSS Feed中插入其他内容。 […]
看到了嘛 已订阅 我还想在FEED里添加相关文章 和文章标签 我看到有些站实现了 不知道这个无插件是否可以,请指点。
@ali:
你用的什么相关文章插件?这种插件一般都自带插入feed的功能
标签,你试试把上面的
$content = $content.$insert;
改成
$content = $content.$insert.get_the_tags();
我没试,应该可行
@Betty:
额 谢谢 我用的无插件相关文章 木事,最终结合copyfeed这个插件比较不错。 老哥 你的代码是不是都变种了哦,看着难受。哈哈。
@ali:
那代码是为了方便你看懂,如果我自己用不会写成这样
这个功能不错