[WordPress] 他サイトのRSSを読み込んで表示

WordPressはPHPでできているので、他サイトのRSSを読み込ませてサイドバーなどに新着記事を表示するのも簡単だ…と思っていたら意外と手こずったのでメモ。

いくつかプラグインも配布されているようなのだが、受託案件でデザイン的な制約があったので自作することとする。WordPressではfetch_rss()wp_rss()get_rss()という関数が用意されていて、楽に実装できるようだ。それぞれ、fetch_rss()が配列で取得、wp_rss()が<ul>付きでリスト表示、get_rss()が<ul>なしでリスト表示というのが主な違い。

使い方は以下ページで分かりやすく解説されています。

WebTecNote – [WP]wordpressでRSSを取得して表示

詰まったのは日時を表示させようと思ったため。wp_rss()とget_rss()のどちらも記事の投稿日時は表示されない。そのためfetch_rss()でRSSデータを配列で取得して表示してみるが、こんな風に表示される。

2009-05-13T08:26:08+09:00

これではちょっと困る。調べてみたところこの日時の表示形式はW3CDTFというそうで、この形式を解釈するparse_w3cdtf()という関数もあるみたい。なーんだ。

というわけで、関数にしてみました。functions.phpに書いておけばテンプレート中で使えます。

function custom_get_rss($feed,$maxitems){
$rss = fetch_rss($feed);
$items = array_slice($rss->items, 0, $maxitems);
if (empty($items)) {
echo '<li>No Items</li>';
} else {
foreach ( $items as $item ){
echo '<li><a href="' . $item['link'] . '" title="' . $item['title'] . '>';
echo $item['title'];
echo '</a>';
if($item['dc']['date']){
echo '<span class="date">' . date('Y年m月d日',parse_w3cdtf($item['dc']['date'])) . '</span>';
}
echo '</li>';
}
}
}

タネさえ分かってしまえば実に便利。
(上記サンプルはRSSの種類を考慮していないので読み込むRSSによっては動かない場合もあります。ご了承ください。)

エコスゴイ世界のニュースを配信するサイト

greenz_logo

エコスゴイ世界のニュースを配信するニュースメディアサイト、greenz.jpをご紹介。

世界は人の意識で点火する、という科白が先日紹介した漫画「ヨルムンガンド」にあったのをふと思い出しました。この場合は開戦の意味でしたが、どんなことにおいても同様なわけで。

未だに温暖化陰謀論を唱える人が身近にいたりするんですが、人の心を点火したという意味では陰謀論の方がうまくいっているかもしれない。世界中で取り組まれているにもかかわらず、温暖化というメッセージは人々の心をまだ点火できていない。

そこで、こういうニュースメディアにはとても期待しています。クリエイティブ・コモンズやカーボンオフセットというサイト運営における先進的な考え方を採用しているのも興味深い。

とはいえ、面白いニュースがたくさんですので、深く考えず「エコスゴイ」ニュースサイトを回遊サイトに加えてみては?(この「エコスゴイ」ってフレーズ、いいですね)

ここで、greenz.jpの記事から面白いブラジルのCMをご紹介しましょう。

まだ大丈夫かな、まだ大丈夫かな、と見てて思っちゃいました。
手遅れになるときはやってきますよね。スゴイ分かりやすいメッセージですね。

今日と同じように明日がくる、と信じてる人に見てほしいCM – greenz.jp

[WordPress] プラグインを作ろう(2) 独自のカスタムフィールドを追加する

詳細仕様は決まっていないのですが、作りたいのは投稿画面に決まったフォーマットのデータを入力させるプラグイン。カスタムフィールドを使えば投稿画面に付加情報を入力することは可能ですが、毎回決まったフォーマットで入力させたい。

このような用途に使える良質なプラグインにCustom Field Templateがありますが、より厳格に入力フォーマットを限定し、さらに2次利用できればなぁと思っているので、自作してみることにします。

と、その前に便利なジェネレータを発見しましたのでご紹介します。

Fun With Plugins
ウィザード形式でプラグイン名など必要事項を入力していくだけで、WordPressのプラグインとしての骨格を作ってくれます。あとは関数などを追加していくだけ。

さて、上述のCustom Field Templateのソースを見ていくと、管理画面に任意の入力フォームを追加しているのはこの2行のようです。

require_once(ABSPATH . 'wp-admin/includes/template.php');
add_meta_box('cftdiv', __('Custom Field Template', 'custom-field-template'), array(&$this, 'insert_custom_field'), 'post', 'normal', 'core');

1行目は、2行目で使用しているadd_meta_box()関数を定義しているファイルなので読み込みは必須のようです。

2行目のadd_meta_box()が管理画面に任意の入力欄を追加しているみたい。Codexのadd_meta_boxのページをみるとそれぞれの引数の意味が分かります。

<?php add_meta_box('id', 'title', 'callback', 'page', 'context', 'priority'); ?>

idが管理画面に出現する入力欄のdivのid属性値。他とかぶらないようにすればよいでしょう。
titleが管理画面に出現する入力欄のタイトル。最初からあるものだと「抜粋」とか「カスタムフィールド」とか表示されている部分です。
callbackがコールバック関数名。ここで指定した関数が呼ばれると、なるほど。
pageはどの画面に追加するのかを指定。投稿ならpost、ページならpage、リンクならを入力。そのままですね。
contextpriorityはCodexを読んでもよく分かりませんが、無くても通るようなので無視。

と、管理画面に何かを追加できそうなことは分かったので、現時点でいったんプラグインの形にしてみました。

続きを読む [WordPress] プラグインを作ろう(2) 独自のカスタムフィールドを追加する

[WordPress] プラグインを作ろう(1) 参考サイトを探そう

WordPressであったらいいなと思うプラグインが世の中に無い様なので、作ることはできないかと思い立つ。とりあえず参考になりそうなページを漁ってみたのでメモ程度に。

プラグインの作成 – WordPress Codex 日本語版
言わずと知れた本家Codex記事

Create a Custom WordPress Plugin From Scratch
段階を追って詳細に書かれているみたい

WordPress プラグイン作成時のノウハウ – 前編 –
日本語の情報の中では分かりやすそう

さて、順番に読んで行こう。

[MovableType] 自動でサイトマップページを生成する

テンプレートタグを使って自動で最新の状態に保たれるサイトマップページを作る方法。
検索エンジン用のsitemap.xmlではない。

<MTTopLevelFolders sort_method="SortCatFld::Sort">
<MTSubCatIsFirst>
<ul>
</MTSubCatIsFirst>
<MTIfNonZero tag="MTFolderCount">
<li><$MTFolderLabel$>
<ul>
<MTPages sort_by="authored_on" sort_order="ascend">
<li><a href="<$MTPagePermalink$>"><$MTPageTitle$></a></li>
</MTPages>
</ul>
</MTIfNonZero>
<MTSubFolderRecurse>
</li>
<MTSubCatIsLast>
</ul>
</MTSubCatIsLast>
</MTTopLevelFolders>

凝ったデザインにしたい場合は、フォルダごとにループを回すしかなさそう。汎用性は減りますが。

上記ソースはどこかのブログを参考にさせていただいたはずなのですが、失念しました、失礼。
再発見したらリンクします。