去掉WordPress里多余的rss/feed链接的技巧

我非常喜欢Wordpress,它给了程序员极度的自由发挥空间。其中“固定链接设置(permalink)”的用法就是代表,它的用法非常的灵活,就在这几天,我在开发一个Wordpress时,将文章页面的固定链接格式设定成了http://www.webhek.com/%postname%.html,这样一来,所有文章页的地址也就变成了http://www.webhek.com/sample-page.html这个样子。这样做的好处是容易静态化,优化网站的速度,也容易移植。但就当我完成了这些设定后,在浏览生成的页面的源代码时,发现了这样的代码:

<link rel="alternate" type="application/rss+xml" title="Webhek WEB骇客 » Feed" href="http://www.webhek.com/feed" />
<link rel="alternate" type="application/rss+xml" title="Webhek WEB骇客 » Comments Feed" href="http://www.webhek.com/comments/feed" />
<link rel="alternate" type="application/rss+xml" title="Webhek WEB骇客 » 去掉Wordpress里多余的rss/feed链接的技巧 Comments Feed" href="http://www.webhek.com/proxy.html/feed" />
	

feed链接,也就是RSS输出连接。我发现这第三链接看起来很不协调,不是吗?../proxy.html/feed.html地址后面怎么还跟有/feed?太难看了。一定要把它去掉。

于是我研究了一下Wordprss的feed机制。

WordPress里的feed主要有三类:

  1. 主内容feed(包括文章、页面等。)
  2. 主评论feed(包括网站上的所有评论)
  3. 单篇文章的评论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里多余的rss/feed链接的技巧”

发表评论

电子邮件地址不会被公开。 必填项已用*标注


京ICP备12002735号