BIT/O

ツクールやゲーム・WEB・デザインなど

MagpieRSSでWordpressの「description」の有無の判定でつまった。

f:id:bitorchard:20141124121423g:plain

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[
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; [...]
]]>
</description>

そういうことか・・・

 

仕方ないので、下記のように修正した。

$description = preg_replace('/(\s|&nbsp;|&#160;| | )/', '',strip_tags($item[description]));
if(mb_strlen($description) < 10) {
	$description = mb_substr(preg_replace('/(\s|&nbsp;| | )/', '', strip_tags( $item[content][encoded] )), 0, 110, 'utf-8');
}

descriptionからHTMLや空白文字などを抜き去り、10文字未満なら本文抜粋を表示するようにした。 

とりあえずこれで目的は達せられた。
しかし、正直スマートな方法かといわれると全くもって微妙。

 

▼MagpieRSS

Magpie RSS - PHP RSS Parser