BLOG ENTRY

外部複数ブログのRSS情報をWordPress上で表示する[WordPress]

wordpress

例えばアメブロとか外部ブログ複数の更新情報をWordPress上で表示する。
・複数の外部ブログからそれぞれ最新の記事を1件ずつ表示させる
・複数の外部ブログから最新の記事を●件表示させる
の2つのやり方をメモしておきます。

WordPress上でのRSS取得&表示は、プラグインでもありそうですけど、標準でfetch_rss()という便利な関数がrss.phpというファイル内に用意されていて、それを使えば簡単に取得できます。

複数の外部ブログからそれぞれ最新の記事を1件ずつ表示させる方法

方法としてはベースの部分はこれだけでOK

[php]
include_once(ABSPATH . WPINC . ‘/rss.php’); //wordpress標準定数
$rss_url = array(
‘ブログタイトルAのRSSのURL’,
‘ブログタイトルBのRSSのURL’,
‘ブログタイトルCのRSSのURL’
);
foreach ($rss_url as $key => $value) {
$rss = fetch_rss($value);
$maxitems = 1; //最新情報1件だけを表示する
$items[$key] = array_slice($rss->items, 0, $maxitems);
}
[/php]

これを、例えばこんな感じでindex.phpやらsidebar.phpに書く。

[php]
<?php

/*———————

外部RSSの取得と表示

———————–*/

include_once(ABSPATH . WPINC . ‘/rss.php’); //wordpress標準定数

//RSSのキャッシュ設定
define(‘MAGPIE_OUTPUT_ENCODING’, ‘UTF-8’);
define(‘MAGPIE_CACHE_DIR’, ‘./cache’);
define(‘MAGPIE_FETCH_TIME_OUT’, 30);
define(‘MAGPIE_CACHE_AGE’, 60*60);

//取得feedのURLリスト
$rss_url = array(
‘ブログタイトルAのRSS’,
‘ブログタイトルBのRSS’,
‘ブログタイトルCのRSS’
);

foreach ($rss_url as $key => $value) {
$rss = fetch_rss($value);
$maxitems = 1;
$items[$key] = array_slice($rss->items, 0, $maxitems);
}

//ブログURLから、そのブログのタイトルを返す関数
function blog_title($url) {
//ブログタイトル名とルートURL
$rss_blog = array(
0 => array(
‘url’ => ‘ブログAのURL’,
‘title’ => ‘ブログタイトルA’
),
1 => array(
‘url’ => ‘ブログBのURL’,
‘title’ => ‘ブログタイトルB’
),
2 => array(
‘url’ => ‘ブログCのURL’,
‘title’ => ‘ブログタイトルC’
)
);

$blog_title = ”;
foreach ($rss_blog as $v) {
if (strpos($url, $v[‘url’]) !== FALSE) {
$blog_title = $v[‘title’];
break;
}
}
return $blog_title;
}

<?php if (!empty($items)) : ?>
<?php foreach ($items as $value) : ?>
<?php foreach ($value as $item) : ?>
<?php
if ($item[‘dc’][‘date’]) {
$date = substr($item[‘dc’][‘date’], 0, 4) . ‘/’ . substr($item[‘dc’][‘date’], 5, 2) . ‘/’ . substr($item[‘dc’][‘date’], 8, 2);
} else {
$date = ”;
}
?>
<h3 class="entry_title"><a href="<?php echo $item[‘link’]; ?>" title="<?php echo $item[‘title’]; ?>" target="_blank"><?php echo $item[‘title’]; ?></a></h3>
<p class="rss_text"><?php echo $date; ?> <a href="<?php echo $item[‘link’]; ?>" title="<?php echo $item[‘title’]; ?>" target="_blank">「<?php echo blog_title($item[‘link’]); ?>」</a>が更新されました</p>
<?php endforeach; ?>
<?php endforeach; ?>
<?php endif; ?>
[/php]

これで【複数の外部ブログから最新1件ずつを表示する】ことができます。

ちなみにアメブロのRSSを取得する場合は
http://feedblog.ameba.jp/rss/ameblo/ユーザーID
これでいけました。
※WordPressのversionによっては、fetch_rss()の動きが違うので、その場合は取得先RSSのURLを変更してみると取得できたりする。

複数の外部ブログから最新の記事を●件表示させる

基本的には上と同じなんですがファイルを分けてみました。で、配列を再整形して時間によってソートします。

quall_rss.php(新規ファイル)
[php]
<?php

/*———————

外部RSSの取得と表示

———————–*/

include_once(ABSPATH . WPINC . ‘/rss.php’); //wordpress標準定数

