自定义WordPress RSS订阅输出

上个月就想搞这个东西的,但是一直以来都没有方法,也不知道怎么弄。具体的效果呢,像ipc.me等很多网站在GR里面观看的时候,只看到部分内容,需要点击链接到网站才可以看全文的。我很喜欢这种方式,可是不知道怎么弄。上个月问过露兜,露兜给了我方法,才得以开始这个工作。昨天终于弄成功了。哇咔咔。那么我现在写个教程贴,省的以后忘记了。

效果预览(在Google Reader中的效果):

自定义WordPress RSS订阅输出效果预览

 具体做法:

1、文章截断。

就是截取一部分文章内容,多余的用查看全文来显示。

我这里采用了两种方法,普通的方式是根据字数进行截断,使用函数mb_strimwidth($content , 0, 500, '.....')。

而我的比较特别,由于我写文章习惯自己加more标签,这样的话,首页只显示部分,more标签在数据库的具体表示<!--more-->,但是在文章中输出的时候是显示<span id=''more-文章ID"></span>,所以我通过mb_strstr($content,</span>,ture)进行截断。

但是还是有点问题的,如果more标签前面有个span标签的话,那就毁了,所以这个要养成个人习惯。另外,如果整篇文章没有span标签的话,那不就整篇输出了?所以我这边做了一个判断,如果内容包括span标签,那么就通过截取span前面的显示,如果内容不包括span标签的话,就通过一定字数进行截断,这里要注意的是图片也算字数的,具体字数的话不清楚了,可以自己在本地测试一下。

2、相关文章。

在RSS输出下下部显示几篇相关文章,我这边一共参考了三种方式。

露兜的《WordPress代码实现相关文章的几种方法》中第三种标签相关,SQL获取,我自己改进了下。首先如果没有相关标签的话,它会显示空白,应该加一个else的。另外,如果通过标签查找文章数目不够的话,从分类中获取文章补全个数,如果还是不足的话,我也没办法了,其实还是可以不全的,但是我没弄。

zww的《willin相关文章代码修正》中的通过文章标签获取相关文章,其中的the_title()函数放在我这边不知为何一直获取不了,改为get_the_title()才可以。他的理念是,先通过标签取相关文章,如果不够用分类中的文章补齐。

还有一种是随机生成相关文章的方式,我忘记出处了,汗 -_-!,但是放在我这边不成功,请自行测试一下。

其实,还有一种方式,就是用无觅相关文章的方式,但是我没事实验,有兴趣的可以自己试试看,爱软就是用的这种方式。

3、其他链接。

增加copyright和新浪微博链接等等,可根据自己喜好增加。

4、分享链接。

想用jiathis的代码实现分享的,但是用工具式、图标式都不成功,貌似RSS里面不能加载js的,只好用了按钮式,它是直接显示的图片和链接。

具体代码:

