看来我真是浸淫在了 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 2 3 |
<?php if (get_option('rss_use_excerpt')) : ?> <description><![CDATA[<?php the_excerpt_rss() ?>]]></description> <?php else : ?> |
改为
1 2 3 |
<?php if (get_option('rss_use_excerpt')) : ?> <description><![CDATA[<?php if(has_excerpt()) the_excerpt_rss(); else {global $more;$more=0;the_content('阅读全文 >>');} ?>]]></description> <?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 Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
[…] 定制 WordPress 的 Rss 输出到 <!–more–> […]
好文章,今晚回去试试,收藏了!
/wp-includes/feed-rss2.php的44行是:
<?php if (get_option('rss_use_excerpt')) : ?>
<description><![CDATA[<?php the_content_feed('rss2') ?>]]></description>
<?php else : ?>
你文中是不是弄错了~~
没错,在 WordPress 3.0.5 还是在 3.1.1 的 /wp-includes/feed-rss2.php 文件里都是
<?php if (get_option('rss_use_excerpt')) : ?>
<description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
<?php else : ?>
不知你用的是什么 WordPress 版本,还是该文件已被改动过。
折腾好几天无果,GG上也搜到相应的文章也很少~~
非常感谢。。。折腾了几个小时的问题终于解决!!!!!!!!!