调用其它站点 RSS 文章显示在自己的 WordPress 网站页面上

首先,本篇参考了知更鸟的文章《调用其它站点文章显示在自己的 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"> &#8260; <?php comments_popup_link('暂无评论', '评论数 1', '评论数 %'); ?></span>  
                    <?php if(function_exists('the_views')) { print ' &#8260; 被围观 '; the_views(); print '+';  } ?>  
                      
                    <span class="edit"><?php edit_post_link('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', '  ', '  '); ?></span>  
                </div>  
            </div>  
            <!-- end: entry_title_box -->  
 
        <div class="entry">  
            <div class="page" id="post-<?php the_ID(); ?>">  
                <?php the_content('More &raquo;'); ?>  
                <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(); ?>

[4 月 8 日补记]:有个方法比这个好,请见《单篇文章嵌入不同的 RSS 或 Atom feed 地址》。

共有 19 条评论

      1. Maxthon 3 Maxthon 3 Windows 7 Windows 7

        @老虎 谢过虎哥的好意先,哈哈,只怕我的懒惰辜负了虎哥一片好心啊,压力山大啊,还是努力翻墙比较轻松,心理上,啊哈哈哈哈 : 谢谢

  1. Google Chrome 19 Google Chrome 19 Windows XP Windows XP

    调用了,但是调来的文章标题有点长,有什么办法调用来的文章标题缩小吗?

发表评论

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