WordPress 解决 RSS 异常问题的记录

很多小问题可以通过 Code Snippets 插件来解决

第一轮

  1. 首页缺少 RSS 自动发现链接

  2. Feed 里有两个内容警告
    W3C Validator 认为 RSS 有效,但提示:

  • 文章标题 两款think鼠标测评-thinkplusM30&thinkplusT60X 里的 & 容易被当成 HTML/entity。建议标题里把 & 改成 和、+ 或空格。
  • 文章 2025 Air手机进店摸摸有感... 的正文里有 (<6mm),在 content:encoded 的 HTML 里 <6mm 会被解析成非法标签。建议改成 小于 6mm 或 <6mm。
  1. 订阅地址建议直接用 /feed
    https://benli06.site/rss 能用,但它是跳转地址。更标准的 WordPress RSS 2.0 地址是:

解决方法

  1. 在 Code Snippets 里 add new script, 标题可填 Enable RSS autodiscovery
add_action('after_setup_theme', function () {
    add_theme_support('automatic-feed-links');
});

add_action('wp_head', function () {
    echo '<link rel="alternate" type="application/rss+xml" title="' . esc_attr(get_bloginfo('name')) . ' RSS Feed" href="' . esc_url(get_feed_link('rss2')) . "\" />\n";
}, 2);

运行范围选择 Run snippet everywhere 即可。

  1. 手动修改文章内容。
  2. 在阅读器里填 /feed 链接。

第二轮

问题2
问题2

这是因为部分新式的 RSS feed 将文章发布时间戳的 GMT 改为了 +0000

我们需要做的是替换 +0000GMT ,以获得更好的兼容性。

在 Code Snippets 里新建脚本,标题随意。

add_action('send_headers', function () {
    if (!is_feed()) {
        return;
    }

    $last_modified = get_lastpostmodified('GMT');
    $timestamp = $last_modified ? strtotime($last_modified . ' GMT') : time();

    header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $timestamp) . ' GMT', true);
}, 999);

add_action('template_redirect', function () {
    if (!is_feed()) {
        return;
    }

    ob_start(function ($buffer) {
        return preg_replace_callback(
            '#<(lastBuildDate|pubDate)>([A-Z][a-z]{2}, \d{2} [A-Z][a-z]{2} \d{4} \d{2}:\d{2}:\d{2}) \+0000</\1>#',
            function ($matches) {
                return '<' . $matches[1] . '>' . $matches[2] . ' GMT</' . $matches[1] . '>';
            },
            $buffer
        );
    });
}, 0);

Q: 有什么副作用

A: 副作用很小,但这不是“长期优雅解”。

把 RSS 里的 +0000 改成 GMT 本身没问题:

Sun, 12 Apr 2026 14:31:17 +0000 Sun, 12 Apr 2026 14:31:17 GMT 

这两个都表示 UTC 时间。大多数 RSS 阅读器都能识别,GMT 反而更兼容一些老旧或严格的解析器。所以对订阅内容、排序、发布时间基本没有影响。

可能的副作用主要是:

  1. 这是输出层替换
    它会在 WordPress 输出 feed 时对 XML 文本做一次正则替换。只要 snippet 只在 is_feed() 下运行,影响范围就限制在 RSS/Atom feed,不会影响网页正文。
  2. 如果以后某个插件也修改 feed 输出
    可能会和缓存插件、Feed 插件、SEO 插件的 feed 处理叠加。但这个替换很窄,只处理 ,风险不大。
  3. 如果 feed 不是 UTC
    这个写法只替换 +0000。你的站点现在输出的是 +0000,所以没问题。如果以后 WordPress 改成 +0800,这段代码不会替换,也不会误改时间。

第三轮

Q: 为什么 RSS 里只有 10 篇文章?

A:

wp-panel
wp-panel

在 WordPress 仪表盘,首页 > 设置 > 阅读,这里调整 Feed 中显示最多的文章量。

Q: 为什么不显示全文?

A:不显示全文有多种可能情况。一种是设置了只显示摘要,一种是全文被截断(一般是 SEO 插件导致的)。

对于第一种,在 WordPress 仪表盘,首页 > 设置 > 阅读,这里可以设置对 Feed 中的文章,包含 全文 或 摘要。

对于后一种,打开你的 SEO 插件设置,搜索 订阅供稿设置 或 feed,取消勾选 将提要条目转换为摘录? , 另外,最好开启 允许索引提要吗?.

第四轮

Q: 为什么出现format-exception

format-exception
format-exception

可以给 AI 检查 feed 内容。比如我是有一个笔误,在markdown格式中,在 ![alt](link) 中的 alt 填作了一个链接。

第五轮

Q: 现在,有的rss阅读器无法从我的链接抓取feed,思考原因

A: 原因基本确定:当前的 https://benli06.site/feed 不是合法 XML,所以有些 RSS 阅读器抓不到。

我刚检查到:

  • /feed 返回 200 OK
  • Content-Type 是正确的:application/rss+xml
  • 首页也已经有 RSS 自动发现链接
  • 但 W3C Feed Validator 和本地 XML 解析都报错:
XML parsing error: not well-formed (invalid token)
invalid character: 0x0B

出问题文章是:

2026上海AWE家电展第一天参观感受
https://benli06.site/archives/359

里面有 4 个非法控制字符 0x0B,也就是垂直制表符。它看起来像空白/换行,但在 XML 1.0 里非法。严格的 RSS 阅读器会直接拒绝整个 feed;宽松的阅读器可能会跳过,所以你看到“有的能抓,有的不能”。

你可以这样修:

  1. 去 WordPress 后台编辑这篇文章:archives/359
  2. 在这些位置附近重新删掉并手打换行:
    • “下血本了.” 后面
    • “没松下和LG的舒服.” 后面
    • 其他从外部复制粘贴过来的异常空白处
  3. 保存文章
  4. 清 Cloudflare 缓存:
https://benli06.site/feed
https://benli06.site/rss

更稳的做法是在 Code Snippets 里给 feed 输出加一道清理非法 XML 字符的过滤:

add_action('template_redirect', function () {
    if (!is_feed()) {
        return;
    }

    ob_start(function ($buffer) {
        return preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F]/', '', $buffer);
    });
}, 9999);

这个只作用于 feed,会移除 XML 1.0 不允许的控制字符。修完后用这个验证:

https://validator.w3.org/feed/check.cgi?url=https%3A%2F%2Fbenli06.site%2Ffeed

只要 validator 不再报 XML parsing error,严格型阅读器就应该能正常抓取。

Views: 7

WordPress 解决 RSS 异常问题的记录 by benli06,转载请注明出处.
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