MagpieRSSでWordpressの「description」の有無の判定でつまった。
RSSパーサーとして便利な「MagpieRSS」。
変なところでつまってしまった。
Wordpressの「抜粋」を取得して表示させる。
ウェブサイトのトップ(Wordpress外のphpファイル)にブログ記事リストを設置するにあたり、MagpieRSSを使ってリスト毎に「タイトル」「本文抜粋(本文の冒頭100文字程度)」を出すように表示していた。
これに対して、「本文抜粋ではなく別の文章を用意して設置をしたい」との要望があったのでWordpress標準の「抜粋」の入力欄を活用してもらい、MagpieRSSでは、それを取得するようにした。
そこで以下のような方法を考えた。
もしも、抜粋が入力されていたら、 抜粋を表示 そうでないならば、 本文を抜粋して表示 とする。
そして、実際のコードは以下のようにした。
if($item[description]) { $description = $item[description]; } else { $description = mb_substr(preg_replace('/(\s| | | )/', '', strip_tags( $item[content][encoded] )), 0, 100, 'utf-8'); } print $description;
抜粋には“何も入力されていない”状態で、実行してみた。
しかし、結果以下のように表示されてしまった。
[...]
あー何も入力しなくても、入るのかー。
じゃあ「10文字以下の場合」は、本文表示とかにしようかなー。
if(mb_strlen($item[description]) > 10) { $description = $item[description]; } else { $description = mb_substr(preg_replace('/(\s| | | )/', '', strip_tags( $item[content][encoded] )), 0, 100, 'utf-8'); } print $description;
表示結果
[...]
同じ!!
え、これ( [...])何文字あるの?
61文字。多い!
なぜこんなに文字数が多いのか、RSS側の記述を見るとこのような感じだった。
<description> <![CDATA[                 [...] ]]> </description>
そういうことか・・・
仕方ないので、下記のように修正した。
$description = preg_replace('/(\s| | | | )/', '',strip_tags($item[description])); if(mb_strlen($description) < 10) { $description = mb_substr(preg_replace('/(\s| | | )/', '', strip_tags( $item[content][encoded] )), 0, 110, 'utf-8'); }
descriptionからHTMLや空白文字などを抜き去り、10文字未満なら本文抜粋を表示するようにした。
とりあえずこれで目的は達せられた。
しかし、正直スマートな方法かといわれると全くもって微妙。
▼MagpieRSS