WordPress的首页摘要显示而Feed全文输出的简单解决方案

2010年03月21日15:52:42 发表评论 热度2,873 ℃

一直都没怎么留意自己的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全文输出

瓜皮猪

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: