WordPress RSS 排除特定分类 & 推送旧文更新

WordPress RSS 排除特定分类 & 推送旧文更新

文章目录
文章目录
  1. 1. 在 WordPress RSS 中排除特定分类文章
  2. 2. WordPress 特定文章发布时不推送到 RSS
  3. 3. 特定旧文章更新时再次推送到 RSS

最近 Kevin's Space 被我折腾的挺凶,已经逐步从轻量级个人博客慢慢变化成综合性网站了。当然啦,网站内容方向和之前的并没有变化,只是数量上可能更多更细了,且难免会有一些转载的或者大多数博友不那么感兴趣的内容。因此我需要在 RSS 中进行一定程度的屏蔽,可能会是整个目录,亦有可能是某些特定文章。

同时呢,还有一些我认为有价值的文章我会反复更新,我可能也会去再次推送 RSS 给订阅者。以下是我对这些操作的简单记录,您各位老鸟做个参考。

1. 在 WordPress RSS 中排除特定分类文章

因为考虑到 Kevin's 有不少 RSS 订阅者,但同时呢我这又要更新不少订阅用户不喜欢看的内容,所以要在 WordPress 的 RSS 中隐藏特定分类的发布。如此便需要对 functions.php 文件进行一些修改以筛选 RSS 的输出内容。这是一个基本的步骤描述:

  1. 打开您的 WordPress 主题文件夹,找到并编辑 functions.php 文件。
  2. 选择一个对应的隐藏分类的 id。
  3. 在 functions.php 文件中,加入以下的 PHP 代码:
function myFilter($query) {
    if ($query->is_feed) {
        $query->set('cat','-5'); // 这里的 -5 应当替换为您想隐藏的分类 ID 的负值
    }
    return $query;
}
add_filter('pre_get_posts','myFilter');

这段代码会检查是否在生成 RSS 内容,如果是,它将从结果中排除指定的分类。

  1. 保存文件,并上传至服务器。

现在,当 RSS 被生成时,特定的分类将被排除。这里需要注意,被排除的分类其 'id' 前是负号,5 是指你希望隐藏的分类的 ID,该分类 ID 通过点击“编辑分类”在浏览器左下角看。

切记,在任何时候编辑代码,都应该备份您的 functions.php 文件,以防止误操作导致的网站无法访问。

2. WordPress 特定文章发布时不推送到 RSS

我是通过增加一个自定义字段,同时绑定了一个小函数来实现的。同样的,首先将以下代码加入到主题的functions.php中,然后在编辑文章时增加一个自定义字段,如下图:

// 添加 exclude_from_rss 字段从 RSS 中排除特定文章
function exclude_posts_from_rss($query) {
    if ($query->is_feed && !is_admin()) {
        $meta_query = array( // 存在本字段则排除
            array(
                'key'     => 'exclude_from_rss',
                'compare' => 'NOT EXISTS'
            )
        );
        $query->set('meta_query', $meta_query);
    }
}
add_action('pre_get_posts', 'exclude_posts_from_rss');

3. 特定旧文章更新时再次推送到 RSS

如何特定旧文章更新时强制推送到 RSS?除了修改文章日期、安装相关插件如 RSS Includes Pages、Republish Old Posts 以外,咱们仍然通过增加一段小的代码实现。同样是编辑functions.php文件,添加如下代码:

function force_rss_update_on_publish($post_id) {
    // 检查文章是否被更新
    if (get_post_type($post_id) != 'post') {
        return;
    }

    // 获取文章对象
    $post = get_post($post_id);

    // 检查是否是你需要推送到 RSS 的特定旧文章
    if (in_array($post->ID, array(123, 456, 789))) { // 替换为特定文章的 ID
        // 更新文章的发布日期(强制推送到 RSS)
        $current_time = current_time('mysql');
        wp_update_post(array(
            'ID' => $post_id,
            'post_date' => $current_time,
            'post_date_gmt' => get_gmt_from_date($current_time)
        ));
    }
}

add_action('save_post', 'force_rss_update_on_publish');

文章的 ID 可以通过查看文章的 URL 来获得。例如,编辑文章时,URL 可能类似于 wp-admin/post.php?post=123&action=edit,其中 123 就是文章 ID。该方法仅会更新选定的文章,而不会影响所有文章的发布时间。

1920 1280 Kevin's
「WordPress RSS 排除特定分类 & 推送旧文更新」有 16 条评论
  • 酷口家数字花园
    12/15/2024 at 17:43 回复

    真想用,就用了你的代码,谢谢啊

  • 的头像
    皇家元林
    11/09/2024 at 19:09 回复

    这个思路很好。不过我不想让人看到的文章,直接不展示。

    • 的头像
      Kevin
      12/01/2024 at 00:28 回复

      嗯。倒是我的内容可能有些不是纯原创的,所以就不推送干扰视听了

  • 的头像
    Kevin
    11/08/2024 at 23:13 回复

    我自己测试一下表情符号。
    ????
    ?
    ?❤️

  • 白熊阿丸
    11/08/2024 at 20:48 回复

    好细致啊

    • 的头像
      Kevin
      11/09/2024 at 00:43 回复

      瞎折腾,我打算抄一下你侧边栏的样式,把我左边这个目录的按钮换掉,现在这个有点儿太扎眼了

  • 的头像
    acevs
    11/08/2024 at 15:22 回复

    开始信息路由,开始有点算法推荐的意思了。嘿嘿。

    • 的头像
      Kevin
      12/01/2024 at 00:28 回复

      我是怕我垃圾文章太多了……现在还没开始

  • 的头像
    obaby
    11/08/2024 at 10:50 回复

    技能+1

  • Dabenshi
    11/08/2024 at 09:41 回复

    分类推送、订阅?想法不错啊

  • 2broear
    11/08/2024 at 09:31 回复

    这功能以前我集成到主题过,直接把分类列出来放到控件勾选~

    • 的头像
      Kevin
      12/01/2024 at 00:25 回复

      嗯,无疑是更好的办法~不过代码量似乎更多了哈哈哈

  • 的头像
    段先森
    11/07/2024 at 23:30 回复

    学到了新技能

    • 的头像
      Kevin
      12/01/2024 at 00:25 回复

      我从你那儿学的更多。
      无非瞎折腾而已,

  • S
    11/07/2024 at 21:52 回复

    辛苦了
    不过其实没什么关系
    网友看不看都可以的

发表评论

请输入关键词…