定制 WordPress 的 Rss 输出到 <!--more-->
看来我真是浸淫在了 WordPress 里,俗称工欲善其事,必先利其器,也不知道想把这一器磨成多利。大约和当初结识 Joomla 时同样的境遇,难道要变大杀器不成?接连都几篇与 WordPress 相关的内容,反而把主业给抛在了一边。好了,都是实际的问题,我的文章里因为有一些代码什么的,所以选择了用 <!--more--> 的形式显示片断,而不是用的摘要,虽然摘要也有可视编辑器,但还是用 <!--more--> 一点鼠标方便些。但是问题又有了,文章列表页里是显示了 more 前面的内容,但 RSS 不好控制,因为文章没有摘要, 所以在后台 Settings/Reading 里无论选择 Rss 输出是 Full Text 还是 Summary 都会以全文的方式输出。选择 Summary 时,WordPress 看到没有填写文章摘要就会代之以全文。
这就要作些改动了,用插件吗,好像必要性不大,何况好像还没有这样的插件,只要改改代码就行了。我的 WordPress 是当前最新版 3.0.1, 打开 /wp-includes/feed-rss2.php,把大约第 44 行改一下,也就是要把下面代码:
1<?php if (get_option('rss_use_excerpt')) : ?>
2 <description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
3<?php else : ?>改为
1<?php if (get_option('rss_use_excerpt')) : ?>
2 <description><![CDATA[<?php if(has_excerpt()) the_excerpt_rss(); else {global $more;$more=0;the_content('阅读全文 >>');} ?>]]></description>
3<?php else : ?>即在后台 Settings/Reading Settings 里设置了 Rss 输出是以 Summary 摘要的方式,就会去判断,若有摘要输出摘要,否则就从开头输出到 More 位置,没有 More 标记当然还是输出全文。
几个注意的地方,代码中为 the_content() 传入 '阅读全文' 链接名,因为有中文,所以该文件应该保存为 utf-8 格式。为了保证效果是输出到 More 位置, 必须在后台 Settings/Reading Settings 里,设置 For each article in a feed, show 选项要选择 Summary,Full text 仍然以全文输出。所以这种修改不会影响到原有的功能。
网上还说过其他的修改办法,一个是在后台选择 Full text 的时候可以替换 /wp-includes/feed-rss2.php 大约 48 行处的 the_content_feed('rss2') 为 global $more;$more=0;the_content('阅读全文 >>')。还有一种做法是在判断页面类型的的时候,当是 is_feed() 的时候,全局的 $more 要设置为零,也能达到类似的效果。
我还曾想过,写个完成此功能的插件,会让更多人更方便些,而无需懂代码或不懂代码的人都去动 WordPress 的核心的代码,但是要拦截这个 Filter 有点困难。升级 WordPress 本身的时候记得作了这样的改动就行。
参考:1. http://baoz.net/wordpress-rss-feed-more/ 永久链接 https://yanbin.blog/wordpress-rss-show-to-more/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明]
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。