icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

アンテナサイト風?WordPress『fetch_feed』&配列要素指定で、複数サイトRSS取得とパラメーターでサイトを切り替える方法

更新: 2024/02/10 2811文字

今回は、WPセットアップのお仕事で使おうとしたけど、結局使わなかったので、コラム題材になったアイデアを紹介します(rest-apiで取ったから)。 他サイトの更新情報をRSSから取ってくる方法で、『複数サイトRSS取得とパラメーターでサイトを切り替える』という、アンテナサイトっぽい機能も追加しています。さっそく、実装方法や実際の動作例を確認していきましょう。

WordPressでRSS feedを取る方法

この記事アイデアをやるまえに、管理人が少し扱ってみたものです。参考までに。

(当サイト過去記事)他ブログのRSSを取ってきて連携

今回の記事では『fetch_feed』を使いますが、以前も取り上げています。この時は単純にお知らせや更新情報をWPで表示するだけでした。シンプルなものが欲しいときはこちらをどうぞ。

プラグインを使う(例:RSS Antenna)

上記の例は1サイトだけ取ってくる感じでしたが、プラグインRSS Antennaは、よくあるアンテナサイトのように、複数のサイトからfeedを取ってくることができます。プラグインということもあり、管理画面から件数や取得サイトなども設定できて便利です。

ただし、公式とはいえ、少し古い&最近のWPバージョンに対してアップデートがされていない点は注意しましょう(使った感じ、WPバージョン6.0でも大丈夫そうでした)。

今回の『fetch_feed』RSS取得をやる前の下準備

(テンプレート外で使用する場合)wp-blog-headerを読み込む

今回、固定ページ・投稿ページ・テンプレート以外の『/test/rss.php』というファイルを作って、そこで表示テストしました。このファイルはWPのテンプレートにはないので、独自ファンクションを使うためには『wp-blog-header』を読み込んでおきます。

これを読み込まないでfetch_feedや変数参照したり、wp-blog-headerの前にwp関連の変数・ファンクションを参照すると、エラーになるので注意します。

取得先がWPの場合、取得先本体の『RSS/Atom フィードで表示する最新の投稿数』設定をする

fetch_feedで取ってくるときは、件数も自由に設定できますが、事前に取得先WP管理画面で『RSS/Atom フィードで表示する最新の投稿数』を設定しておきます。

これがデフォルトでは10件に設定されており、fetch_feedで30件とかに増やしても、この件数以上は記事が出てこないからです。

WordPress『fetch_feed』&配列要素指定で、複数サイトRSS取得とパラメーターでサイトを切り替える方法

コード例とポイント

github gistにのせました。上記にはwp-blog-headerが書いていないので、テンプレート外でやる場合は読み込みます。 $argsの配列には、管理人が運営しているサイト3つ(このサイト,SSF,ネットで音楽アレンジサービスblog)のフィードが入っていて、ここに追加して増やせます。

『getsite』というのがパラメーターになっていて、これにより『配列の何番目のフィードを取るか』を指定します($args[3]と$args[4]は空なので、記事がでません。RSS取得先が増えた場合は使います。)。 で、これをfetch_feedに渡します。

『array_sliceで0~10件』までのようになっているものは、ページネーションで使用します(ここのページネーションは仮です。wp-query連動のページネーションが使えないので自作)

件数表示についてはPHPの『 count()』で、配列に何個の記事が入っているかをカウントします。

そして、foreachでループを回して記事を表示していきます。ここら辺はhtmlなどが混在するため、条件分岐が波括弧ではなくコロン構文『if ( 〇〇 ) :~endif;みたいなやつ』になっていますのでご注意ください。

表示例、および実際の動作確認

では早速、動作を確認してみましょう。表示はこんな感じで、上部にはパラメータをつけるリンクが。これはCSSでボタンみたいにしてもよいです。パラメータ無し(リセット用)のほか、getsite=1~3までのパラメータがつくリンクを設置。

パラメータで絞り込んでいない状態では、最初の$argsに設定した複数のサイトが混在(日付ソート)して表示されます。

上部のパラメーター付きリンクをクリックすることで、RSSを取得するサイトが絞り込めました。写真はSSFの記事だけ表示しています。

まだまだ変更する点はありますが、『とりあえずこんな感じ』というのをチェックされたい場合は、以下のリンクから捜査してみてください。

あとがき・まとめ

  • WPのfetch_feedでは、配列に複数のサイトのRSSを入れることにより、複数サイトを混在して取得できる
  • urlパラメーターを使って、絞り込み用に『配列の何番目』を指定することも可能だった
  • array_slice(配列切り取り)やcount(配列要素数カウント)などの配列ファンクションを組み合わせて、機能をパワーアップできる

まとめると、このような感じでしょうか。管理人的にはアンテナサイトはやらないと思いますが、『事業グループや企画内に、ドメインをまたぐ複数のサイトがあり、更新情報をまとめたい』といった場合は便利かと思いますので、ぜひご検討ください。


【カテゴリ】- WordPressファンクションetc
【タグ】- , , ,

関連記事