サポート » 使い方全般 » RSSで複数サイトの記事を表示する時のベスト方法

  • マルチサイトの隣サイトから、そしてサーバーが違う別のサイトから、
    あるカテゴリの新着記事を表示させる処理で悩んでいます。
    色々試してみましたけど、完璧な方法はなかなか見つからないですね。

    表示したいのは、サイト(ブログ)のタイトル、記事のタイトル、日付、サムネイルです。
    例えば、

    ————- (サイト名)
    | サムネイル | これは記事のタイトルです。     2014-05-14
    ————-
    のような感じですね。

    こういう条件を全て果たしているコードがなかなか見つかりません。

    今テストしているのは、
    1.サイトのタイトルと、記事のタイトルのみしか表示しません

    <?php
    
    /*---------------------
    
    外部RSSの取得と表示
    
    -----------------------*/
    
    include_once(ABSPATH . WPINC . '/rss.php'); //wordpress標準定数
    
    //取得feedのURLリスト
    $rss_url = array(
    				'サイト1feed URL',
    				'サイト2feed URL'',
    				'サイト3feed URL''
                    );
    
    foreach ($rss_url as $key => $value) {
        $rss = fetch_rss($value);
        $maxitems       = 10;
        $items[$key] = array_slice($rss->items, 0, $maxitems);
    }
    
    //ブログURLから、そのブログのタイトルを返す関数
    function blog_title($url) {
        //ブログタイトル名とルートURL
        $rss_blog = array(
                        0 => array(
                                'url'   => 'サイト1URL',
                                'title' => 'サイト1タイトル'
                                ),
                        1 => array(
                                'url'   => 'サイト2URL',
                                'title' => 'サイト2タイトル'
                                ),
                        2 => array(
                                'url'   => 'サイト3URL',
                                'title' => 'サイト3タイトル'
                                )
                        );
    
        $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 = '';
                }
            ?>
    	<ul>
            <li>
                <span class="site"><?php echo blog_title($item['link']); ?></span>
                <a href="<?php echo $item['link']; ?>" title="<?php echo $item['title']; ?>" target="_blank"><?php echo $item['title']; ?></a>
            </li>
    	</ul>
        <?php endforeach; ?>
    <?php endforeach; ?>
    <?php endif; ?>

    2.記事のタイトルと日付とカテゴリのタイトル(?)のみしか表示しません。(サイトのタイトルさえ表示できれば…)

    <?php include_once(ABSPATH . WPINC . '/feed.php');
                $rss = fetch_feed(array(
                                'サイト1 feed URL'',
                                'サイト2 feed URL'',
                                'サイト3 feed URL''
                ));
                if (!is_wp_error( $rss ) ) :
                    $rss->set_cache_duration(1800);
                    $rss->init();
                    $maxitems = $rss->get_item_quantity(10);
                    $rss_items = $rss->get_items(0, $maxitems);
    
                    date_default_timezone_set('Asia/Tokyo');
                endif;
                ?>
    
                <dl>
                    <?php if ($maxitems == 0) echo '<dt>No items.</dt>';
                    else
                    foreach ( $rss_items as $item ) : ?>
                    <dt>
                        <a href='<?php echo $item->get_permalink(); ?>' target="_blank"><?php echo $item->get_title(); ?></a><br />
                        <span class="site"><?php echo $item->get_feed()->get_title(); ?></span><br />
                    </dt>
                    <dd><?php echo $item->get_date("Y-n-j"); ?></dd>
                    <?php endforeach; ?>

    は、日付の表示ができず、はサイトのタイトルが表示できないのです。
    この2つをうまく混ぜて使おうとしでもなかなかうまくいきませんでした。

    誰かいい方法ないでしょうか。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • 2.記事のタイトルと日付とカテゴリのタイトル(?)のみしか表示しません。(サイトのタイトルさえ表示できれば…)

    こちらですが
    <span class="site"><?php echo $item->get_feed()->get_title(); ?></span>
    の部分がサイトのタイトルになっております。

    KUCKLUさん、コメントありがとうございます!

    その部分ですが、確認してみたらなぜかサイトのタイトルとカテゴリタイトルが一緒に出てきますね。
    説明不足っていうか、間違った報告ですね。すみませんでした。

    例えば、「サイト名 » カテゴリ名」のような感じになってしまいます。
    ここで「サイト名」だけ残す方法があれば嬉しいですが、、

    それは、サイトタイトルにカテゴリも含んだRSSだからだと思います。
    WordPressでいうと特定カテゴリのRSSを引っ張ってきているのではないでしょうか?
    その場合、タイトルは「サイト名 >> ◯◯のフィールド」という感じになります。

    kuck1uさん、ご返信ありがとうございます。
    そうです。カテゴリを含んだRSSなんです。
    そういう場合はサイト名だけ表示する方法はやはりないのでしょうか。

    方法は動的に書き換えるしかないと思います。
    php の preg_replace や str_replace で書き換えるのがよいかと思います。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「RSSで複数サイトの記事を表示する時のベスト方法」には新たに返信することはできません。