首先,本篇参考了知更鸟的文章《调用其它站点文章显示在自己的WordPress网站上》。原文如下:
如果在自己WordPress网站上显示其它站点的最新文章是不是很好玩,利用wordpress2.8以上版本新增加的一个fetch_feed函数就可轻松实现.
在添加以下代码之前,应首先在网站根目录新建一个名为 cache 权限为777 的文件夹,作为缓存文件夹.然后在模板(一般是侧边栏sidebar.php模板)适当位置加入以下代码:
<?php require_once (ABSPATH . WPINC . '/class-feed.php'); $feed = new SimplePie(); $feed->set_feed_url(array('http://zmingcx.com/feed', 'http://themes.wopus.org/feed')); //可以添加多个站点feed地址 $feed->enable_order_by_date(false); $feed->set_cache_location($_SERVER['DOCUMENT_ROOT'] . '/cache');//缓存文件夹 $feed->init(); $feed->handle_content_type(); ?> <ul> <?php foreach ($feed->get_items(0,10) as$item)://10是文章篇数 ?> <li> <a href="<?php echo $item->get_permalink()?>" rel="bookmark" title="阅读> <?php echo $item->get_title()?>"><?php echo$item->get_title()?></a><!-- 文章标题 --> <br/><?php echosubstr($item->get_description(),0,180);?><!-- 文章内容 --> <?php endforeach; ?> </li> </ul>为了方便使用 HotNewspro2.23 版主题的朋友实现此功能,已作好替换文件,供大家下载:
替换文件: feed.zip (1.7 KB, 146 次下载)
将下载的文件分别上传替换原主题目录中,并在style.css中加入:
.rss ul li { width:209px; white-space:nowrap; overflow:hidden; line-height:23px; }注:以上样式也可以不加,使用前可以打开rss.php修改标题及替换调用的feed地址,具体效果可以看本站侧边的"最新主题下载"
但是在实际应用中发现,样式还可以更美观,另外其代码主旨放到侧边栏也不是经常用的,更多的情况应该是放在某个页面或者某篇文章处,因此修改如下:
1、首先在网站根目录新建一个名为 cache 权限为777 的文件夹,作为缓存文件夹。
2、创建模版,可以利用知更鸟HotNewsPro主题文件夹下的几个模版更改。在模版中加入知更鸟上面的代码,但要订正两个地方:
//此处把知更鸟简单的substr函数改为自定义的可以识别中文字的函数cut_strr,就不会乱码了。 function cut_strr($str,$len) { if (strlen($str) <= $len) return $str; $n = 0; $tempstr = ''; for ($i=0; $i<$len; $i++) { if (ord(substr($str,$n,1)) > 224) { $tempstr .= substr($str,$n,3); $n += 3; $i++; //把一个中文按两个英文的长度计算 } elseif (ord(substr($str,$n,1)) > 192) { $tempstr .= substr($str,$n,2); $n += 2; $i++; //把一个中文按两个英文的长度计算 } else { $tempstr .= substr($str,$n,1); $n ++; } } //此处增加strip_tags(),去掉字串中包含 HTML 及 PHP 的标记,返回字符串形式的值,避免输出值中有分段现象造成各种难看 $tempstr = strip_tags($tempstr); return $tempstr.'...'; }
以及:
//此处把知更鸟的<br/><?php echosubstr($item->get_description(),0,180);?><!-- 文章内容 --> 改为cut_strr函数 <br/><div style="margin-left: 20px; "><?php echo cut_strr($item->get_description(),360);?>
3、或者如果你比较懒,直接拷贝本文最下面的代码,在主题中创建一个模版php页面,然后写文时使用模版即可。
<?php /* Template Name: 输出RSS页面 */ ?> <?php get_header(); ?> <div id="content"> <?php if (have_posts()) : ?><?php while (have_posts()) : the_post(); ?> <!-- menu --> <div id="map"> <div class="browse">现在位置 ><a title="返回首页" href="<?php echo get_settings('Home'); ?>/">首页</a> ><?php the_title(); ?></div> <div id="feed"><a href="<?php echo get_option('swt_rsssub'); ?>" title="RSS">RSS</a></div> </div> <!-- end: menu --> <!-- entry --> <div class="clear"></div> <div class="entry_box_s"> <div class="entry_title_box"> <!-- 分类图标 --> <div class="ico"><?php include('includes/cat_ico.php'); ?></div> <!-- end: 分类图标 --> <div class="entry_title"><?php the_title(); ?></div> <div class="archive_info"> <span class="date"><?php the_time('Y年m月d日') ?></span> <?php include('includes/source.php'); ?> <span class="comment"> ⁄ <?php comments_popup_link('暂无评论', '评论数 1', '评论数 %'); ?></span> <?php if(function_exists('the_views')) { print ' ⁄ 被围观 '; the_views(); print '+'; } ?> <span class="edit"><?php edit_post_link(' ', ' ', ' '); ?></span> </div> </div> <!-- end: entry_title_box --> <div class="entry"> <div class="page" id="post-<?php the_ID(); ?>"> <?php the_content('More »'); ?> <div class="clear"></div> </div> <div class="rss"> <?php require_once (ABSPATH . WPINC . '/class-feed.php'); //此处把知更鸟的简单str函数改为可以识别中文字函数的函数cut_strr,就不会乱码了。 function cut_strr($str,$len) { if (strlen($str) <= $len) return $str; $n = 0; $tempstr = ''; for ($i=0; $i<$len; $i++) { if (ord(substr($str,$n,1)) > 224) { $tempstr .= substr($str,$n,3); $n += 3; $i++; //把一个中文按两个英文的长度计算 } elseif (ord(substr($str,$n,1)) > 192) { $tempstr .= substr($str,$n,2); $n += 2; $i++; //把一个中文按两个英文的长度计算 } else { $tempstr .= substr($str,$n,1); $n ++; } } //此处增加strip_tags(),去掉字串中包含 HTML 及 PHP 的标记,返回字符串形式的值,避免输出值中有分段现象造成各种难看 $tempstr = strip_tags($tempstr); return $tempstr.'...'; } $feed = new SimplePie(); $feed->set_feed_url(array('http://feed.feedsky.com/synyan2')); //可以添加多个站点feed地址 $feed->enable_order_by_date(false); $feed->set_cache_location($_SERVER['DOCUMENT_ROOT'] . '/cache');//缓存文件夹 $feed->init(); $feed->handle_content_type(); ?> <ul> <?php foreach ($feed->get_items(0,10) as$item)://10是文章篇数 ?> <li> <a href="<?php echo $item->get_permalink()?>" rel="bookmark" title="阅读> <?php echo $item->get_title()?>"><?php echo$item->get_title()?></a><!-- 文章标题 --> <br/><div style="margin-left: 20px; "><?php echo cut_strr($item->get_description(),360);?> <a href="<?php echo $item->get_permalink()?>" rel="bookmark" title="阅读">继续阅读</a><!-- 文章内容 --></div> <?php endforeach; ?> </li> </ul> </div> </div> <!-- end: entry --> <div class="clear"></div> <?php comments_template(); ?> <i class="lt"></i> <i class="rt"></i> </div> <div class="entry_sb"> <i class="lb"></i> <i class="rb"></i> </div> <?php endwhile; ?> <?php endif; ?> </div> <!-- end: content --> <?php get_sidebar(); ?> <?php get_footer(); ?>
2012年4月8日
补记:
有个方法比这个好,请见《单篇文章嵌入不同的RSS或Atom feed地址》。
调用了,但是调来的文章标题有点长,有什么办法调用来的文章标题缩小吗?
@13899.tk有的。标题截断函数在文章里提到了,使用 function cut_strr($str,$len) 即可。
貌似很有用的功能,还没想出怎么用在我的博客上。:-)
@护法你可以把我的内容显示在你的友情链接里……
@S̆̈嗯,这周末研究一下。