//RSSのキャッシュ設定
define(‘MAGPIE_OUTPUT_ENCODING’, ‘UTF-8’);
define(‘MAGPIE_CACHE_DIR’, ‘./cache’);
define(‘MAGPIE_FETCH_TIME_OUT’, 30);
define(‘MAGPIE_CACHE_AGE’, 60*60);

//取得feedのURLリスト wordpress ver2.8系で取得する場合はこちら
$rss_url = array(
‘ブログAのfeed(RSS)のURL’,
‘ブログBのfeed(RSS)のURL’,
‘ブログCのfeed(RSS)のURL’,
‘ブログDのfeed(RSS)のURL’,
);

foreach ($rss_url as $key => $value) {
$rss = fetch_rss($value);
$maxitems = 4; //4件表示させる
$items[$key] = array_slice($rss->items, 0, $maxitems);
}

//配列の整形
$total_items = array();
foreach($items as $key => $val){
foreach ($val as $k => $v){
$total_items[] = $v;
}
}

foreach($total_items as $k => $v) {
$dc[$k] = $v[‘dc’][‘date’];
}

array_multisort($dc, SORT_DESC, $total_items);

//ブログURLから、そのブログのタイトルを返す関数
function blog_title($url) {
//ブログタイトル名とルートURL
$rss_blog = array(
0 => array(
‘url’ => ‘ブログAのTOPページURL’,
‘title’ => ‘ブログAのタイトル’
),
1 => array(
‘url’ => ‘ブログBのTOPページURL’,
‘title’ => ‘ブログBのタイトル’
),
2 => array(
‘url’ => ‘ブログCのTOPページURL’,
‘title’ => ‘ブログCのタイトル’
),
3 => array(
‘url’ => ‘ブログDのTOPページURL’,
‘title’ => ‘ブログDのタイトル’
)
);

$blog_title = ”;
foreach ($rss_blog as $v) {
if (strpos($url, $v[‘url’]) !== FALSE) {
$blog_title = $v[‘title’];
break;
}
}
return $blog_title;
}
[/php]

このソースを表示したいファイルでインクルードしてこんな感じで使う
(※HTMLタグは各サイトで任意にやっちゃってください)

index.php
[php]
<?php include(‘quall_rss.php’); ?>
<?php if (!empty($total_items)) : ?>
<?php $i = 0; ?>
<?php foreach ($total_items as $item) : ?>
<?php if ($i > 3) break; ?>
<?php
if ($item[‘dc’][‘date’]) {
$date = substr($item[‘dc’][‘date’], 0, 4) . ‘/’ . substr($item[‘dc’][‘date’], 5, 2) . ‘/’ . substr($item[‘dc’][‘date’], 8, 2);
} else {
$date = ”;
}
?>
<div class="news_text">
<div class="rss_title">
<h3 class="entry_title"><a href="<?php echo $item[‘link’]; ?>" title="<?php echo $item[‘title’]; ?>" target="_blank"><?php echo $item[‘title’]; ?></a></h3>
</div>
<div class="news_content">
<p class="rss_text"><?php echo $date; ?> <a href="<?php echo $item[‘link’]; ?>" title="<?php echo $item[‘title’]; ?>" target="_blank">「<?php echo blog_title($item[‘link’]); ?>」</a>が更新されました</p>
</div>
</div>
<?php $i++; ?>
<?php endforeach; ?>
<?php endif; ?>
[/php]
複数の外部ブログから最新の記事を4件表示させることができました。

終わり。

  • name:通りすがりのWEBデザイナー
  • date:2011/01/19
  • の直前に、

    ======
    ?>
    ======
    が一つ足りないですよね?

    デザイナーなのでPHP見よう見まねでしているレベルなので間違っていたら申し訳ありません。

    でも、とても参考になりました。
    コード使用させていただきます。
    ありがとうございました。

  • type:コメント [ ]

  • name:通りすがりのWEBデザイナー
  • date:2011/01/19
  • の直前に、

    ======
    ?>
    ======
    が一つ足りないですよね?

    デザイナーなのでPHP見よう見まねでしているレベルなので間違っていたら申し訳ありません。

    でも、とても参考になりました。
    コード使用させていただきます。
    ありがとうございました。

  • type:コメント [ ]

  • name:通りすがりのWEBデザイナー
  • date:2011/01/19
  • #

    連投すみません。
    コードが消えてしまったので。

    php if (!empty($items)) : ?

    の直前に

    ?>

    が足りないかもです

    管理者様へ
    連投や間違いすみません、
    申し訳ありませんが不要なコメントを削除頂けたら幸いです。

  • type:コメント [ ]

    WRITE COMMENT


    (required)


    (required)


    (required)

    MENU

    veltica creative of twitter