2008年9月4日木曜日

 

【WordPress】カスタマイズ~WP標準のRSS関数~

[WP]wordpressでRSSを取得して表示 - WebTecNote
WordPressには標準でRSSを取得・表示できる関数が用意されている。
「wp-includes/rss-function.php」に記述されているMagpieRSS and RSSCacheSnoopy HTTP clientというライブラリを継承したもの。
使い方は以下のように。fetch_rss()を使うとRSSの各要素を取得できるので自由にレイアウトできる。

<?php
  include_once(ABSPATH . WPINC . '/rss.php');
  $rss = fetch_rss('http://headlines.yahoo.co.jp/rss/itmedia_n.xml');
  $maxitems = 5;
  $items = array_slice($rss->items, 0, $maxitems);
?>
<ul>
<?php
  if (empty($items))
    echo '<li>No items</li>'; 
  else
    foreach ( $items as $item ) :
?>
<li>
  <a href='<?php echo $item['link']; ?>' title='<?php echo $item['title']; ?>'><?php echo $item['title']; ?></a>
</li> 
<?php endforeach; ?>
</ul>
get_rss()wp_rss()を使うと整形された結果が返ってくる。

include_once(ABSPATH . WPINC . '/rss.php');
get_rss("http://wordpress.org/development/feed/");
wp_rss("http://wordpress.org/development/feed/");
get_rss()、wp_rss()二つの関数の違いは以下のとおり。
wp_rss($url, $num_items)$urlは必須。$num_itemは取得表示数。デフォルトは全て表示。ulタグとセットで表示。取得できなかった場合エラーメッセージが返る。
get_rss($url, $num_items)$urlは必須。$num_itemは取得表示数。デフォルトは5。リスト部分のみ出力。取得できなかった場合falseが返される。
設定はMagpieRSS and RSSCacheと同様に出来る。

define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');//出力エンコード
define('MAGPIE_CACHE_DIR', './cache');//キャッシュディレクトリ
define('MAGPIE_FETCH_TIME_OUT', 30); //タイムアウトまでの時間
define('MAGPIE_CACHE_AGE', 60*60); // キャッシュ更新の時間(秒) - この場合1時間
標準関数 rss-function.php - DirtHighway.net
これらは環境によって文字化けする。上の出力エンコードとか意味がない。
原因はwp_rss()のソースで次のように扱われているから。
//wp_rss()
echo htmlentities($item['title']);
なので、>wp_rss()を変更してもいいけど、新しく関数を定義。

function wp_rss2 ($url, $num_items) {
  $rss = fetch_rss($url);
  if ( $rss ) {
    echo "<ul>";
    $rss->items = array_slice($rss->items, 0, $num_items);
    foreach ($rss->items as $item ) {
      $item_desc = mb_convert_encoding($item[description],'EUC-JP','UTF-8');
      echo "<li>\n";
      echo "<a href='$item[link]' title='$item_desc'>";
      echo mb_convert_encoding($item['title'],'EUC-JP','UTF-8');
      echo "</a><br />\n";
      echo "</li>\n";
    } 
    echo "</ul>";
  } else {
    echo "an error has occured the feed is probably down, try again later.";
 }
}
関数の定義以前に呼び出してはいけないのかな。
場合によっては元のエンコードは省略する必要もある。
echo mb_convert_encoding($item['title'],'UTF-8');

ラベル:


コメント: コメントを投稿

登録 コメントの投稿 [Atom]



この投稿へのリンク:

リンクを作成



<< ホーム

This page is powered by Blogger. Isn't yours?

登録 投稿 [Atom]

Google