请将此代码加在主题的functions.php里面(加之前最好坐下备份),注意php标签的关闭。另外,在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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function feed_copyright($content) {
// http://www.ludou.org/how-to-generate-related-posts-in-wordpress.html
	global $post;
	global $wpdb;
	$related = '<ul id="tags_related">';
	// Laycher : Edit
	//如果有 more标签即span标签,那么就截断more以前的。如果没有,则通过字数截断
	if(strpos($content,'</span>') ){
		$content =  mb_strstr($content,'</span>',ture).'<p><a rel="bookmark" href="'.get_permalink().'" target="_blank" rel="nofollow">更多Read More...</a></p><hr />';
		//<span id="more-'^[1-9]\d*$'"></span>
	} else {
		$content =  mb_strimwidth($content , 0, 500, '.....').'<p><a rel="bookmark" href="'.get_permalink().'" target="_blank" rel="nofollow">更多Read More...</a></p><hr />';
	}
	$post_tags = wp_get_post_tags($post->ID);
	 // 通过修改数字 5,可修改你想要的文章数量
	$i = 5;
	if ($post_tags) {
		$tag_list = '';
		$tag_out = '';
		foreach ($post_tags as $tag)
		{
			  // 获取标签列表
			$tag_list .= $tag->term_id.',';
		}
	     $tag_list = substr($tag_list, 0, strlen($tag_list)-1);
 
		$related_posts = $wpdb->get_results("SELECT post_title, ID	FROM posts, term_relationships, term_taxonomy WHERE term_taxonomy.term_taxonomy_id = term_relationships.term_taxonomy_id	AND ID = object_id	AND taxonomy = 'post_tag' AND post_status = 'publish' AND post_type = 'post' AND term_id IN (" . $tag_list . ") AND ID != '" . $post->ID . "' ORDER BY RAND()	LIMIT'".$i."'");
 
		if ( $related_posts  ) {
			 foreach ($related_posts as $related_post) {
				 $related = $related.'<li><a href="'.get_permalink($related_post->ID).'" rel="bookmark" title="'.$related_post->post_title.'">'.$related_post->post_title.' </a></li>';
			}
		} else { 
				// Laycher:edit 如果没有这个标签的其他文章用同类别的文章代替,如果同类别的也没有,那么有多少显示多少,这里还要再优化的,有兴趣的可以继续写。
				$cats = ''; foreach ( get_the_category() as $cat ) $cats .= $cat->cat_ID . ',';
				$args = array(
				'category__in' => explode(',', $cats), 
				'post__not_in' => explode(',', $exclude_id),
				'caller_get_posts' => 1,
				'orderby' => 'comment_date',
				'posts_per_page' => $post_num - $i);
				query_posts($args);
				while( have_posts() ) { 
					the_post(); 
					$related=$related.'<li><a rel="bookmark" href="'.get_permalink().'" title="'.get_the_title(). '">'.get_the_title().'</a></li>';
				} wp_reset_query();
				//$related = $related.'<li>暂无相关文章</li>';
		 } 
	} else {
			$related = $related.'<li>暂无相关文章</li>';	
	}
	$related = '<br />Laycher 猜你还喜欢这些文章:'.$related.'</ul>';
	$about = '<hr />Copyright ©2010-2012 ¦ <a href="http://feed.feedsky.com/laycher" title="RSS订阅" target="_blank">RSS订阅</a> ¦ <a href="http://weibo.com/laycher" title="新浪微博" target="_blank">新浪微博</a> ¦<a  href="'.get_permalink().'" title="'.get_the_title().'" target="_blank">本文链接</a> ¦ <a  href="'.get_permalink().'#comments" title="'.get_the_title().'的评论" target="_blank">添加评论</a> ';
		$share = '<div class="jiathis_style">	<a href="http://www.jiathis.com/share?uid=1546294" class="jiathis jiathis_txt" target="_blank"><img src="http://v3.jiathis.com/code/images/btn/v1/jiathis1.gif" border="0" /></a>	<a class="jiathis_counter_style_margin:3px 0 0 2px"></a></div><script type="text/javascript">var jiathis_config = {data_track_clickback:true};</script><script type="text/javascript" src="http://v3.jiathis.com/code/jia.js?uid=1546294" charset="utf-8"></script>';
	return $content.$related.$about.$share;
}
add_filter ('the_excerpt_rss', 'feed_copyright');
add_filter('the_content_feed', 'feed_copyright');

