一直都没怎么留意自己的Feed输出,经常在WordPress后台的Option 中看到“Note: If you use the <!–more–> feature, it will cut off posts in RSS feeds.”这句话,不过没在意所以也一直不知道输出的Feed会被Cut Off成什么样子。看了一下习惯订阅Feed的朋友们的讨论,普遍都喜欢Feed全文输出(我个人却喜欢摘要输出,因为感觉那样更加容易比较快的判断那一篇是自己想看的),读者就是上帝,所以当然是迎合大众的口味,设置成为全文输出了。结果却令我大吃一惊,输出的依然是摘要,然后看后台设置的时候才开始注意这句话,Google了一下解决方案,发现普遍的做法都是用插件的方法来解决,或者修改显示全文的代码(the_content())和显示摘要的代码(the_excerpt())这两个函数,插件会影响速度,并且会带来副作用,这个我向来不喜欢,后者修改的地方太多了,升级比较麻烦,有没有更加简单一点的方法呢?
大致浏览了一下WordPress代码,发现输出功能是在wp-includes/post-template.php中实现的,其中有这么一段:
if ( preg_match('/<!--more(.*?)?-->/', $content, $matches) ) {$content = explode($matches[0], $content, 2);if ( !empty($matches[1]) && !empty($more_link_text) )$more_link_text = strip_tags(wp_kses_no_null(trim($matches[1])));} else {$content = array($content);}
其中第一句判断语句就是判断增加的more标记,带有more的话就进行截断,否则全文输出,另外找到了是否feed输出的判断函数(WordPress构架还是挺不错的,代码读起来非常省力气)is_feed,所以对于第一句话可以做这样修改:
if ( preg_match('/<!--more(.*?)?-->/', $content, $matches)&&!is_feed() )
增加了是否Feed输出的判断,这样feed输出的时候就会跳到else的处理中,进行全文输出。当然,升级的时候这个修改还是需要的,假如升级版本没有对此进行修改得话,:),记住这个修改,也是发表本文的目的之一。如果你连这个都懒得修改,那可以从这里下载修改后的版本,直接替换原来的post-template.php文件。
如果不行请参见我另一篇文章:让wordpress的RSS全文输出