sep.cc 如涉及侵权内容,请联系 [email protected]

「备份」彻底关闭 WordPress RSS feed

WordPress默认开启了feed功能,可以方便RSS阅读器进行订阅,让读者及时收到博客的更新信息。但有些博客基本没有人订阅,却有一堆机器人来采集博客的feed,方便了别人复制你的文章不说,还造成了不必要的资源消耗。

阻止采集feed的方式很多,比如feed中只输出文章摘要,而不输出全文,这个在WordPress后台 - 设置 - 阅读中就可以设置。但是出于某些目的,并不完全是为了防采集,不想开放博客的feed功能,该怎么设置呢?

简单搜索了一下,发现网上都是下面这个方法,直接在主题的functions.php中加入下面的代码:

function disable_all_feeds() {
   wp_die( '本站不提供feed' );
}
add_action('do_feed', 'disable_all_feeds', 1);
add_action('do_feed_rdf', 'disable_all_feeds', 1);
add_action('do_feed_rss', 'disable_all_feeds', 1);
add_action('do_feed_rss2', 'disable_all_feeds', 1);
add_action('do_feed_atom', 'disable_all_feeds', 1);

这种方法实现的效果是,当你打开博客的feed地址(如https://sep.cc/feed)时,页面会直接显示设置的错误信息,feed代码已经被删除,也就是说这个feed地址仍然存在,而不是打开这个链接直接显示404。

代码版

如何才能彻彻底底地禁用WordPress的feed功能,连渣都不剩呢?我们可以使用下面的代码:

// 删除 wp_head 输入到模板中的feed地址链接
add_action( 'wp_head', 'wpse33072_wp_head', 1 );
function wpse33072_wp_head() {
    remove_action( 'wp_head', 'feed_links', 2 );
    remove_action( 'wp_head', 'feed_links_extra', 3 );
}

foreach( array( 'rdf', 'rss', 'rss2', 'atom' ) as $feed ) {
    add_action( 'do_feed_' . $feed, 'wpse33072_remove_feeds', 1 );
}
unset( $feed );

// 当执行 do_feed action 时重定向到首页
function wpse33072_remove_feeds() {
    wp_redirect( home_url(), 302 );
    exit();
}

// 删除feed的重定向规则
add_action( 'init', 'wpse33072_kill_feed_endpoint', 99 );

function wpse33072_kill_feed_endpoint() {
    global $wp_rewrite;
    $wp_rewrite->feeds = array();
    
    // 运行一次后,记得删除下面的代码
    flush_rewrite_rules();
}

将以上php代码放入当前主题的functions.php中,然后登陆进入WordPress后台,随便打开一个页面,然后回来在主题的functions.php中将:flush_rewrite_rules(); 这行代码删除即可。

当然了,我还是开放了 RSS 订阅功能,欢迎大家订阅:https://sep.cc/feed

最后编辑:2023年10月11日 02:41:40「本站部分内容具有时效性,如遇失效请留言反馈」

转载声明:本站所有内容采用 CC BY-NC-SA 国际许可协议,转载请注明来源:Sep blog,谢谢!

版权声明:如文章内容涉及侵权,请联系 [email protected],待查证属实之后会立刻删除侵权内容。

评论 (4)
  1. avatar
    沙发
    威言威语 2023-12-15 09:03

    我就只开了摘要feed,这样订阅的人知道更新就行了。

  2. avatar
    板凳
    wu先生 2023-12-14 12:18

    能RSS订阅可加深好感度。

  3. avatar
    地板
    去年夏天 2023-10-16 00:59

    不太清楚站长的情况,我把UA含有Apache-HttpClient字段的访问拦击了,文章被爬虫自动抓取发布的情况就大幅好转了。