方法二(可靠):

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//http://zww.me/archives/25353
function feed_copyright($content) {
	// Laycher : Edit
	//如果有 more标签即span标签,那么就截断more以前的。如果没有,则通过字数截断
	if(strpos($content,'</span>') ){
		$content =  mb_strstr($content,'</span>',ture).'<p><a rel="bookmark" href="'.get_permalink().'" target="_blank" rel="nofollow">[ 查看全文... Read More... ]</a></p><hr />';
	} else {
		$content =  mb_strimwidth($content , 0, 500, '.....').'<p><a rel="bookmark" href="'.get_permalink().'" target="_blank" rel="nofollow">[ 查看全文... Read More... ]</a></p><hr />';
	}
	$post_num = 5; // 數量設定.
	$exclude_id = $post->ID; // 單獨使用要開此行 //zww: edit
	$posttags = get_the_tags(); 
	$i = 0;
	$related = '<ul>';
	if ( $posttags ) {
		$tags = ''; foreach ( $posttags as $tag ) $tags .= $tag->term_id . ','; //zww: edit
		$args = array(
			'post_status' => 'publish',
			'tag__in' => explode(',', $tags), // 只選 tags 的文章. //zww: edit
			'post__not_in' => explode(',', $exclude_id), // 排除已出現過的文章.
			'caller_get_posts' => 1,
			'orderby' => 'comment_date', // 依評論日期排序.
			'posts_per_page' => $post_num
		);
		query_posts($args);
		while( have_posts() ) { 
				the_post();
				$related=$related.'<li><a rel="bookmark" href="'.get_permalink().'" title="'.get_the_title(). '">'.get_the_title().'</a></li>'; //laycher:edit
				$exclude_id .= ',' . $post->ID; 
				$i++;
		} wp_reset_query();
	}
	if ( $i < $post_num ) { // 當 tags 文章數量不足, 再取 category 補足.
		$cats = ''; foreach ( get_the_category() as $cat ) $cats .= $cat->cat_ID . ',';
		$args = array(
			'category__in' => explode(',', $cats), // 只選 category 的文章.
			'post__not_in' => explode(',', $exclude_id),
			'caller_get_posts' => 1,
			'orderby' => 'comment_date',
			'posts_per_page' => $post_num - $i
		);
		query_posts($args);
		while( have_posts() ) { 
			the_post(); 
			$related=$related.'<li><a rel="bookmark" href="'.get_permalink().'" title="'.get_the_title(). '">'.get_the_title().'</a></li>';//Laycher:edit
			$i++;
		} wp_reset_query();
	}
	if ( $i  == 0  )  $related = '<li>没有相关文章!</li>';
	// Laycher : edit
	$related = 'Laycher 猜你还喜欢这些文章:'.$related.'</ul>';
	$about = '<hr />Copyright ©2010-2012 ¦ <a href="http://feed.feedsky.com/laycher" title="RSS订阅" target="_blank">RSS订阅</a> ¦ <a href="http://weibo.com/laycher" title="新浪微博" target="_blank">新浪微博</a> ¦<a  href="'.get_permalink().'" title="'.get_the_title().'" target="_blank">本文链接</a> ¦ <a  href="'.get_permalink().'#comments" title="'.get_the_title().'的评论" target="_blank">添加评论</a> ';
	$share = '<div class="jiathis_style">	<a href="http://www.jiathis.com/share?uid=1546294" class="jiathis jiathis_txt" target="_blank"><img src="http://v3.jiathis.com/code/images/btn/v1/jiathis1.gif" border="0" /></a>	<a class="jiathis_counter_style_margin:3px 0 0 2px"></a></div><script type="text/javascript">var jiathis_config = {data_track_clickback:true};</script><script type="text/javascript" src="http://v3.jiathis.com/code/jia.js?uid=1546294" charset="utf-8"></script>';
	return $content.$related.$about.$share;
}
add_filter ('the_excerpt_rss', 'feed_copyright');
add_filter('the_content_feed', 'feed_copyright');

方法三(请测试后使用):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 随机方式,我这里不成功,希望你那可以成功
function feed_copyright($content) {
	$content =  mb_strimwidth($content , 0, 300, '.....').'<p><a rel="bookmark" href="'.get_permalink().'" target="_blank" rel="nofollow">更多Read More...</a></p><hr />';
	$related = '<ul>';
	$rand_posts = get_posts('numberposts=5&orderby=rand');
	foreach( $rand_posts as $post ):
		$related = $related.'<li><a href="'.get_permalink().'">'. get_the_title().'</a></li>';
	endforeach;
	$related = 'Laycher 猜你还喜欢这些文章:'.$related.'</ul>';
	$about = '<hr />Copyright ©2010-2012 ¦ <a href="http://feed.feedsky.com/laycher" title="RSS订阅" target="_blank">RSS订阅</a> ¦ <a href="http://weibo.com/laycher" title="新浪微博" target="_blank">新浪微博</a> ¦<a  href="'.get_permalink().'" title="'.get_the_title().'" target="_blank">本文链接</a> ¦ <a  href="'.get_permalink().'#comments" title="'.get_the_title().'的评论" target="_blank">添加评论</a> ';
	$share = '<div class="jiathis_style">	<a href="http://www.jiathis.com/share?uid=1546294" class="jiathis jiathis_txt" target="_blank"><img src="http://v3.jiathis.com/code/images/btn/v1/jiathis1.gif" border="0" /></a>	<a class="jiathis_counter_style_margin:3px 0 0 2px"></a></div><script type="text/javascript">var jiathis_config = {data_track_clickback:true};</script><script type="text/javascript" src="http://v3.jiathis.com/code/jia.js?uid=1546294" charset="utf-8"></script>';
	return $content.$related.$about.$share;
}
add_filter ('the_excerpt_rss', 'feed_copyright');
add_filter('the_content_feed', 'feed_copyright');

PS:如果RSS输出是乱码的话,我估计你的编码方式有问题,把functions.php文件用UTF-8的方式保存。如果还不行的话,在header.php中加上

header("Content-Type:text/html;charset=gb2312");

如果还有什么疑问的话,可以共同讨论进步,谢谢。~。~

>> 若为原创,转载请注明: 转载自Laycher's Blog

>> 本文链接地址: 自定义WordPress RSS订阅输出

>> 订阅本站: http://feed.feedsky.com/laycher



无觅相关文章插件,快速提升流量