メニュー(スマホは左の Hamburger_icon より)
ソロツーリングと気ままな旅ホームソロツーリングと気ままな旅  >  趣味を楽しもう  >  ワードプレスで同窓会ホームページを作る  >  別のワードプレスフィードから特定カテゴリーのみ表示する。

これはワードプレスを利用して別のワードプレスのフィードを取得し特定のカテゴリーのみを固定ページに表示するという手法について検討したときの忘備録です。この件について検索してみるとこの種の手法を説明しているサイトは様々です。主にphp の simplexml_load_fileを利用したもの、JQuery Ajaxを利用したものそしてワードプレスに搭載されているfeed.phpを利用したものが挙げられます。

結局、ワードプレスに標準搭載されているfeed.phpを利用し固定ページに表示することにしました。固定ページにphpは使えないのでテーマにあるfunctions.phpにコードを追加し、add_shortcode(ショートコード)が使えるようにし固定ページに設置します。これはその元となるページの作業です。

関数リファレンス/fetch_feedのページでは以下のサンプルコードが記載されていました。
<h2><?php _e( 'Recent news from Some-Other Blog:', 'my-text-domain' ); ?></h2>

<?php // RSS フィードを取得します。
include_once( ABSPATH . WPINC . '/feed.php' );

// 以下で、指定されたフィードから SimplePie のオブジェクトを取得します。
// つまり、「http://example.com/rss/feed/goes/here」部分に取得したいフィードを入力すると、SimplePieによってRSSが表示されます。
// なお、この部分について array 関数を使い、配列にすれば、複数の RSS フィードを同時に取得して、複数の RSS フィードを1つにまとめて時系列に並べて表示することもできます。
$rss = fetch_feed( 'http://example.com/rss/feed/goes/here' );

$maxitems = 0;

if ( ! is_wp_error( $rss ) ) : // ちゃんとフィードが生成されているかをチェックします。

    // すべてのフィードから最新5件を出力します。
    $maxitems = $rss->get_item_quantity( 5 );

    // 0件から始めて指定した件数までの配列を生成します。
    $rss_items = $rss->get_items( 0, $maxitems );

endif;
?>

<ul>
    <?php if ( $maxitems == 0 ) : ?>
        <li><?php _e( 'No items', 'my-text-domain' ); ?></li>
    <?php else : ?>
        <?php // Loop through each feed item and display each item as a hyperlink. ?>
        <?php foreach ( $rss_items as $item ) : ?>
            <li>
                <a href="<?php echo esc_url( $item->get_permalink() ); ?>"
                    title="<?php printf( __( 'Posted %s', 'my-text-domain' ), $item->get_date('j F Y | g:i a') ); ?>">
                    <?php echo esc_html( $item->get_title() ); ?>
                </a>
            </li>
        <?php endforeach; ?>
    <?php endif; ?>
</ul>

ここで問題はRSS フィードを取得した際にxmlの中のitem内にあるcategoryとdc:creatorをそれぞれget_category()、get_author()で取得すると16進数の数字が表示されうまく取得できませんでした。サンプルコードにもSimplePieが利用されていると書かれているのでSimplePieのdocumentを見るとこれを読めるようにできるアイテムがありました。以下の通りです。
categoryは
$item->get_category()->get_label();で取得。

dc:creatorは
$item->get_author()->get_name();で取得。

従ってコードは
<?php
include_once(ABSPATH . WPINC . '/feed.php'); //ワードプレスに標準搭載されているfeed.phpでRSSを取得
$rss = fetch_feed('https://www.galohostel-kobe.com/feed/'); // RSSのURLを指定
if (!is_wp_error( $rss ) ) :
    $maxitems = $rss->get_item_quantity(10); // 表示する記事の最大件数
    $rss_items = $rss->get_items(0, $maxitems);
endif;

if ($maxitems == 0): echo '表示するものががありません';
else :

foreach ( $rss_items as $item ) :
if ($item->get_category()->get_label() == '○○' ){ //○○はカテゴリー名、○○というカテゴリー名のみ表示 ?>
<a class='b-title' href="<?php echo $item->get_permalink(); ?>" rel="bookmark"><?php echo $item->get_title(); ?></a>
<?php } ?>
<div>
<?php echo $item->get_description(); //あるいは$item->get_content()でもOK ?>
</div>
<div>
<?php echo $item->get_date('Y年n月j日'); ?>
</div>
<div>
<?php echo $item ->get_author()->get_name(); //dc:creatorの取得 ?>
</div>
<?php } ?>
<?php endforeach; ?>
<?php endif; ?>


※CSSで<div class='○○'>として整えることも可能です。

これで取得可能となりました。
プリンタ用画面
投票数:1 平均点:10.00
前
ワードプレスのデータをローカルサーバーに反映する方法
カテゴリートップ
ワードプレスで同窓会ホームページを作る
次
子テーマを設置するとエラーが発生する

欲しい商品が必ず見つかるメジャーなネットショップ


Facebook,RSSリンク表示


RSSicon 最新記事のRSS

趣味を楽しむメニュー

趣味を楽しもう新着記事

旅行メジャーサイト簡素リンク

このサイト内の検索

オンライン状況

28 人のユーザが現在オンラインです。 (1 人のユーザが 趣味を楽しもう を参照しています。)

登録ユーザ: 0
ゲスト: 28

もっと...