CMS に wordpress を使う場合の、 xml ( feed ) を利用した Flash との連携について。
wordpress で投降した記事に挿入した画像データを、xml を参照して ActionScript で読み込み、操作する方法のメモ。いわゆる外部画像の読み込みを、相手が wordpress の場合どうするか、という話で、さらにここでは、画像を参照する wordpress のカテゴリを任意のものにする方法です。
任意のカテゴリからのみ xml を参照し、そのカテゴリ内の内容を ActionScript で load しようと思ったとき、 wordpress がはき出す xml は画像情報を含んでいません(厳密には設定すれば含んでいるが)。
(※任意のカテゴリの xml は、ブラウザアドレスバーで表示中のURLカテゴリ末尾に /feed と入力してやれば確認できますが、 E4X でパースするにもネームスペースとか面倒くさいし、ページテンプレートを使ってしまうと、そのページはxmlをはき出すためのページになっていまい、htmlを同時に存在させたい場合などには不向きなので Feed Wrangler を使います。)
Feed Wrangler の設定だとかテンプレートのことはググればわんさか出てくるので割愛
xml の中に、投稿記事内の画像 url を含める方法については、WebTecNote さんの記事をもの凄く参考にさせて頂きました。(実際、投稿記事画像まわりについての wordpress の情報ってなかなかコレと言ったものがなく数日嵌ってました...。)
でもって作成した テンプレート php が以下です
<?php
/*
Template Name: 任意のテンプレート名
*/
?>
<?php header('Content-Type: text/xml; charset='.get_option('blog_charset'), true); ?>
<?php echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>
<items>
<?php query_posts('category_name=任意のカテゴリ名'); ?>
<?php if(have_posts()): while(have_posts()): the_post(); ?>
<item_list>
<?php
echo "<title>".$post->post_title."</title>\n";
echo "<url>".get_permalink($post->ID)."</url>\n";
echo "<date>".$post->post_date."</date>\n";
echo "<content>".strip_tags($post->post_content)."</content>\n";
$attachments = get_children(array('post_parent' => get_the_ID(), 'post_type' => 'attachment', 'post_mime_type' => 'image'));
if ( is_array($attachments) ){
$count = count($attachments);
foreach ($attachments as $key => $row){
$mo[$key] = $row->menu_order;
$aid[$key] = $row->ID;
}
array_multisort($mo, SORT_ASC,$aid,SORT_DESC,$attachments);
for($i=0;$i<$count;$i++){
echo "<image>".wp_get_attachment_url(intval($attachments[$i]->ID))."</image>\n";
}
}
$mo = null;
$aid = null;
?>
</item_list>
<?php endwhile; endif; ?>
</items>
※使うときは全角の < を半角にしてください。 > についても。
( syntaxHighLighter ってなんか直接貼れないときあるな... )
29行目、30行目については php に馴染んでいる人目線だとどう映るのかわかりませんが、とりあえずこの2つの変数をループ抜けたと同時に初期化してます。php ド素人なのでこれでいいんだろうか。
とにかく、これしとかないと、ループ内で次のポストの走査時にエラー吐きます(これまたエラい嵌った)。
でもって吐かれる xml はこんな感じになる。
<title>記事のタイトル</title>
記事の単一ページURL
記事を投稿した日時
記事内のコメントとか
<image>
記事内で使われているフルサイズ画像のURL
</image>
imageタグは、記事画像内にある画像の数だけ繰り返される。順番は投稿記事の 『 ギャラリー 』 で設定する順番に依存する。