去掉WordPress里多余的rss/feed链接的技巧
我非常喜欢Wordpress,它给了程序员极度的自由发挥空间。其中“固定链接设置(permalink)”的用法就是代表,它的用法非常的灵活,就在这几天,我在开发一个Wordpress时,将文章页面的固定链接格式设定成了https://www.webhek.com/%postname%.html
,这样一来,所有文章页的地址也就变成了https://www.webhek.com/sample-page.html
这个样子。这样做的好处是容易静态化,优化网站的速度,也容易移植。但就当我完成了这些设定后,在浏览生成的页面的源代码时,发现了这样的代码:
<link rel="alternate" type="application/rss+xml" title="Webhek WEB骇客 » Feed" href="https://www.webhek.com/post/feed/" /> <link rel="alternate" type="application/rss+xml" title="Webhek WEB骇客 » Comments Feed" href="https://www.webhek.com/comments/feed" /> <link rel="alternate" type="application/rss+xml" title="Webhek WEB骇客 » 去掉Wordpress里多余的rss/feed链接的技巧 Comments Feed" href="https://www.webhek.com/proxy.html/feed" />
feed链接,也就是RSS输出连接。我发现这第三链接看起来很不协调,不是吗?../proxy.html/feed
,.html
地址后面怎么还跟有/feed
?太难看了。一定要把它去掉。
于是我研究了一下Wordprss的feed机制。
WordPress里的feed主要有三类:
- 主内容feed(包括文章、页面等。)
- 主评论feed(包括网站上的所有评论)
- 单篇文章的评论Feed
这些feed的链接都会输出到Wordpress页面的<head>
里。就像上面我展示的输出代码里的一样。但很显然,既然有了所有评论的feed。d单个文章的评论feed似乎有些多余。幸运的是,有很多方式可以禁止这些链接的出现,主要的手段就是把几个action/filter
代码放置在functions.php
里:
// 禁止单个文章的评论feed输出 function disablePostCommentsFeedLink($for_comments) { return; } add_filter('post_comments_feed_link','disablePostCommentsFeedLink');
有了上面这段代码,单个文章的评论feed就再也不会出现在<head>
区域里了,但实际它只是不出现连接,实际的feed还是存在的。我相信肯定有一种方法能实际的组织它的存在,但我没有去继续研究。希望有人能告诉我。
上面的代码只是除去了单个文章的评论feed输出,可知Wordpress里除了主文章feed和主评论feed外,还有其它很多feed,想一并除去它们,你可以这样做:
// 去掉head了其它多余的feed remove_action('wp_head','feed_links_extra', 3);
一旦你将这段代码放到functions.php
里,它将禁止所有的其它feed输出,包括单个评论feed, 归档(archive) feeds, 标签(tag) feeds, 分类目录(category) feeds等等。
现在就剩下主文章feed和主评论feed了,如果你打算把它们也去掉,使用下面的代码:
remove_action('wp_head','feed_links', 2);
当组合上面的两个remove_action
指令后,你的页面<head>
里的feed链接将一个都不存在了,所以,想清楚了再用。
很多人删去了Wordpress在<head>
生成的feed链接,是因为他们给网站配备了独立的RSS feed地址。比如注册一个子域名做RSS feed地址,或者有人将住feed分成了几个子feed地址。我们可以用下面的方法修改调整feed链接的输出,将连接地址更改成你想要的:
// 首先移除多余的feed链接 remove_action( 'wp_head','feed_links', 2 ); remove_action( 'wp_head','feed_links_extra', 3 ); // 然后修改主feed链接 add_action( 'wp_head', 'reinsert_rss_feed', 1 ); // 修改成自定义的feed地址 function reinsert_rss_feed() { echo '<link rel="alternate" type="application/rss+xml" title="' . get_bloginfo('sitename') . ' » RSS Feed" href="' . get_bloginfo('rss2_url') . '" />'; } //
恭喜,经过这样的修改,你的wordpress里feed链接就完全自定义了。
WordPress用起来的确非常的灵活与强大.