WordPress 默认是会带有 Feed 输出功能的,也就是咱们常说的 RSS(当然 WordPress 还支持 Atom 格式)。虽然是有这么个功能,但是博主我觉得并不是特别的好用,所以我根据自己的需要简单的添加了几个功能,也分享给大家看一下,既简单也能提高博客订阅用户的体验。
PS:这篇文章可能会因为博主对 Feed 的折腾而不断完善内容,目前我修改的也就一点点东西。
一、在博客 head 处输出 Feed 订阅链接
WordPress 虽然默认会输出 Feed,不过如果用户想先订阅的话,需要先知道博客的订阅地址才可以。而前面我介绍了个插件却能帮助我们快速发现网站的 Feed 订阅地址,我看了下作者的思路,貌似是通过寻找网页源代码里特定的内容来发现的 Feed 地址的。然后我找了一圈,发现现在很多订阅平台之所以能在用户只输入网站网址的情况下发现 Feed 订阅地址,也是靠的寻找源代码里的特定内容做到的,貌似是有着类似的标准,在网页源代码里输出如下这样的内容就会被识别发现出来:
<link rel="alternate" type="application/rss+xml" title="24点半 » Feed" href="https://hikami.moe/feed">
然后我找了找发现 WordPress 其实是可以直接帮我们来做到的,不需要弄什么复杂的代码,只是这个功能默认没设置而已。要做到在 head 里输出像上面这样的内容,只需要简单的在自己主题 function.php 里加入下面这么一行代码就可以做到了:
add_theme_support( 'automatic-feed-links' );
添加之后,你会发现不仅你的主页源代码里会显示整站的订阅地址,在文章页也会有文章的订阅地址,分类页会有分类的订阅地址什么的。
二、修改 Feed 所使用的默认格式标准为 Atom
我前面一直都是在说 Feed 而不是 RSS 是有原因的,因为虽然大多数时候大多数人包括我都会默认把这两者划为等号,但实际上 Feed 并不完全等于 RSS,Feed 是一种获取消息、文章之类信息的方式,而 RSS 是一种格式标准,按我的理解把它认定为实现 Feed 的一种标准更加合适,但是 Feed 的实现不止有 RSS——当然这个我们是听得最多的,还有另外一个也比较常用的 Atom。这个事情要详细说的话可能要跑题了,所以这里我也不多说了,如果想了解的话,可以看看维基的几个词条:消息来源,RSS,Atom。
总之呢,Feed 不止是说的 RSS,而 RSS 这个格式标准还有各种版本的区别,像 WordPress 就至少提供了三种:RDF/RSS 1.0,RSS 0.92,RSS 2.0。默认情况下,WordPress 的 Feed 链接比如我博客的 https://hikami.moe/feed 这个提供的是 RSS 2.0 标准的,如果你想换成 Atom 的话,就可以自己用代码修改一下。
将下面这段代码复制到 WordPress 主题的 function.php 文件里就行(代码出处:https://gist.github.com/ovizii/6316664):
function atom_default_feed() { return 'atom'; } add_filter('default_feed','atom_default_feed');
另外如果你只想提供 RSS 2.0 标准的 Feed,也可以看下上面我贴的链接,里面还有说替换其它版本为 RSS 2.0 的。
PS:之所以换用 Atom,首先是标准统一,其次是 IETF 出身可能要更有未来一些,再次是在具体实现上相比 RSS 的也要更加规范,最后就是开放标准谁都能用(据我所知 Github 的 Feed 默认就是用的 Atom 格式)。
三、给 Feed 源里的文章添加特色图片
现在大家都喜欢没事配个图,而 WordPress 默认是不会输出文章的特色图片到 Feed 订阅源里的,因为据我了解不论是 RSS 还是 Atom 原本就没规定文章特色图片这种东西,现在我们看到的 Feed 配图大多都是通过取用文章内容的第一张附图或者通过一些非原生规定的标签来实现的。
说到这里我得介绍下 WordPress 的 Feed 设置了,它是支持只输出摘要或者全文输出,所以虽然用户的订阅工具一般会在文章有图片时自动给你匹配第一张图片当特色图片用,但是如果你 Feed 输出设置的不是全文输出,大概率订阅源文章里只有简介不会有图片的存在,自然就不会显示出来特色图了。对于这种设置只输出摘要或者是正文里没图但是设置了特色图片的情况,如果要在订阅工具里看到文章特色图片就得自己来折腾实现了。
PS:当然,即便你是全文输出,也是不会输出特色图片的,自己不折腾的话阅读工具里看到的也只是全文里的第一张图片。
针对添加特色图片这个功能有很多种的做法,可以使用插件也可以使用代码来实现,插件我就不多说了,这个可以直接在后台插件中心里自己查找,我主要说下怎么自己靠代码来实现。不过,在说这个之前,我们先要了解下在 Feed 订阅工具里显示特色图片的两种方法(代码)。
一种是前面说的,因为订阅工具一般会查找订阅文章里是否有图片存在,如果有就会匹配第一张来当作文章的特色图片(缩略图)来用,因此要给订阅源插入特色图片的一种做法就是额外给订阅源的文章插入一张顶部图片链接,让订阅工具选择这张图片当特色图片用。这种做法好处是兼容性好,但是如果你选择的特色图片本身在订阅源里有插入的话,会出现重复图片的问题(因为会在 Feed 的文章正文和摘要里额外添加特色图片的链接)。
如果喜欢这种添加特色图片的办法,可以将下面的代码复制到 WordPress 主题的 function.php 里:
// display featured post thumbnails in RSS feeds function WPGood_rss_thumbs( $content ) { global $post; if( has_post_thumbnail( $post->ID ) ) { $content = '<figure>' . get_the_post_thumbnail( $post->ID, 'thumbnail' ) . '</figure>' . $content; } return $content; } add_filter( 'the_excerpt_rss', 'WPGood_rss_thumbs' ); add_filter( 'the_content_feed', 'WPGood_rss_thumbs' );
代码不是我原创的,原出处可以看下这个链接里 heytricia 的回答:https://wordpress.stackexchange.com/questions/159397/how-to-add-image-to-wordpress-rss-feed-with-no-plug-in
我这里额外解释一下,这段代码会给 Feed 的正文和摘要开头都插入一张特色图片的缩略图,如果想要更大尺寸的特色图片,可以修改代码中的 thumbnail 为其它的,比如 medium 中尺寸或者 large 大尺寸甚至是 full 全尺寸。还有就是最后的两段代码指的是给 Feed 内的文章摘要和正文添加特色图片,如果不想给摘要添加就去掉第一个 add_filter,不想给正文添加就去掉第二个。
PS:上述代码添加的特色图片对 Atom 格式和 RSS 格式都有效。
上面这个是比较通用的,另外一种是通过 RSS 2.0 额外的一个标签<media:content>,来设置订阅文章的特色图片,注意这个方法只适合 RSS 2.0,且在实际使用过程中可能会有一定的兼容问题,当然现在已经 2022 年了,兼容问题一般也不用太在意。
将下面这段代码复制到你主题的 function.php 文件里就可以了:
// Add namespace for media:image element used below add_filter( 'rss2_ns', function(){ echo 'xmlns:media="http://search.yahoo.com/mrss/"'; }); // insert the image object into the RSS item (see MB-191) add_action('rss2_item', function(){ global $post; if (has_post_thumbnail($post->ID)){ $thumbnail_ID = get_post_thumbnail_id($post->ID); $thumbnail = wp_get_attachment_image_src($thumbnail_ID, 'medium'); if (is_array($thumbnail)) { echo '<media:content medium="image" url="' . $thumbnail[0] . '" width="' . $thumbnail[1] . '" height="' . $thumbnail[2] . '" />'; } } });
上面的代码不是我自己写的,来自 StackExchange 的好心网友 Vick,大家可以自己到这个问答链接里去看。还有别的实现方式(方法一的做法):https://wordpress.stackexchange.com/questions/159397/how-to-add-image-to-wordpress-rss-feed-with-no-plug-in
这里特别提醒一下,Vick 设置的输出特色图片尺寸大小为 medium,你可以自己修改上面那段代码里最后的’medium’来实现输出别的尺寸,如改为 large(不要随便写个名字,尺寸设定是 WordPress 多媒体设置里的那些名称):
$thumbnail = wp_get_attachment_image_src($thumbnail_ID, 'large');
PS:第二种方法的代码仅会影响到 RSS2 格式的 Feed 输出内容,由于一些历史原因 WordPress 是支持多种 Feed 格式的,最常用的就是 RSS2 了。默认的 WordPress Feed 地址为 example.com/feed,这个地址默认输出的便是 RSS2 格式的。
三、给 Feed 添加 WebSub/PubSubHubbub 支持
我相信知道 WebSub/PubSubHubbub(后面就用现如今的正式名称 WebSub 来说吧)的人肯定不多,作为既是一名博客博主又是一名普通订阅者的我来说,真心希望大家能了解一下这个东西。
WebSub 我自己理解就像是一个类似中继节点的存在,当你的博客有更新时,博客会告知这个中继节点你更新了文章,而在订阅用户那边,如果使用的 Feed 阅读器支持这项功能,那么他的阅读器就不用过一段时间就来拉取下你的 Feed 源以确保没错过更新内容,而是中继节点会主动推送通知给订阅者那边,告知订阅的博客已经更新了,然后阅读器才会来拉取更新内容。
这个功能的好处我个人认为有两点,一是可以及时的获得博客的内容更新信息,二也能一定程度上减轻 Feed 源站的压力,毕竟不用频繁的来拉取源站 Feed 了。不过嘛这个功能虽然是 W3C 的推荐标准,但因为现在 Feed 本身不像以前那么流行了所以也不是什么热门的东西,我就发现我自己订阅的很多博客都是没有支持的,我的博客24点半支持不过订阅的人也基本没有就是了。_(:з)∠)_
废话不多说了,还是跟大家说说怎么让 WordPress 用上吧,目前我只找到了两个插件,可以让 WordPress 支持,用起来也没有什么难度,给大家推荐一下吧,一个就叫 WebSub/PubSubHubbub,另外一个有官方背景,不过长久没更新了,因为也不是什么特别需要更新的功能所以目测最新版还是能使用的,叫 PuSHPress。
这两个插件有一点不同的地方,PuSHPress 这个看说明是让 WordPress 本身来当中继的,所以不需要依赖其它第三方的服务直接安装就可以使用了。而 WebSub/PubSubHubbub 自带有第三方的中继可以使用,也可以手动添加自己的中继,功能上来说要稍微强一些。
嘛,更具体的大家感兴趣自己安装上试试就知道了,两个的功能都很简单应该也不存在什么使用障碍。
结束
暂时就给大家介绍这三种优化小技巧了,其实真要说起来并不是什么特别重大的改变,但我觉得确实能提高用户体验,建议大家还是弄一弄呀。当然了,针对文章加入特色图片这个,如果你是网站主不介意的话,其实只需要选择全文输出订阅源就没问题了的。