首页 > 新闻资讯 > 玩转WordPress RSS Feed

玩转WordPress RSS Feed

23条评论
标签:
更多

你是否有想过对RSS feed做些改善? 比如让它显示更多(或更少)内容?或者在文章的结尾添加一些其他具体信息。这篇文章将告诉你如何实现对RSS Feed的掌控,包括以下内容:

  • 如何把文章和页面都输入RSS feed。
  • 如何在feed中添加缩略图
  • 如何排除某个标签的文章。
  • 设置feed显示的文章数量
  • 如何只显示某个分类的文章。
  • 如何在每篇文章结尾添加内容(如,链接到你的最近精华文章)。

所有这一切都只需要改动主题里的functions.php文件,如果你的主题里没有这个文件,就先创建一个并以此为命名。

将页面也纳入RSS Feed输出的对象

当WordPress搜索posts时,我们给它添加一个过滤器,通过过滤器会检测post是否需要通过RSS feed 输出,如果有需要,那么它就会调整查询来实现:

function feedFilter($query) {  	
		if ($query->is_feed) {  		
		$query->set('post_type','any');  		}  	
		return $query;  
		}  
		add_filter('pre_get_posts','feedFilter');

如果你只想显示页面,那么可以将上面的单词 ‘any’ 改成 ‘page’ (或者你创建的其他任何自定义的内容类型)。

可能你还需要更精确点,只显示最顶层的页面。这种情况下,你可以在上面的代码里在添加上一行代码,即:

function feedFilter($query) {  	
			if ($query->is_feed) {  		
			$query->set('post_type','any');  		
			$query->set('post_parent','0');  		
			}  	
			return $query;  }  
			add_filter('pre_get_posts','feedFilter');

在RSS Feed中添加缩略图

这次的过程稍微有点不同。虽然都需要给查询添加一个过滤器来检查此页面是否需要输出RSS feed,不过在这里不是对查询进行调整, 而是 the_content 添加了另外的过滤器:

function feedFilter($query) {  	
				if ($query->is_feed) {  		
				add_filter('the_content', 'feedContentFilter');  		
				}  
				return $query;  
				}  add_filter('pre_get_posts','feedFilter');    
				function feedContentFilter($content) {  	
				$thumbId = get_post_thumbnail_id();     	
				if($thumbId) {  		
				$img = wp_get_attachment_image_src($thumbId);  		
				$image = '<img align="left" src="'. $img[0] .'" alt="" width="'. $img[1] .'" height="'. $img[2] .'" />';  		
				echo $image;  
					}     	
				return $content;  }

这里使用了稍微有点迂回的方式来获得缩略图,才可以添加align="left" 部分。很多feed阅读器都会将内联CSS去除,不过使用旧的align 属性是没有什么问题的。当然,如果你不想要图片左对齐,可以将 align="left"去掉。

如何排除某个标签的文章在RSS feed中输出

在这里是使用‘set’来调整查询对象。首先需要知道该标签的ID号,登录后台进入文章 > 文章标签,然后找出你需要排除的标签,并点击。在浏览器地址栏里你就可以看到URL地址有一部分看起来像这样:&tag_ID=29

假设该标签的ID号是29,那么通过下面的代码就可以将这个ID的标签排除在外了。

function feedFilter($query) {                   
if ($query->is_feed) {                   
$query->set('posts_per_page','20');
}                 
return $query;                   
}                     
add_filter('pre_get_posts','feedFilter');

只显示某个分类的文章

大多数普通博客是不会这样做的, 但是如果你把WordPress当作一个内容管理系统来使用的话,可能你就会希望RSS feed只发布来自“博客”类别的文章,在这种情况下,你可以使用下面的代码:

function feedFilter($query) {  	
					   if ($query->is_feed) {  		
					   $query->set('category_name', 'blog');  	
					   }     	
					   return $query;  }  
					   add_filter('pre_get_posts','feedFilter');

或者说你可以通过分类的ID号来排除,假设把第三行的代码换成:

$query->set('cat', '-45');

45是指类别的ID号(注意,前面必须加上一个减号,否则结果就恰恰相反,变成只显示分类ID号为45的文章。)

在所有RSS内容的结尾添加内容

可能出于很多原因,你会想在RSS内容结尾添加一些其他内容。

首先从最简单的开始,假设我们需要添加下面的内容:

"感谢您的阅读,欢迎访问WordPress啦了解更多的WordPress资讯!"

function feedFilter($query) {  
	if ($query->is_feed) {  	
	add_filter('the_content','feedContentFilter');  
	} 
 	return $query;  }  
add_filter('pre_get_posts','feedFilter');     
function feedContentFilter($content) {  
	$content .= '<p>感谢您的阅读,欢迎访问<a href="'. get_bloginfo('url地址') .'">'. get_bloginfo('博客名称') .'</a> 了解更多的WordPress资讯!</p>';     
	return $content;  }

下面来看一下稍微酷一点的招式,假设在主页有一个特色内容滑块或者在侧边栏有一个精华文章,并且已经将哪里的文章内容标签为“featured(精华)”

你想在RSS feed中,添加如下的内容:

"请不要错过我们最新的精选文章:文章标题"

这次在feedContentFIlter函数里运行查询来获取被标记为“featured(精华)”的文章,然后使用内容对象来返回并插入文章标题和地址。

function feedFilter($query) {  
	if ($query->is_feed) {  	
	add_filter('the_content','feedContentFilter');  
	}
 	return $query;  }
  add_filter('pre_get_posts','feedFilter');     
function feedContentFilter($content) {     	$args = array(  	    'numberposts' => 1,  	    'tag' => 'featured'  	);  	$posts = get_posts($args);     	if($posts) {  	    foreach($posts as $post) {  	      
  $content .= '<p>请不要错过我们最新的精选文章: <a href="'. get_permalink($post->ID) .'">'. $post->post_title .'</a>!</p>';  	    }  	}    
 	return $content;  }

原文

* 版权声明:作者WordPress啦! 转载请注明出处。

#1
作记号有需再用
#2
学习啦,wordpress真的很牛。
#3
博主真是的 到现在还不全文输出
#4
全文输出吧
#5
呵呵。楼主真好。
#6
很实用。
#7
每次来都有新知识啊,不错
#8
很好,现在一朋友在用这个 推荐他来博主这里学习下 我用的是ZB 嘿嘿
#9
很好的一篇文章!
#10
我有阵子没关注RSS的订阅情况了,一直都是那固定的五六十个人。
#11
你这篇文章好专业喔。
#12
不错,蛮实用的!
#13
不错,很专业
#14
学习下怎么用
#15
可以当成RSS全攻略了
#16
谢谢分享哦!
#17
原来这个功能这么牛啊
#18
现在一朋友在用这个 推荐他来博主这里学习下
#19
找到答案了,正想将一个分类排除呢
#20
rss原来可以做这么多啊。
#21
好东西,不用在麻烦了
#22
这个有用 MARK