WordPress默认开启了feed功能,好处不言而喻,可以方便RSS阅读器进行订阅,让读者及时收到博客的更新信息。但有些博客基本没有人订阅,却有一堆机器人来采集博客的feed,方便了别人复制你的文章不说,还造成了不必要的资源消耗。
阻止采集feed的方式很多,比如feed中只输出文章摘要,而不输出全文,这个在WordPress后台 – 设置 – 阅读中就可以设置。但是我出于某些目的,并不完全是为了防采集,不想开放博客的feed功能,该怎么设置呢?
简单搜索了一下,发现网上都是下面这个方法,直接在主题的functions.php中加入下面的代码:
1 2 3 4 5 6 7 8 |
<span class="token keyword">function</span> <span class="token function">disable_all_feeds</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">wp_die</span><span class="token punctuation">(</span> <span class="token string">'本站不提供feed'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token function">add_action</span><span class="token punctuation">(</span><span class="token string">'do_feed'</span><span class="token punctuation">,</span> <span class="token string">'disable_all_feeds'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">add_action</span><span class="token punctuation">(</span><span class="token string">'do_feed_rdf'</span><span class="token punctuation">,</span> <span class="token string">'disable_all_feeds'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">add_action</span><span class="token punctuation">(</span><span class="token string">'do_feed_rss'</span><span class="token punctuation">,</span> <span class="token string">'disable_all_feeds'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">add_action</span><span class="token punctuation">(</span><span class="token string">'do_feed_rss2'</span><span class="token punctuation">,</span> <span class="token string">'disable_all_feeds'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">add_action</span><span class="token punctuation">(</span><span class="token string">'do_feed_atom'</span><span class="token punctuation">,</span> <span class="token string">'disable_all_feeds'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
这种方法实现的效果是,当你打开博客的feed地址(如http://www.tmavip.com/feed
)时,页面会直接显示设置的错误信息,feed代码已经被删除,也就是说这个feed地址仍然存在,而不是打开这个链接直接显示404。
代码版
如何才能彻彻底底地禁用WordPress的feed功能,连渣都不剩呢?我们可以使用下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<span class="token comment" spellcheck="true">// 删除 wp_head 输入到模板中的feed地址链接</span> <span class="token function">add_action</span><span class="token punctuation">(</span> <span class="token string">'wp_head'</span><span class="token punctuation">,</span> <span class="token string">'wpse33072_wp_head'</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">function</span> <span class="token function">wpse33072_wp_head</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">remove_action</span><span class="token punctuation">(</span> <span class="token string">'wp_head'</span><span class="token punctuation">,</span> <span class="token string">'feed_links'</span><span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">remove_action</span><span class="token punctuation">(</span> <span class="token string">'wp_head'</span><span class="token punctuation">,</span> <span class="token string">'feed_links_extra'</span><span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span> <span class="token keyword">array</span><span class="token punctuation">(</span> <span class="token string">'rdf'</span><span class="token punctuation">,</span> <span class="token string">'rss'</span><span class="token punctuation">,</span> <span class="token string">'rss2'</span><span class="token punctuation">,</span> <span class="token string">'atom'</span> <span class="token punctuation">)</span> <span class="token keyword">as</span> <span class="token variable">$feed</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">add_action</span><span class="token punctuation">(</span> <span class="token string">'do_feed_'</span> <span class="token punctuation">.</span> <span class="token variable">$feed</span><span class="token punctuation">,</span> <span class="token string">'wpse33072_remove_feeds'</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token function">unset</span><span class="token punctuation">(</span> <span class="token variable">$feed</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// 当执行 do_feed action 时重定向到首页</span> <span class="token keyword">function</span> <span class="token function">wpse33072_remove_feeds</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">wp_redirect</span><span class="token punctuation">(</span> <span class="token function">home_url</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">302</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">exit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment" spellcheck="true">// 删除feed的重定向规则</span> <span class="token function">add_action</span><span class="token punctuation">(</span> <span class="token string">'init'</span><span class="token punctuation">,</span> <span class="token string">'wpse33072_kill_feed_endpoint'</span><span class="token punctuation">,</span> <span class="token number">99</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">function</span> <span class="token function">wpse33072_kill_feed_endpoint</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">global</span> <span class="token variable">$wp_rewrite</span><span class="token punctuation">;</span> <span class="token variable">$wp_rewrite</span><span class="token operator">-</span><span class="token operator">></span><span class="token property">feeds</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// 运行一次后,记得删除下面的代码</span> <span class="token function">flush_rewrite_rules</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
将以上php代码放入当前主题的functions.php中,然后登陆进入WordPress后台,随便打开一个页面,然后回来在主题的functions.php中将:flush_rewrite_rules();
这行代码删除即可。
插件版
下载后解压,将remove-feeds目录通过ftp上传到网站的wp-content/plugins目录,然后在WordPress后台 – 插件中,启用这个插件即可: Remove All feeds [for WPSE33072]
讲在最后
本文只是提供了WordPress禁用feed的方法,并不说明本站已经禁用了feed,本站的feed还是正常提供的,欢迎大家订阅!